Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Læseren forventes at have kendskab til Java software udvikling, herunder unittesting ved anvendelse af JUnit og Maven.

Afviklede komponenttest

I de følgende afsnit beskrives de tests der afviklet som en del af udviklingen af NAS 2 komponenterne.

Der henvises i øvrigt til NAS 2.0 Udviklerguide for udførselsvejledning og NAS 2.0 Testrapport for resultat.

UnitTests

Der findes unit tests og integration tests af relevante områder af NAS Multiplexer. Det vil sige alle områder der har noget med den forretningsmæssige funktionalitet. 

...

  • Hver testcase er implementeret som en metode i den relevante testklasse
  • Testcasen er navngivet, så det tydeligt fremgår, hvad formålet med testen erKommentarer i testcasen inddeler tydeligt i præcondition (Given), udførsel (When), tjek (Then) som beskrevet f.eks. Martin Fowler: Given-When-Then


Unittests er implementeret vha JUnit og kan eksekveres af Mavens standard testplugin SureFire.

...

Testcoverage udregnes i de enkelte Maven moduler i NAS2 NAS Multiplexeres og aggregeres til en samlet rapport i modulet testreport.

...

Integrationstest til verifikation af deployment

Integrationstestene for NAS 2 er implementeret vha JUnit i modulet integration-test, og er beregnet til afvikling mod en kørende udgave af NAS 2.

Integrationstestene kan udvikles i to modes: Een mod en ekstern NAS 2 og een mod en lokal deployet (på Undertow) NAS 2.

Strategien med lokalt deployet NAS 2 afvikles som en del af build fasen for NAS 2 komponenterne.

Afvikling af Integrationstests mod eksternt kørende NAS aktiveres via Maven ved følgende kommando i modulet integration-test:

mvn test -Dvariabel=value

Det kræves at følgende properties angives ved afvikling af integrationstesten

...

Property

...

Beskrivelse

...

For nemheds skyld er der angivet følgende profiler (kan angives med -P), med variabeldefinitioner for et givent miljø

...

Testrapporter kan genereres i HTML med kommandoer: mvn surefire-report:report; mvn site -DgenerateReports=false

Sammenhæng mellem integrationstests og user stories

NAS 2.0 Design og Arkitekturbeskrivelse findes en liste over, hvilke user stories, der er relevante for hvilke delkomponenter i NAS 2.0.

Navngivningen af integrationstestene er sket udfra navngivningen i design og arkitekturbeskrivelsen.

F.eks. findes tests for NAS-NB-1 i klassen:

./integration-test/src/test/java/dk/sds/nsp/nas/notificationbroker/NasNb1IntegrationTest.java

Ved at sammenholde testrapporten NAS 2.0 Testrapport med listen af user stories kan det verificeres, hvorledes dækningen er.

Performancetests

Performance krav

Der er følgende performance krav til NAS servicen:

Notifications broker

  • Forudsætninger:
    • Test: 10 adviseringer per sekund (1 advisering per kald)
  • Krav:
    • Gennemsnitlig svartid skal være under 250 millisekunder
    • 95 % skal være under 500 millisekunder
    • 99 % skal være under 2.000 millisekunder

Pullpoint

  • Forudsætninger:
    • Baggrundsdata:
      • 1 topic
      • 1.000 pullpoints på dette topic (20 af disse bruges aktivt under testen)
      • Hver pullpoint har en unik idliste med hver 3000 id'er
      • Der behøver ikke være beskeder på tipic inden testen starter
    • Baggrundsbelastning
      • Notifikation broker skal lave 40 adviseringer per sekund fordelt ligeligt på 20 udvalgte pullpoints
      • Dvs. 2 adviseringer per pullpoint per sekund
    • Test: 1 kald til getMessage på hver af de 20 udvalgte pullpoints hver 10. sekund. Dvs. 2 kald per sekund
  • Krav:
    • Gennemsnitlig svartid skal være under 5.000 millisekunder
    • 95 % skal være under 10.000 millisekunder
    • 99 % skal være under 20.000 millisekunder

Disse belyses ved 2 test. En for notification broker og en for pullpoint. I nedenstående afsnit skal der skelnes mellem disse, da baggrundsdata og udførsel af test ikke er ens for de to, 

Baggrundsdata

Notification broker

Der er kun krav om, at der findes et topic i databasen. Dette oprettes med:

insert into topic_mapping(topic, internal_topic) values('TESTNAS-TOPIC-PERFORMANCE-01', 'TESTNAS-TOPIC-PERFORMANCE-01');

Det anvendte topic skal også være oprettet i Kafka.

Pullpoint

Vedlagt sql script

Et sql script med insert statements til baggrundsdata til performance testen for pullpoint, er attached på dette dokument (nas_performancetest.sql).

Scriptet indeholder følgende dele, der samlet opfylder forudsætningerne til de 2 performance teste:

  • 1 topic (topic_mapping)
  • 1.000 idlister (id_list)
  • 3.000.000 (1.000*3.000) idliste indhold (id_list_content)
  • 1.000 pullpoints (pull_point)
  • 1.000 subscriptions (subscription)
  • 1.000 consumers (nas_consumer) 

Før test kørslen for pullpoint skal dette sql script indlæses til en tom NAS database. Det anvendte topic skal også være oprettet i Kafka.

Ændring af sql insert fil

Ønskes et andet datagrundlag til pullpoint testen, kan sql filen skabes vha. java klassen GenerateTestdataSql, der findes i NSP performance test sourcen under NAS (https://svn.nspop.dk/svn/components/performance/trunk).

Den nuværende sql fil er skabt med parametrene: pullPoint 1000 3000 idtype01 TESTNAS-TOPIC-PERFORMANCE-01 30808460SOSITEST .

Udførsel af test

Forberedelse

Testen hentes fra https://svn.nspop.dk/svn/components/performance/trunk i den revision, der er angivet nedenfor per release af NAS servicen.

Databasen klargøres. Tom NAS database, de respektive scripts, som nævnt under baggrundsdata, køres.

Der skal være en kørende version af NAS servicen, man kan teste imod. Og host.properties skal være sat korrekt op jf. arosiis performance test framework.

For at opnå en kørsel så tæt som muligt på 2 kald per sekund på pullpoint testen, skal der her startes med 1 tråd for de 2 noder med en øgning på 3 per iteration. Notification broker testen køres som normalt.

Kørsel

Når databasen er på plads, servicen kørende og testen configureret kan følgende køres:

Notification broker

run_test.sh -h hosts.properties -p 9012 nas notificationbroker nbtest900

Pullpoint

run_test.sh -h hosts.properties -p 9012 nas pullpoint pptest900

(distributionenerne *test900 kører 15 minutter, der findes også kørsler til 10 sekunder (*test10) )

Version

...

NAS Release

...

Performance test revision

...

'* ' betyder hvilken som helst

Funktionstest

Funktionstesten har til formål at bevise at NAS2's funktionalitet er som ønsket og at der ikke går data tabt ved større data volumen på NAS2. Der hvor større data volumen er kritisk er i forhold til notification broker og pull point og det er derfor kun disse to funktioner der testes med større data volumen. Resterende funktioner/user stories testes via NAS2 integrationstest. 

User stories

Testen den dækker nedenstående user stories

  • NAS-PPF-1: Oprette et pullpoint
  • NAS-IM-1: Opret id liste
  • NAS-SM-1: Oprette subscription
  • NAS-NB-1: Aflevering af advisering
  • NAS-PP-1: Afhentning af adviseringer
  • NAS-IM-2: Opdater id liste
  • NAS-PP-2: Slette et pullpoint
  • NAS-IM-3: slet id liste
  • NAS-SM-2: Nedlægge subscription

Test forløb

Testen deles op i to dele. En del hvor der verificeres at notifikationer ikke går tabt og det er de rigtige notifkationer der leveres til de enkelte pull points. Den anden del er en verifikation ved hjælp af en integrationstest. Den test har til formål at verificere at det er muligt at udføre alle de user stories der er beskrevet i afsnit 3.1. 

Verifikations test

Verifikationstesten har til formål at :

  • bevise at der ikke går notifikationer tabt.
  • det er de rigtige notifikationer der leveres til de enkelte pull points når systemet belastes med mange notifikationer. 
  • sikre robusthed ved belastning
  • leverancesikkerhed as adviser i forhold til publish/subscribe ved belastning

I NAS2 projektet er der udviklet et selvstændigt program der kan kalde de forskellige services. Udfra en input fil kan det styres hvilke subscriptions, id lister osv. der skal oprettes samt hvor mange notifikationer der skal sendes. Programmet logger også hvilke adviser der er sendt samt hvilke der er hentet ud via pull point servicen. 

Aflevering af adviser

Aflevering af adviser sker med tanke på at få verificeret at adviser kan afleveres til NAS2 uden at der returneres fejl. 

Nedenstående beskriver mønstret på de adviser der afleveres til NAS2. Der afleveres et total på 5000 adviser. Inden programmet til at aflevere adviser afvikles skal relevante topics være oprettet samt subscriptions osv. skal være oprettet. Det vil sige dem som FMK anvender. Disse er dokumenteret på https://wiki.fmk.netic.dk/doku.php?id=fmk:advis:topic.

...

Ovenstående vil teste alle muligheder i form af af at der kun sendes et advis pr id, mange adviser pr id, der leveres til forskellige topics og der veksles mellem forskelligt indhold i adviserne. 

Afhentning af adviser

Afhentning af adviser sker med tanke på at få verificeret nedenstående.

  1. At alle adviser der er afleveret også kan hentes via pull point. Det sker ved oprettelse af pull points og subscriptions uden ID-lister. 
  2. At der kun retureneres de adviser der svarer til den ID-liste der er til en subscription. Det sker ved at der oprettes en række pull points med hver deres ID-liste.
  3. At der kan returneres adviser fra forskellige topics på det samme pull point.
  4. At adviser ikke forvanskes i NAS2. Dette sker ved sammenligning af det afsendte advis med det modtagne advis. 

For at understøtte ovenstående skal der oprettes følgende pull points og subscriptions. 

...

TOPIC1

TOPIC2

TOPIC3

TOPIC3

...

<ingen>

ID liste med under 50 Id'er.

ID liste med mere end 1000 ID'er.

ID liste med mere end 1000 ID'er

...

Her anvendes de integrations tests der er udviklet som en del af NAS2 projektet. Integrationstesten konfigureres til at kalde NAS Multiplexeren og dermed testes funktionaliteten af denne samt det verificeres at beskeder leveret til det ene system også kan afhentes igen. 

Det er muligt at afvikle NAS integrationstesten mod en lokaltion installation af multiplexeren. I folderen etc/nas ligger der en compose fil. Den starter et setup af 2 notifcation brokere samt tilhørende pullpoint service osv.

I folderen compose/test ligger der en compose fil der starter multiplexeren.

Når alle containere er startet kan NAS integrationstesten startes med nedenstående kommando fra NAS projektet i folderen interation-test.

Code Block
mvn -Pdevelopment -Dnotificationbroker.

Program til understøttelse af ovenstående

I nas udvikles der et program der understøtter ovenstående krav. Det vil sige at det skal have nedenstående funktionalitet. 

  1. Programmet skal generere en liste med ID'er der skal anvendes når NotificationBroker kaldes. 
  2. Programmet skal kalde NotificationBroker med de ID'er der er genereret i step 1. Topic og indhold skal være det som beskrevet under aflevering af adviser. 
  3. Programmet skal oprette pull points svarende til det antal topics der er. Der skal oprettes en subscription på hvert topic og der skal ikke være nogen ID liste tilknyttet. 
  4. Programmet skal oprette X pull points for hvert topic. For hvert af disse pull points skal der oprettes en subscription med en tilhørende ID liste. Hver enkelt ID liste skal indeholde et subset af de ID'er der er anvendt i forbindelse med aflevering af adviser. 
  5. Programmet skal kalde GetMessages på de pull points der er oprettet indtil der ikke er flere beskeder. Hver besked skal logges til en fil. 
  6. Det skal være muligt at afvikle ovenstående 5 steps selvstændigt. 

Når ovenstående er udført skal de loggede data sammenlignes så det verificeres at der ikke er gået beskeder tabt, at det er de rigtige adviser der er leveret til de oprettede pull points og at indholdet af adviserne ikke er forvansket. Det sker ved at sammenligne de beskeder der er afleveret til NotificationBroker samt de beskeder der er hentet ud ved kald til GetMessages servicen. 

NAS integrationstest

For verifikation af at det er muligt at udføre de enkelte user stories er der oprettet en integrations test der hedder NasAnvenderScenarieTest. Denne test udfører nedenstående. Testen afvikles når integrationstesten afvikles mod NAS systemet.

  1. Kalder CreatePullPoint på PullPointFactory.
  2. Kalder CreateIDList på IDList med ID'erne "ID1" og "ID2". 
  3. Kalder Subscribe på SubscriptionManager.
  4. Kalder Notify på NotificationBroker med "ID1", "ID2" og "ID3".
  5. Kalder GetMessages på PullPoint. 
  6. Verificerer at der kun er modtaget to beskeder og at de har ID'erne "ID1" og "ID2".
  7. Kalder CretaeIDList på IDList med ID'erne "ID2" og "ID3". 
  8. Kalder Notify på NotificationBroker med "ID1", "ID2" og "ID3".
  9. Verificerer at der kun er modtaget to beskeder og at de har ID'erne "ID2" og "ID3".
  10. Kalder Unsubscribe på SubscriptionManager
  11. Kalder DestroyIDList på IDList. 
  12. Kalder DestroyPullPoint på PullPoint.

Afvikling af test program

Det selvstændige program til at hente adviseringer afvikles som beskrevet nedenfor. 

...

endpoint=http://localhost:

...

Tidsplan for FMK performance test

Nedenstående tidsplan tager udgangspunkt i at NS2 er klar i test2 miljøet i uge 38. Hvis NAS2 ikke er tilgængelig i test2 miljøet skubbes tidsplanen tilsvarende. 

...

Funktionstest - Gammel udgave

User stories

Testen den dækker nedenstående user stories

  • NAS-PPF-1: Oprette et pullpoint
  • NAS-IM-1: Opret id liste
  • NAS-SM-1: Oprette subscription
  • NAS-NB-1: Aflevering af advisering
  • NAS-PP-1: Afhentning af adviseringer
  • NAS-IM-2: Opdater id liste
  • NAS-PP-2: Slette et pullpoint
  • NAS-IM-3: slet id liste
  • NAS-SM-2: Nedlægge subscription

Test forløb

Testen deles op i to dele. En del hvor der verificeres at FMK kan aflevere de adviseringer de afleverer i dag uden at få fejl og at det er muligt at hente alle adviseringer ud igen uden at få fejl. Den anden del er en verifikation ved hjælp af en integrationstest. Den test har til formål at verificere at det er muligt at udføre alle de user stories der er beskrevet i afsnit 3.1. 

FMK performance test

Formålet med denne del af testen er at bevise at FMK kan aflevere de adviseringer som de kan i dag uden at få fejl samt  at det er muligt at afhente alle adviseringer uden at der tabes beskeder. 

FMK projektet har en JMeter performance test der kan afvikles. Denne test har et repræsentativt kaldemønster med hensyn til adviseringer til NAS. Dette er jvf. mail fra Trifork d. 22. marts 2019. 

Inden FMK afvikler deres performance test skal de oplyse hvilke topics der sendes notifikationer på. Disse er dokumenteret på https://wiki.fmk.netic.dk/doku.php?id=fmk:advis:topic.

Fra NAS' side udvikles der et selvstændigt program med nedenstående egenskaber. 

  1. Programmet skal oprette pull points svarende til det antal topics der er. Der skal oprettes en subscription på hvert topic og der skal ikke være nogen ID liste tilknyttet. 
  2. Programmet skal oprette X pull points for hvert topic. For hvert af disse pull points skal der oprettes en subscription med en tilhørende ID liste. ID listerne skal ikke have nogle ID'er tilknyttet.  
  3. Programmet skal have mulighed for at opdatere en eksisterende ID liste. 
  4. Programmet skal kalde GetMessages på de pull points der er oprettet indtil der ikke er flere beskeder. Hver besked skal logges til en fil. 
  5. Det skal være muligt at afvikle ovenstående 3 steps selvstændigt. 

Step 1 og 2 skal afvikles inden FMK må gennemføre deres test. Efter step 3 er afviklet og alle beskeder er hentet skal nedenstående udføres. 

  1. For de pull points der blev oprettet i step 1 skal det verificeres at alle beskeder er modtaget. Det gøres ved at sammenligne de ID'er programmet har logget med det FMK har leveret. Alle ID'er FMK har oplyst skal være modtaget. 
  2. For de pull points der blev oprettet i step 2 skal det verificeres at de beskeder der er modtaget matcher med dem der er i den givne ID liste og at det matcher med det FMK har leveret. 

NAS integrationstest

For verifikation af at det er muligt at udføre de enkelte user stories er der oprettet en integrations test der hedder NasAnvenderScenarieTest. Denne test udfører nedenstående. Testen afvikles når integrationstesten afvikles mod NAS systemet.

  1. Kalder CreatePullPoint på PullPointFactory.
  2. Kalder CreateIDList på IDList med ID'erne "ID1" og "ID2". 
  3. Kalder Subscribe på SubscriptionManager.
  4. Kalder Notify på NotificationBroker med "ID1", "ID2" og "ID3".
  5. Kalder GetMessages på PullPoint. 
  6. Verificerer at der kun er modtaget to beskeder og at de har ID'erne "ID1" og "ID2".
  7. Kalder CretaeIDList på IDList med ID'erne "ID2" og "ID3". 
  8. Kalder Notify på NotificationBroker med "ID1", "ID2" og "ID3".
  9. Verificerer at der kun er modtaget to beskeder og at de har ID'erne "ID2" og "ID3".
  10. Kalder Unsubscribe på SubscriptionManager
  11. Kalder DestroyIDList på IDList. 
  12. Kalder DestroyPullPoint på PullPoint.

Afvikling af test program

Det selvstændige program til at hente adviseringer afvikles som beskrevet nedenfor. 

...

9090/multiplexer verify


Se testvejledning for NAS2 for hvordan testen den afvikles mod f.eks. test1 miljøet. 

...

Tidsplan for FMK performance test

Nedenstående tidsplan tager udgangspunkt i at NS2 er klar i test2 miljøet i uge 38. Hvis NAS2 ikke er tilgængelig i test2 miljøet skubbes tidsplanen tilsvarende. 

...