Indholdsfortegnelse:

1. Introduktion

Her beskrives de tests, som er udviklet og afviklet forud for release af Nationalt eCPR. 

Følgende typer af test 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 Nationalt eCPR ved at opstarte hele servicen (Se afsnit 4). Integrationstestene bruges 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.

Nedenfor gennemgåes de tests, der er anvendt til test af Nationalt eCPR.

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.

2. 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 eCPR - Guide til udviklere for udførselsvejledning og eCPR - Testrapport til sammenligning for resultat.

3. UnitTests og integrationstest mellem moduler

Systemet er testet med Unittest frameworket, men der er anvendt en blanding af både unit og integrationstest mellem moduler til test af systemet. Testene er i høj grad kategoriseret efter funktion, og dermed har flere relevante units været med i samme test. Det medvirker til at størstedelen af systemet er testet, men at klasserne ikke er testet efter standard unit testing principper. 

Placeringen af unit-/integrationstest følger standarden foreskrevet af Maven og er placeret i src/test/java i ecpr2-service modulet.

3.1. Unittest

Unittests er navngivet med navnet på den klasse, som de tester, efterfulgt af 'Test'. 

Således ligger unittesten for klassen:

./erstatnings-cpr-numre/ecpr2-service/src/main/java/dk/sds/ecpr2/webservice/mapper/FromXMLMapper.java

implementeret i:

./erstatnings-cpr-numre/ecpr2-service/src/test/java/dk/sds/ecpr2/webservice/mapper/FromXMLMapperTest.java

Unittests er stilmæssigt opbygget på følgende måde:

  • Hver testcase er implementeret som en metode i den relevante testklasse
  • Testcasen er navngivet, så det tydeligt fremgår, hvad formålet med testen er

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

3.2. Integrationstestene mellem moduler

Integrationstestene mellem moduler er navngivet efter den funktion de udfører, efterfulgt af 'Test'. Testen for funktionen "CreatePerson" er dermed navngivet "CreatePersonTest". Placeringen af disse test ligger i mappen for den klasse der har første berøring med kaldet. Eksempelvis starter funktionaliteten af CreatePerson i ECPR2WebServiceImpl-klassen. Denne er placeret under 

./erstatnings-cpr-numre/ecpr2-service/src/main/java/dk/sds/ecpr2/webservice/ECPR2WebServiceImpl.java

og testen af createPerson er dermed implementeret i

./erstatnings-cpr-numre/ecpr2-service/src/test/java/dk/sds/ecpr2/webservice/CreatePersonTest.java

For at integrationstestene kan køre bruges en in-memory h2 database. I mappen compose/database/test ligger de sql-filer, der indeholder testdata, der lægges i h2-db ved opstart. 

Outputtet af testene kan ses i 

./erstatnings-cpr-numre/ecpr2-service/target/surfire-reports

hvor resultatet både er gemt som .txt og .xml filer

Til udregning af testcoverage anvendes Jacoco Maven Plugin (se JaCoCo Maven plug-in). Resultatet findes som jacoco.exec under target folderen

Unittests udføres som en integreret del af byg af komponenten (se i øvrigt eCPR - Guide til udviklere).

4. Integrationstest til verifikation af funktionalitet og deployment

Integrationstestene for eCPR er implementeret vha. JUnit i modulet ecpr2-test, og er beregnet til afvikling mod en kørende udgave af Nationalt eCPR.
Her testes det generelle flow gennem systemet, hvor samtlige moduler er integreret. Integrationstestene kræver et kørende dockermiljø, hvorved eCPR først skal bygges og køres, og herefter eksekveres testene:

mvn clean install -D maven.test.skip=true -e
docker-compose -f compose/$foldernavn$/docker-compose.yml up

Hererfter kan integrationstestene afvikles: 

mvn clean install -P=integrationstest

Integrationstestene er navngivet efter hvilke kald de udfører. Et eksempel er updateAndSearch() der først opretter en patient, opdaterer samme patient, og herefter fremsøger denne patient. Integrationstestene er udarbejdet med henblik på at teste mest anvendte brugerhistorier, hvorved der både er testet oprettelse, opdatering, fremsøgning, opslag, sletning af person og reservér Id'er (Se eCPR - Brugerhistorier).

Ud over brugerhistorierne er Servlet endpoints også integrationstestet

Der kan testes op mod andre miljøer end lokalt miljø ved at rette i HOST og PORT variablerne i ecpr2-test/src/test/java/dk/sds/ecpr2/AbstractITCase.java.

5. Performancetests

5.1. Opsætning og baggrundsdata

Der er general krav om, at der findes baggrundsdata i databasen. Dette oprettes via datageneratoren i ecpr servicen på følgende måde. 

Datageneratoren køres via

mvn clean install -Dmaven.test.skip=true -Pdatagenerator.

Mængden af data konfigureres ved at ændre den fil som propertien datageneration.properties.file i ecpr2.properties peger på.  Der er prædefineret 2 filer:

  • ecpr2-smalldb.properties
  • ecpr2-largedb.properties

Disse kan enten tilpasses, eller der kan oprettes en ny fil, med det ønskede antal data.

Med datageneratoren laves også et udtræk af identifiers fra databasen (identifiers.csv). Filoutputtet kan fibdes i rodmappen for ecpr servicen. Filen med identifiers lægges i testprojektet i mappen under tests/ecpr/src/test/jmeter/templates/testplans forudsat at testprojektet er hentet frahttps://git.nspop.dk/projects/NT/repos/performance-framework og en eventuel eksisterende fil med samme navn slettes. Dette er en forudsætning for at MergePerson kan forløbe korrekt

5.2. Udførsel af test

5.2.1. Forberedelse

Testen hentes fra https://git.nspop.dk/projects/NT/repos/performance-framework/ i den revision, der er angivet nedenfor per release af eCPR servicen.

Databasen klargøres ved at køre datageneratoren i eCPR servicen som beskrevet ovenfor. 

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

Det besluttes hvilken distribution, der ønskes at køres med, og denne tilføjes til PerformanceTesten. Der er prædefineret 3 distributions hvor 3 forskellige parametre er justeret:


MASTER_LOOP_TIME

USER_THREAD_COUNTSPIKEGETPERSONBYID_USERS
test10sek_1Users_1Spikes.template.jmx10 sekunder11
test100sek_10Users_5Spikes.template.jmx100105
test900sek_10Users_10Spikes.template.jmx900 (15 minutter)1010
  • MASTER_LOOP_TIME: tiden som performancetesten kører
  • USER_THREAD_COUNT: Antallet af Users der udfører den almindelige belastning
  • SPIKEGETPERSONBYID_USERS: Antallet af systemer, der hvert 5. sekund udfører en indlæsning af 220 personer (GetPersonById)

For at forstå årsagen til at der eksisterer både USER_THREAD_COUNT og SPIKEGETPERSONBYID_COUNT henvises til eCPR - Guide til udviklere

5.2.2. Kørsel

Når databasen er på plads, servicen kørende og testen konfigureret kan testen køres via Jmeters GUI. 

5.3. Version

Version eCPR servicenVersion eCPR Performance testen
1.29.1Uploaded til https://git.nspop.dk/projects/NT/repos/performance-framework/browse 12/12 2023 som featurebranch



Ændringslog

1.02023-11-16Indhold publiceretSDS
1.12023-12-11Performancetest tilføjetTrifork


  • No labels