Hvad skal du gøre, når du går tabt i API-test?

(12. maj 2020)

Hvis du skriver ikke prøver endnu, skal du starte. Test forbedrer kvaliteten af ​​din kode, reducerer fejl og sandsynligvis tvinger dig til at tænke mere på design og kvalitet. Faktisk er det sværeste at starte og finde ud af, hvilken type test der skal skrives.

Så du begynder at google, og du finder mange testtyper: enhed, integration, accept, funktionel, system, røg, e2e … Nogle ressourcer vil sige, at du skal have 100\% dækning, nogle vil sige fuld dækning betyder ikke, at din kode er fuldt testet. Selv når du beslutter, hvilken type test du skal bruge, kan det være svært at beslutte, hvordan du tester en bestemt logik i din app.

Giv ikke op! Vi har nogle tip, vi har lært undervejs, og forhåbentlig vil det gøre dit liv lettere.

Forsøg ikke at teste det hele med bare funktionelle tests

Dette er den største fejl udviklere gør i test. Så lad os fjerne det først.

Funktionelle tests i REST Api vil betyde at sende anmodning om et slutpunkt og hævde dets svar. Hvis din rute har flere forskellige tilfælde, hvor domænelogik kan gå, skal du skrive separat test for hver sag for at være sikker på, at de alle fungerer.

Dette kan endda fungere i en meget lille app, men som snart din app vokser, bliver dette meget svært at vedligeholde, og de vil være meget langsomme. På et eller andet tidspunkt vil du begynde at miste mere tid på at rette og vedligeholde tests end at arbejde på din app. Det er ikke det, tests skal dreje sig om. Vi lærte det på den hårde måde.

Testpyramiden

Testpyramide er en graf, der fortæller os, hvor meget test du skal skrive på hvert lag.

Lavere lag er hurtigere, og derfor er vi nødt til at dække så meget som muligt med test af enheder og integration. Jo mere højt niveau du får, jo færre tests skal du have. Du vil høre forskellige navngivninger for individuelle lag, men logikken bag dem er den samme.

Testpyramiden

Enhedstest

Så lad os starte fra starten – Enhedstest. Her er en definition:

Enhedstest er et niveau af softwaretest, hvor individuelle enheder / komponenter i en software testes. Formålet er at validere, at hver enkelt enhed i softwaren fungerer som forventet. En enhed er den mindste testbare del af enhver software.

Dette betyder, at du skal teste hver metode isoleret og spotte alle andre metoder.

Det er ikke enhedstest, det er dig! De skal være lette at skrive. Hvis du kæmper med at teste et bestemt stykke kode, betyder det, at din kode er dårligt skrevet, og den skal omformuleres. SOLID-principper hjælper dig her. SOLID er et sæt designprincipper til at skrive ren, elegant og læsbar kode. Hvis du skriver solid kode, vil enhedstest være et stykke kage.

Så grundlæggende med enhedstest sørger du for, at hver isoleret metode i din kode fungerer som den skal. Det ville betyde, at al kode fungerer som forventet, ikke? Ikke rigtig. Du skal også sørge for, at de enkelte komponenter fungerer ok sammen. Og det er her integrationstest kommer.

Integrationstest

Integrationstest er den fase i softwaretest, hvor individuelle softwaremoduler kombineres og testes som en gruppe.

Et godt eksempel, når enhedstest ikke er nok, er databaseforespørgsel bygherrer. I enhedstest kan du sikre dig, at du kaldte de betingelser, du vil have i forespørgslen, men hvis din forespørgsel er mere kompliceret, kan du ikke rigtig være sikker på, at forhold, du brugte, returnerer forventet resultat, indtil du foretager et faktisk opkald til databasen. Så det er her integrationstest, der kører forespørgslen i en testdatabase og hævder forventede resultater, skal komme.

Tilfælde, hvor du har brug for integrationstest:

  • Bekræftelse af korrekt integration med 3. festbiblioteker eller APIer
  • Bekræftelse af to eller flere moduler, der har enhedstest, fungerer som forventet sammen

Funktionelle tests

Funktionel testning defineres som testning af komplet funktionalitet i nogle applikationer.

De er meget enklere at skrive i API sammenlignet med et program med en brugergrænseflade. Funktionelle tests til API skal bestå af at sende faktiske anmodninger til API-slutpunkter og validere svarformatet. Du bør teste hver rute for vellykket og fejlrespons.

Men gør det ikke for meget, du har ikke brug for en test for hver mulig fejl. Dette skal allerede være omfattet af test af enheder og integration.Her vil du bare sørge for, at din rute returnerer det korrekte svarformat for en fejl. Hvis dine ruter har forskellige roller, skal du også teste sikkerhedsfejlrespons.

Her er nogle nyttige værktøjer, der gør dine funktionstest lettere at skrive:

  • PHP Matcher – Bibliotek, der giver dig mulighed for at kontrollere dit svar mod mønstre. Du kan indstille, hvilket mønster du forventer for hvert felt i dit svar, i stedet for at hævde reelle værdier i din database. På denne måde er du i stand til kun at teste responsformat og felttyper uden at bekymre dig, hvis nogle streng eller tal ændres i din testdatabase.
  • Postman tests – du kan skrive dine funktionelle tests i Postman, hvilket er ret nyttigt for frontendholdet, de vil være i stand til at kontrollere og prøv dine api-slutpunkter. Det vil være som interaktiv API-dokumentation. Du kan integrere Postman-tests med Newman – kommandolinjeløber, der giver dig mulighed for at køre tests på kommandolinjen og integrere dem i Kontinuerlig integration (CI) .
  • Faker – bibliotek til generering af falske data til din testdatabase

Gå et skridt videre

Nu hvor du ved, at din kode fungerer, du kan kontrollere dens ydeevne.

Belastningstest

Indlæsningstest kontrollerer, hvis din api reagerer som forventet på forskellige servere.

Stresstest

Kontroller, om API fungerer som forventet, når jeg modtager et stort antal anmodninger på samme tid.

Skal jeg have 100\% dækning?

100\% dækning garanterer ikke, at din kode er fuldt testet og fungerer. Dette betyder kun test, der bruges hver linje i din kode, men det hjælper helt sikkert med at køre kodedækningen for at se, om du savnede at dække nogle dele af din kode.

Vi lærte, at vi ikke har gavn af at skrive test for enkle metoder som getters og setters. De tager tid at skrive og vedligeholde, især på store projekter.

Selvom test fjerner de fleste af de potentielle fejl, vil der stadig være nogle kanttilfælde, du ikke tænkte på. Hvis der vises en fejl, skal du først reproducere den med nye tests og derefter rette din kode. På den måde forbedres din dækning, og du vil være sikker på, at du dækkede sagen. Dette kan også være en god måde at begynde at dække dine ældre projekter, der endnu ikke har test.

Her er nogle nyttige værktøjer til at kontrollere kvaliteten af ​​din kode og tests:

  • Infektion – værktøj til mutationstest. Mutationstest evaluerer kvaliteten af ​​eksisterende tests. Mutationstest ændrer et program på små måder og forventer, at dine tests mislykkes, hvilket betyder, at mutant vil blive dræbt. For hver bestået test forbliver mutant i live. Testpakker måles ved procentdelen af ​​mutanter, som de dræber. Mutationstest giver et testkriterium kaldet Mutation Score Indicator (MSI) . MSI måler effektiviteten af ​​et testsæt med hensyn til dets evne til at opdage fejl. Du kan også integrere det i CI og indstille minimum MSI, der kræves for at CI skal bestå.
  • PHPStan – PHPStan fokuserer på at finde fejl i din kode uden faktisk at køre den. Det fanger hele klasser af bugs, selv før du skriver tests til koden. Det flytter PHP tættere på kompilerede sprog i den forstand, at rigtigheden af ​​hver linje i koden kan kontrolleres, før du kører den aktuelle linje.
  • Kontinuerlig integration (CI) – gør det muligt for dig at køre dine tests på git på hver forpligtelse. Det forhindrer dig i at flette PR-er med mislykkede tests.

Konklusion

Det er let at gå vild i alle de ting, du finder ved at skrive tests. Hovedmålet med testning skal være at sikre, at din kode fungerer, og at den er let at vedligeholde. Hvis du er ny med at teste, ser det måske ud til at de tager for meget tid, men giv ikke op, når du først har fået fat i det, vil det gøre dit kodningsliv meget lettere og hurtigere. 🙂

Dette kreative stykke blev oprindeligt sendt på Locastic.com – https://locastic.com/blog/what-to-do-when- you-get-lost-in-api-testing /

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *