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.
Følgende tests er 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 |
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 |
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 skal laves 1000 pullpoints på 1 enkelt topic, af disse skal de 20 af dem have kaldt GetMessage under testen Der behøver ikke ligge beskeder på det anvendte topic inden testen starter Hver af de 1000 pullpoints skal have en unik idliste med 3000 unikke id'er hver. Der skal laves en baggrundsbelastning til Notify der leverer 40 adviseringer pr sekund. Adviseringerne skal have id'er således at de er ligeligt fordelt på de id'er som de 20 pullpoints har. Dvs 2 adviseringer pr. pullpoint pr. sekund. Se filen 2019-04-11 14.03.06.jpg for noter fra selve mødet. |
Udover ovenstående test på pullpoint laves performance test på notification broker: Der laves 10 beskeder pr sekund |
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 udfører deres test skal de oplyse hvor mange beskeder der leveres pr. ID og Topic kombination.
Fra NAS' side udvikles der et selvstændrigt 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.