Indhold

Introduktion

Formål

Formålet med dette dokument er at beskrive de tests, som er udviklet og afviklet forud for release af LAR servicen.

Følgende typer af test bruges indgår i udviklingsarbejdet:

De i LAR anvendte tests gennemgåes i det følgende.

Læsevejledning

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.

Dokument historik

Dato

Ansvarlig

Beskrivelse

26/2-2018KvalitetsITInitiel version
07/04-2021KvalitetsITFlere detaljer vedr. integrationstest med docker-compose

Definitioner og referencer

Reference

Beskrivelse

LAR

Lægemiddelallergiregisrering

Afviklede komponenttest

Følgende tests er afviklet som en del af udviklingen af LAR.

Der henvises i øvrigt til LAR - Guide til udviklere for udførselsvejledning og LAR - Testrapport for resultat.

UnitTests

Der findes UnitTests af alle centrale enheder (klasser) i LAR.

Placeringen af disse følger standarden foreskrevet af Maven og er placeret i src/test/java i hvert af LAR servicens moduler.

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

Således ligger unittesten for klassen:

./larservice-cave/src/main/java/dk/nsp/larservice/cave/client/CaveClientConverter.java

implementeret i:

./larservice-cave/src/test/java/dk/nsp/larservice/cave/client/CaveClientConverterTest.java

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

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

Code Coverage

Til udregning af testcoverage anvendes Jacoco Maven Plugin (se JaCoCo Maven plug-in).

Testcoverage udregnes i de enkelte Maven moduler i LAR servicen og aggregeres til en samlet rapport i modulet larservice-integrationtest.

Således er en samlet rapport over testcoverage tilgængelig i

./larservice-integrationtest/target/site/jacoco-aggregate/

Der er et mål at test overage er på 80 %. Dog kan det afviges for auto genereret kode. Derfor er code coverage på larservice-types modulet noget lavere end resten.


Unittests og tilhørende udregning af testcoverage udføres som en integreret del af byg af komponenten (se i øvrigt LAR - Guide til udviklere).

Integrationstest til verifikation af funktionalitet og deployment

Integrationstestene for LAR er implementeret vha JUnit, og er beregnet til afvikling mod en kørende udgave af LAR.

For at integrationstesten kan eksekveres med success skal CVR 46837428 være whitelisted i samtykke administration. 

Integrationstest aktiveres via Maven ved følgende kommando:

mvn test -Pintegration-test   -Dconsentadministration.endpoint=http://test1-cnsp.ekstern-test.nspop.dk:8080/consent-administration/service -Dlarservice.endpoint=http://localhost:8082/lar/MedicationAllergyService

Parametrene, der skal sættes er dokumenteret herunder

Property

Beskrivelse

consentadministration.endpointEndpoint til samtykkeadministrationen, der skal benyttes
larservice.endpointURL, der udpeger Larservicen


Ved aktivering af integrationstesten vil helbreds/versionsservice afprøves. Denne kaldes også health servicen.

Derudover vil der laves test af oprettelse samt hentning af allergioplysninger via LAR med udgangpunkt i de User Stories og krav som er beskrevet i krav specifikationen.

Kørsel af integrationstest mod lokalt kørende service

Udfør følgende trin, hvis du ønsker at køre integrationstest mod lokal version deployed vha. docker-compose (Se detaljer i udvikler guides til LAR og CAVE service)

  1. Tjek source ud til LAR og CAVE servicene
  2. Byg servicene
  3. Start CAVE servicen lokalt med docker-compose
  4. Start LAR servicen lokalt med docker-compose
  5. Kør mvn test -Pintegration-test   -Dconsentadministration.endpoint=http://test1-cnsp.ekstern-test.nspop.dk:8080/consent-administration/service -Dlarservice.endpoint=http://localhost:8082/lar/MedicationAllergyService

User Stories og krav anvendt

Formålet med dette afsnit er at forklare, hvordan integrations testens dele er blevet til. Det skal løbende vurderes om krav og integrationstest fortsat hænger sammen.

Der arbejdes med følgende user stories, og disse understøttes af integrations testen.

  1. Som en sundhedsperson, vil jeg registrere medicin-allergioplysninger for en patient, så oplysningerne bliver tilgængelige på tværs af parterne i sundhedsvæsenet
  2. Som en sundhedsperson, vil jeg se medicin-allergioplysninger for en patient, så jeg kan undgå at ordinere medicin, som patienten ikke kan tåle
  3. Som en sundhedsperson, vil jeg opdatere medicin-allergioplysninger for en patient, så oplysningerne bliver tilgængelige på tværs af parterne i sundhedsvæsenet

Derudover er der følgende krav som hver har deres forudsætninger og formål:

For alle user story baserede test forudsættes gyldig DGWS formateret besked og gyldigt SOSI-ID kort.

Minlog og behandler relations service kaldes under integrationstesten, og valideres indirekte ved at en eventuelt fejlsituation vil får LAR servicen til at fejle. Resultatet i selve de 2 services valideres dog ikke automatisk, da det vil være meget omstændigt. Efter at integrationstesten er kørt på test serveren bør MinLog tjekkes manuelt for at se at den i properties angive tekst er kommet korrekt ind, også med de specielle danske bogstaver. Pt er denne tekst: "Medicin intolerens læst (ÆæØøÅå)".

Registrering

  1. registrering af allergi med uuid - postivt udfald
  2. registrering af allergi uden uuid - positivt udfald
  3. registrering af allergi med eksisterende uuid - negativt udfald, genbrug af uuid ikke tilladt
  4. registrering af allergi med formål at afslutte (slettemuligheden) - negativt udfald
  5. registrering af ugylding allergi - negativt udfald

Læsning

  1. læsning af allergi - positivt udfald, ingen historik
  2. læsning af allergi - negativ samtykke uden værdispring, ingen historik - negativt udfald
  3. læsning af allergi - negativ samtykke med værdispring, ingen historik - positivt udfald
  4. læsning af allergi - negativ samtykke mod anden person, ingen historik, positivt udfald, ingen historik
  5. læsning af allergi - dataspecifik negativ samtykke uden værdispring, ingen historik, delvist positivt udfald
  6. læsning af allergi - dataspecifik negativ samtykke med værdispring, ingen historik, postivt udfald
  7. læsning af allergi med ikke eksisterende patient, ingen historik - postivt udfald
  8. læsning af allergi med manglende søgekriterie, ingen historik - negativt udfald
  9. læsning af allergi, med historik , allergi har historik og er inaktiv - positiv udfald
    1. input: patient uden negativ samtykke, ingen værdispring, historik
    2. udfald: status ok, patientens allergier med alle status hentes i alle versioner
    3. test: U2T9testAtAllergierKanHentesMedHistorik
  10. læsning af allergi, ingen historik (selvom der er en del historik) - positiv udfald
    1. input: patient uden negativ samtykke, ingen værdispring, ingen historik
    2. udfald: status ok, patientens nyeste version af allergier med status aktiv hentes
    3. test: U2T10testAtAllergierKanHentesUdenHistorik
  11. læsning af allergi, ingen historik (selvom der er en del historik og inaktiv) - positiv udfald
    1. input: patient uden negativ samtykke, ingen værdispring, ingen historik
    2. udfald: status ok, der er ingen allergier at hente
    3. test: U2T11testAtAllergierIkkeKanHentesUdenHistorikNaarInactive
  12. læsning af allergi uden angivelse af om historik (som ved ingen historik) - positiv udfald
    1. input: patient uden negativ samtykke, ingen værdispring, med historik
    2. udfald: status ok, patientens nyeste version af allergier med status aktiv hentes
    3. test: U2T11testAtAllergierKanHentesUdenHistorikDefault

Opdatering

  1. opdatering af allergi med uuid - postivt udfald
  2. opdatering af allergi uden uuid - negativt udfald
  3. opdatering af allergi med ukendt uuid - negativt udfald
  4. opdatering af allergi med patient ændret - negativt udfald
  5. opdatering af ikke seneste version af allergi - negativ udfald
  6. opdatering af allergi 3 gange og al historik gemmes - postivt udfald
  7. opdatering af allergi med inaktiv status (slettemarkering) -  postivt udfald
  8. opdatering af inaktiv allergi - negativt udfald
  9. opdatering af allergi med invalid data - negativt udfald
  10. opdatering af allergi uden versionid - negativt udfald
    1. input: gyldig eksisterende allergi men uden versionid
    2. udfald: status fejl, allergien er ikke opdateret
    3. test: U3T10testAtAllergiIkkeKanOpdateresNaarVersionNull

Transformation

Transformering testes som en del af testen "registrering af allergi med uuid - postivt udfald" hvor input og output sammenlignes. Dermed har data ikke ændret sig under transformering fra LAR >> CAVE >> LAR format.

Fejlhåndtering

Fejlhåndtering testes som en del af både registrering, opdatering og læsning, i det test som har negativ udfald.

Øvrige krav

Test af sikkerhedsaspekter

Udover ovenstående user story drevne teste kontrolleres følgende med forventet negativ udfald

  1. Test at Headers mangler i DGWS
  2. Test at Voces afvises
  3. Test at ID Card er udløbet

Performancetests

Test data

Eksisterende data

Et forslag til data til performance testen findes attached på dette dokument.

Databasen indeholder 50.000 allergier, fordelt på ligeså mange patienter. 

Før test kørslen skal databasen importeres til en tom fhir database (CAVE servicens database) samt cprSample placeres i sampler biblioteket for integrationstesten

Ny data

Ønskes et nyt datagrundlag kan performance data generes fra LAR service projektet. Dette aktiveres via Maven ved følgende kommando eller tilsvarende med justerede parametre:

mvn test -Pperformancedata-test   -Dconsentadministration.endpoint=http://test1-cnsp.ekstern-test.nspop.dk:8080/consent-administration/service -Dlarservice.endpoint=http://localhost:8065/larservice/MedicationAllergyService

Vær opmærksom på, at justeringer kan være nødvendige i kildekoden (Modulet larservice-integrationtest, pakken .performancedata, klassen PerformanceTestDataImport.java) omkring antallet af records, fordeling af recorder information samt cpr nummer genereringen).

Der bør køres mod en allergi database med tomme tabeller. Efter kørslen kan listen med cpr numre findes i test resources biblioteket.

Udførsel af test

Forberedelse

Testen hentes fra https://svn.nspop.dk/svn/components/performance/trunk i den revision, der er angivet for versionen af LAR servicen.

Databasen klargøres. Tom allergi (fhir) database, hvor cavedatebasedump.sql er indlæst.

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

Kørsel

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

run_test.sh -h hosts.properties -p 9012 lar listallergy test900

(distributionen test900 kører 15 minutter, der findes også kørsler til 10 sekunder (test10) og 1 minut (test60))

Version

LAR ReleasePerformance test revision
1.*.*178 eller nyere






'* ' betyder hvilken som helst


Endurancetests

Denne test indgår som en del af performance testen

Vurdering af historiske data

Der er udviklet import test mod historiske data for Novax og Region Midt. Formålet med dette er at se "rigtige" data indlæst i allergi databasen, samt at få en fornemmelse af, hvilken kvalitet historiske data har i forhold til LAR service interfacet.

Import testene findes i modulet larservice-integrationtest, pakken .dataimport og kan aktiveres via Maven ved følgende kommando

mvn test -Pdataimport-test   -Dconsentadministration.endpoint=http://test1-cnsp.ekstern-test.nspop.dk:8080/consent-administration/service -Dlarservice.endpoint=http://localhost:8065/larservice/MedicationAllergyService

Kørslerne tager udgangspunkt i navngivne filer (se kildekode)  som placeres i test resources biblioteket, og disse bliver så læst ind i allergi databasen.

Disse tests bør som udgangspunkt ikke køres igen (hvorfor de indeholder annoteringen @ignore), men  forbliver i projektet, som inspiration til alternative fremtidige kørsler. Kildekoden er lavet så den både kan kalde LAR servicen, men også alene indsamle statistik omkring de historiske data for hurtigere afvikling. Så det kan være nødvendigt at justere i kildekoden før en eventuelt kørsel.