Formålet med dette dokument er at beskrive de tests, som er udviklet og afviklet forud for release af NAS 2 komponenterne.
Følgende typer af test bruges indgår i udviklingsarbejdet:
Unittests: Unittests tester, at de individuelle/isolerede enheder (klasser) i kildekoden virker som de skal.
Integrationstest: Integrationstests afvikles op i mod en kørende NAS 2 service til verifikation af funktion og deployment. Herved verificeres det, at de individuelle enheder kan integreres og arbejde sammen i en kørende service.
Performancetest: Verificerer, at servicen performer med hensyn til svartider og er stabil under et specifikt load.
Andre typer af tests (ikke en del af udviklingen af NAS 2):
Endurancetests, der verificerer at servicen fungerer under længerevarende belastning og ikke har f.eks. memory leaks, som kan udføres i stagning/produktionslignende miljø.
De i NAS 2 anvendte tests gennemgåes i det følgende.
Dokumentet henvender sig til udviklere og testere.
Læseren forventes at have kendskab til Java software udvikling, herunder unittesting ved anvendelse af JUnit og Maven.
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.
Der findes UnitTests af alle centrale enheder (klasser) i NAS 2.
Placeringen af disse følger standarden foreskrevet af Maven og er placeret i src/test/java i hvert af NAS 2s moduler.
Unittests er navngivet med navnet på den klasse, som de tester, efterfulgt af Test.
Således ligger unittesten for klassen:
./notificationbroker/src/main/java/dk/nsp/nas/notificationbroker/service/NotificationBrokerServiceImpl.java
implementeret i:
./notificationbroker/src/test/java/dk/nsp/nas/notificationbroker/service/NotificationBrokerServiceImplTest.java
Unittests er stilmæssigt opbygget på følgende måde:
Unittests er implementeret vha JUnit og kan eksekveres af Mavens standard testplugin SureFire.
Til udregning af testcoverage anvendes Jacoco Maven Plugin (se JaCoCo Maven plug-in).
Testcoverage udregnes i de enkelte Maven moduler i NAS2 og aggregeres til en samlet rapport i modulet testreport.
Således er en samlet rapport over testcoverage tilgængelig i
./testreport/target/site/jacoco-aggregate/
Unittests og tilhørende udregning af testcoverage udføres som en integreret del af byg af komponenten (se i øvrigt NAS 2.0 Udviklerguide).
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 |
notificationbroker.endpoint | Endpoint for NAS 2 NotificationBroker |
pullpointfactory.endpoint | Endpoint for NAS 2 PullPointFactory |
pullpoint.endpoint | Endpoint for NAS 2 PullPoint |
subscriptionmanager.endpoint | Endpoint for NAS 2 SubscriptionManager |
idlist.endpoint | Endpoint for NAS 2 Idlist |
administration.endpoint | Endpoint for NAS 2 Administration |
For nemheds skyld er der angivet følgende profiler (kan angives med -P), med variabeldefinitioner for et givent miljø
Profilnavn | Miljø |
---|---|
development | Det dockerbaserede udviklingsmiljø for NAS 2 |
F.eks.
mvn -Pdevelopment test |
Testrapporter kan genereres i HTML med kommandoer: mvn surefire-report:report; mvn site -DgenerateReports=false
I 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.
Der er følgende performance krav til NAS servicen:
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,
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.
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:
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.
Ø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 .
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.
Når databasen er på plads, servicen kørende og testen configureret kan følgende køres:
run_test.sh -h hosts.properties -p 9012 nas notificationbroker nbtest900
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) )
NAS Release | Performance test revision |
---|---|
2.*.* | (TBD) eller nyere |
'* ' betyder hvilken som helst
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.
Testen den dækker nedenstående user stories
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.
Verifikationstesten har til formål at :
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.
Indhold | Topics | Antal pr id. |
---|---|---|
Tilfældigt blandt de adviser som FMK sender i dag. Disse er beskrevet på https://wiki.fmk.netic.dk/doku.php?id=fmk:advis:indhold_i_adviseringer#indhold_i_adviseringer | Tilfældigt af de 5 topics som FMK anvender i dag. | Tilfældigt antal mellem 1 og 5 |
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.
For at understøtte ovenstående skal der oprettes følgende pull points og subscriptions.
PullPoint | Subscriptions | ID lister | Formål |
---|---|---|---|
PP1 | TOPIC1 | <ingen> | At alle adviser sendt til et topic kan hentes ud på et pull point. |
PP2 | TOPIC2 | <ingen> | At alle adviser sendt til et topic kan hentes ud på et pull point. Der oprettes pull points svarende til antal topics. |
PP3 | TOPIC1 | ID liste med under 50 Id'er | At der kun leveres adviser for de ID'er der er på ID listen. ID listen er en lille ID liste. |
PP4 | TOPIC1 | ID liste med mere end 1000 ID'er | At der kun leveres adviser for de ID'er der er på ID listen. ID listen er en større ID liste. |
PP5 | 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 | At der til et givent pull point kan leveres adviser fra flere forskellige topics samt at der kan laves flere subscriptions på det samme topic og at alle ID'er leveres til pull point. |
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.
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.
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.
Det selvstændige program til at hente adviseringer afvikles som beskrevet nedenfor.
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.
Dato | Aktivitet | Hvem |
---|---|---|
16/9 | Opretter nødvendige topics | Arosii/Netic |
17/9 | Opretter pull points, id lister og subscriptions | KvalitetsIT |
18/9 | FMK Test afvikles | FMK |
19/9 | Udtræk af antal adviser afsendt | FMK |
19/9 | Udtræk af topic, id-type og id fra notification broker audit log. | Netic |
20/9 | Opdatere id lister samt kalde de oprettede pull points | KvalitetsIT |
Uge 39 | Analysere data resultat | KvalitetsIT |
Testen den dækker nedenstående user stories
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.
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.
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.
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.
Det selvstændige program til at hente adviseringer afvikles som beskrevet nedenfor.
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.
Dato | Aktivitet | Hvem |
---|---|---|
16/9 | Opretter nødvendige topics | Arosii/Netic |
17/9 | Opretter pull points, id lister og subscriptions | KvalitetsIT |
18/9 | FMK Test afvikles | FMK |
19/9 | Udtræk af antal adviser afsendt | FMK |
19/9 | Udtræk af topic, id-type og id fra notification broker audit log. | Netic |
20/9 | Opdatere id lister samt kalde de oprettede pull points | KvalitetsIT |
Uge 39 | Analysere data resultat | KvalitetsIT |