Vad ska du göra när du går vilse i API-testning?

Publicerad

(12 maj 2020)

Om du skriver inte test ännu, bör du börja. Tester kommer att förbättra kvaliteten på din kod, minska buggar och förmodligen tvinga dig att tänka mer på design och kvalitet. Det svåraste är faktiskt att starta och ta reda på vilken typ av tester man ska skriva.

Så du börjar googla och du hittar många testtyper: enhet, integration, acceptans, funktionell, system, rök, e2e … Vissa resurser säger att du måste ha 100\% täckning, andra säger att full täckning betyder inte att din kod är fullständigt testad. Även när du bestämmer vilken typ av tester du ska använda kan det vara svårt att bestämma hur du ska testa någon specifik logik i din app.

Ge inte upp! Vi har några tips vi lärde oss under vägen och förhoppningsvis kommer det att göra ditt liv enklare.

Försök inte testa allt med bara funktionella tester

Detta är det första misstaget utvecklare gör i testning. Så låt oss först rensa det.

Funktionella tester i REST Api skulle innebära att du skickar begäran på en slutpunkt och hävdar sitt svar. Om din rutt har flera olika fall där domänlogik kan gå måste du skriva separat test för varje fall för att vara säker på att alla fungerar.

Detta kan till och med fungera i en mycket liten app, men som så snart din app växer kommer det att bli mycket svårt att underhålla och de kommer att vara mycket långsamma. Vid någon tidpunkt kommer du att förlora mer tid på att fixa och underhålla tester än att verkligen arbeta med din app. Det är inte vad testerna bör handla om. Vi lärde oss det på det hårda sättet.

Testpyramiden

Testpyramiden är en graf som berättar hur mycket test du ska skriva på varje lager.

Lägre lager är snabbare och det är därför vi måste täcka så mycket som möjligt med enhet- och integrationstester. Ju mer hög nivå du får, desto färre tester bör du ha. Du kommer att höra olika namn på enskilda lager, men logiken bakom dem är densamma.

Testpyramiden

Enhetstester

Så låt oss börja från början – Enhetstester. Här är en definition:

Enhetstestning är en nivå av programvarutestning där enskilda enheter / komponenter i en programvara testas. Syftet är att validera att varje separat enhet i programvaran fungerar som förväntat. En enhet är den minsta testbara delen av någon programvara.

Detta innebär att du bör testa varje metod isolerat och håna alla andra metoder.

Det är inte Enhetstester, det är du!

Enhetstester är inte bara bra för att se till att din kod fungerar, men det kommer också att få dig att göra en del refactoring. De ska vara lätta att skriva. Om du kämpar med att testa en viss kod betyder det att din kod är dåligt skriven och att den bör omformas. SOLID-principer hjälper dig här. SOLID är en uppsättning designprinciper för att skriva ren, elegant och läsbar kod. Om du skriver fast kod kommer enhetstester att vara en bit av en kaka.

Så i grund och botten, med enhetstester ser du till att varje isolerad metod i din kod fungerar som den ska. Det skulle innebära att all kod fungerar som förväntat, eller hur? Inte riktigt. Du måste också se till att enskilda komponenter fungerar ok tillsammans. Och det är där integrationstester kommer.

Integrationstest

Integrationstestning är den fas i programvarutestning där enskilda programvarumoduler kombineras och testas som en grupp.

Bra exempel när databasfråga inte räcker byggare. I enhetstester kan du se till att du ringde villkor du vill ha i frågan, men om din fråga är mer komplicerad kan du inte vara säker på att villkoren du använde kommer att returnera förväntat resultat tills du ringer ett faktiskt samtal till databasen. Så det är här integrationstest som kör frågan i en testdatabas och hävdar förväntade resultat ska komma.

Fall där du behöver integreringstest:

  • Verifiera korrekt integration med 3: e partibibliotek eller API
  • Verifiera två eller flera moduler som har enhetstester fungerar som förväntat tillsammans

Funktionella tester

Funktionell testning definieras som testning av fullständig funktionalitet i vissa applikationer.

De är mycket enklare att skriva i API jämfört med en applikation med ett användargränssnitt. Funktionella tester för API bör bestå av att skicka faktiska förfrågningar till API-slutpunkter och validera svarsformatet. Du bör testa varje rutt med avseende på framgångsrikt och felsvar.

Men gör inte för mycket, du behöver inte testa för varje möjligt fel. Detta bör redan täckas av enhets- och integrationstester.Här vill du bara se till att din rutt returnerar rätt svarsformat för ett fel. Om dina rutter har olika roller bör du också testa säkerhetsfelsvar.

Här är några användbara verktyg för att göra dina funktionstester enklare att skriva:

  • PHP Matcher – Bibliotek som gör att du kan kontrollera ditt svar mot mönster. Du kan ställa in vilket mönster du förväntar dig för varje fält i ditt svar istället för att hävda verkliga värden i din databas. På så sätt kan du bara testa svarsformat och fälttyper utan att oroa dig om någon sträng eller nummer har ändrats i din testdatabas.
  • Postman test – du kan skriva dina funktionstester i Postman vilket är ganska användbart för frontend-teamet, de kommer att kunna kontrollera och prova dina api-slutpunkter. Det kommer att vara som interaktiv API-dokumentation. Du kan integrera Postman-tester med Newman – kommandoradslöpare som gör att du kan köra tester på kommandoraden och integrera dem i Kontinuerlig integration (CI) .
  • Faker – bibliotek för att generera falska data till din testdatabas

Gå ett steg längre

Nu när du vet att din kod fungerar, du kan kontrollera dess prestanda.

Lasttest

Lasttest kontrollerar om ditt api svarar som förväntat på olika servrar.

Stresstest

Kontrollerar om API fungerar som förväntat vid mottagande av ett stort antal förfrågningar samtidigt.

Behöver jag ha 100\% täckning?

100\% täckning garanterar inte att din kod är helt testad och fungerar. Det betyder bara att test används för varje rad i din kod, men det hjälper säkert att köra kodtäckningen för att se om du missade att täcka vissa delar av din kod.

Vi lärde oss att vi inte har nytta av att skriva test för enkla metoder som getters och setters. De tar tid att skriva och underhålla, särskilt i stora projekt.

Även om tester kommer att eliminera de flesta av de potentiella buggarna, kommer det fortfarande att finnas några kantfall du inte tänkte på. Om ett fel visas, se till att först reproducera det med nya tester och fixa sedan din kod. På det sättet kommer din täckning att förbättras och du kommer att vara säker på att du täckte det fallet. Detta kan också vara ett bra sätt att börja täcka dina äldre projekt som inte har test ännu.

Här är några användbara verktyg för att kontrollera kvaliteten på din kod och tester:

  • Infektion – verktyg för mutationstest. Mutationstest utvärderar kvaliteten på befintliga tester. Mutationstestning modifierar ett program på små sätt och förväntar sig att dina tester misslyckas vilket innebär att mutant kommer att dödas. För varje godkänt test förblir mutanten vid liv. Testsviter mäts med andelen mutanter som de dödar. Mutationstestning ger ett testkriterium som kallas Mutation Score Indicator (MSI) . MSI mäter effektiviteten av en testuppsättning med avseende på dess förmåga att upptäcka fel. Du kan också integrera det i CI och ställa in minsta MSI som krävs för att CI ska klara.
  • PHPStan – PHPStan fokuserar på att hitta fel i din kod utan att köra den. Det fångar hela klasser av buggar redan innan du skriver tester för koden. Det flyttar PHP närmare sammanställda språk i den meningen att riktigheten för varje rad i koden kan kontrolleras innan du kör den aktuella raden.
  • Kontinuerlig integration (CI) – gör att du kan köra dina tester på git vid varje engagemang. Det kommer att förhindra att du slår samman PR-s med misslyckade tester.

Slutsats

Det är lätt att gå vilse i allt du tycker om att skriva tester. Huvudmålet med testningen bör vara att se till att din kod fungerar och att den är lätt att underhålla. Om du är ny på att testa kan det tyckas att de tar för mycket tid, men ge inte upp när du har tagit tag på det kommer det att göra ditt kodningsliv mycket enklare och snabbare. 🙂

Detta kreativa stycke publicerades ursprungligen på Locastic.com – https://locastic.com/blog/what-to-do-when- you-get-lost-in-api-testing /

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *