Hva gjør du når du går deg vill i API-testing?

(12. mai 2020)

Hvis du ikke skriver tester ennå, bør du begynne. Tester vil forbedre kvaliteten på koden din, redusere feil og sannsynligvis tvinge deg til å tenke mer på design og kvalitet. Egentlig er det vanskeligste å starte og finne ut hvilken type tester du skal skrive.

Så du begynner å google og du finner mange testtyper: enhet, integrasjon, aksept, funksjonell, system, røyk, e2e … Noen ressurser vil si at du må ha 100\% dekning, noen vil si full dekning betyr ikke at koden din er fullstendig testet. Selv når du bestemmer deg for hvilken type tester du skal bruke, kan det være vanskelig å bestemme hvordan du skal teste en bestemt logikk i appen din.

Ikke gi opp! Vi har noen tips vi har lært underveis, og forhåpentligvis vil det gjøre livet ditt enklere.

Ikke prøv å teste det hele med bare funksjonelle tester

Dette er feil nummer én. utviklere gjør i testing. Så la oss fjerne det først.

Funksjonelle tester i REST Api vil bety at du sender forespørsel på ett sluttpunkt og hevder svaret. Hvis ruten din har flere forskjellige tilfeller der domenelogikken kan gå, må du skrive en separat test for hvert tilfelle for å være sikker på at de alle fungerer.

Dette kan til og med fungere på en veldig liten app, men som så snart appen din vokser, blir dette veldig vanskelig å vedlikeholde, og de vil være veldig sakte. På et tidspunkt vil du begynne å miste mer tid på å fikse og vedlikeholde tester enn å jobbe med appen din. Det er ikke det tester skal handle om. Vi lærte det på den harde måten.

Testpyramiden

Testpyramiden er en graf som forteller oss hvor mye testing du skal skrive på hvert lag.

Nedre lag er raskere, og det er derfor vi trenger å dekke så mye som mulig med enhet- og integrasjonstester. Jo mer høyt nivå du får, jo færre tester bør du ha. Du vil høre forskjellige navngivninger for individuelle lag, men logikken bak dem er den samme.

Testpyramiden

Enhetstester

Så la oss starte fra begynnelsen – Enhetstester. Her er en definisjon:

Enhetstesting er et nivå av programvaretesting der individuelle enheter / komponenter i en programvare blir testet. Hensikten er å validere at hver enkelt enhet i programvaren fungerer som forventet. En enhet er den minste testbare delen av hvilken som helst programvare.

Dette betyr at du bør teste hver metode isolert og spotte alle andre metoder.

Det er ikke enhetstester, det er deg!

Enhetstester er ikke bare bra for å sikre at koden din fungerer, men den vil også få deg til å gjøre noen refactoring. De skal være enkle å skrive. Hvis du sliter med å teste et bestemt stykke kode, betyr det at koden din er dårlig skrevet, og at den bør omformeres. SOLID-prinsipper hjelper deg her. SOLID er et sett med designprinsipper for å skrive ren, elegant og lesbar kode. Hvis du skriver solid kode, vil enhetstester være et stykke kake.

Så i utgangspunktet, med enhetstester, sørger du for at hver isolerte metode i koden din fungerer som den skal. Det vil bety at all koden fungerer som forventet, ikke sant? Ikke egentlig. Du må også sørge for at enkeltkomponenter fungerer ok sammen. Og det er her integrasjonstester kommer.

Integrasjonstester

Integrasjonstesting er fasen i programvaretesting der individuelle programvaremoduler kombineres og testes som en gruppe.

Godt eksempel når databaseteknikk ikke er nok byggherrer. I enhetstester kan du sørge for at du kalte forholdene du vil ha i spørringen, men hvis spørringen din er mer komplisert, kan du ikke være sikker på at forholdene du brukte vil returnere forventet resultat før du foretar et faktisk anrop til databasen. Så det er her integrasjonstest som kjører spørringen i en testdatabase og hevder forventede resultater skal komme.

Tilfeller der du trenger integrasjonstester:

  • Bekreft riktig integrering med tredje festbiblioteker eller API-er
  • Bekreftelse av to eller flere moduler som har enhetstester fungerer som forventet sammen

Funksjonelle tester

Funksjonstesting er definert som testing av full funksjonalitet i noen applikasjoner.

De er mye enklere å skrive i API sammenlignet med et program med et brukergrensesnitt. Funksjonstester for API bør bestå av å sende faktiske forespørsler til API-endepunkter og validere svarformatet. Du bør teste hver rute for vellykket og feilrespons.

Men ikke gjør det for mye, du trenger ikke en test for hver mulig feil. Dette bør allerede dekkes av enhetstester og integrasjonstester.Her vil du bare sørge for at ruten din returnerer riktig svarformat for en feil. Hvis rutene dine har forskjellige roller, bør du også teste sikkerhetsfeilrespons.

Her er noen nyttige verktøy for å gjøre funksjonstestene lettere å skrive:

  • PHP Matcher – Bibliotek som lar deg sjekke svaret ditt mot mønstre. Du kan angi hvilket mønster du forventer for hvert felt i svaret ditt, i stedet for å hevde reelle verdier i databasen din. På denne måten kan du bare teste responsformat og felttyper uten å bekymre deg hvis noe streng eller nummer endres i testdatabasen.
  • Postmann-tester – du kan skrive funksjonelle tester i Postman som er ganske nyttig for frontend-teamet, de vil kunne sjekke og prøv api-endepunktene dine. Det vil være som interaktiv API-dokumentasjon. Du kan integrere Postman-tester med Newman – kommandolinjeløper som lar deg kjøre tester på kommandolinje og integrere dem i Kontinuerlig integrasjon (CI) .
  • Faker – bibliotek for å generere falske data til testdatabasen din

Gå et skritt videre

Nå som du vet at koden din fungerer, du kan sjekke ytelsen.

Lastetesting

Lastetesting sjekker om api-en din svarer som forventet på forskjellige servere.

Stresstesting

Kontrollerer om API fungerer som forventet når jeg mottar et stort antall forespørsler samtidig.

Må jeg ha 100\% dekning?

100\% dekning garanterer ikke at koden din er fullstendig testet og fungerer. Dette betyr bare tester som brukes hver linje i koden din, men det hjelper sikkert å kjøre kodedekningen for å se om du savnet å dekke noen deler av koden din.

Vi lærte at vi ikke har nytte av å skrive tester for enkle metoder som getters og setters. De tar tid å skrive og vedlikeholde, spesielt på store prosjekter.

Selv om tester vil eliminere de fleste potensielle feilene, vil det fortsatt være noen kanttilfeller du ikke tenkte på. Hvis det vises en feil, må du først reprodusere den med nye tester, og deretter fikse koden. På den måten vil dekningen din bli bedre, og du vil være sikker på at du dekket saken. Dette kan også være en flott måte å begynne å dekke eldre prosjekter som ikke har tester ennå.

Her er noen nyttige verktøy for å sjekke kvaliteten på koden din og testene:

  • Infeksjon – verktøy for mutasjonstesting. Mutasjonstesting evaluerer kvaliteten på eksisterende tester. Mutasjonstesting endrer et program på små måter og forventer at testene dine mislykkes, noe som betyr at mutant vil bli drept. For hver bestått test forblir mutant i live. Testpakker måles etter prosentandelen av mutanter som de dreper. Mutasjonstesting gir et testkriterium kalt Mutation Score Indicator (MSI) . MSI måler effektiviteten til et testsett når det gjelder evnen til å oppdage feil. Du kan også integrere den i CI og angi minimum MSI som kreves for at CI skal bestå.
  • PHPStan – PHPStan fokuserer på å finne feil i koden din uten å kjøre den. Det fanger hele klasser av feil selv før du skriver tester for koden. Den flytter PHP nærmere kompilerte språk i den forstand at riktigheten av hver linje i koden kan kontrolleres før du kjører den faktiske linjen.
  • Kontinuerlig integrasjon (CI) – lar deg kjøre testene dine på git på hver kommisjon. Det forhindrer deg i å slå sammen PR-er med sviktende tester.

Konklusjon

Det er lett å gå seg vill i alt du finner om å skrive tester. Hovedmålet med testing bør være å sikre at koden din fungerer, og at den er enkel å vedlikeholde. Hvis du er ny med å teste, kan det virke som om de tar for lang tid, men ikke gi opp. Når du har fått tak i det, vil det gjøre kodelivet ditt mye enklere og raskere. 🙂

Dette kreative stykket ble opprinnelig lagt ut på Locastic.com – https://locastic.com/blog/what-to-do-when- du går deg vill-i-api-testing /

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *