Wat te doen als je verdwaalt in API-testen?

(12 mei 2020)

Als u nog geen tests schrijft, moet u beginnen. Tests zullen de kwaliteit van uw code verbeteren, bugs verminderen en u waarschijnlijk dwingen om meer na te denken over ontwerp en kwaliteit. Het moeilijkste is eigenlijk om te beginnen en erachter te komen wat voor soort tests je moet schrijven.

Dus je begint met googlen en je vindt veel testtypes: eenheid, integratie, acceptatie, functioneel, systeem, rook, e2e… Sommige bronnen zeggen dat je 100\% dekking nodig hebt, andere zeggen dat volledige dekking niet betekent dat je code volledig is getest. Zelfs als u beslist welk type tests u wilt gebruiken, kan het moeilijk zijn om te beslissen hoe u bepaalde logica in uw app wilt testen.

Geef niet op! We hebben een aantal tips die we gaandeweg hebben geleerd en hopelijk zal het je leven gemakkelijker maken.

Probeer niet alles te testen met alleen functionele tests

Dit is de grootste fout ontwikkelaars doen in testen. Laten we dat dus eerst duidelijk maken.

Functionele tests in REST Api zouden betekenen dat een verzoek op één eindpunt wordt verzonden en het antwoord daarop wordt bevestigd. Als uw route meerdere verschillende gevallen heeft waarin domeinlogica kan gaan, zou u voor elk geval een afzonderlijke test moeten schrijven om er zeker van te zijn dat ze allemaal werken.

Dit zou zelfs kunnen werken op een heel kleine app, maar als zodra uw app groeit, wordt dit erg moeilijk te onderhouden en zullen ze erg traag zijn. Op een gegeven moment zult u meer tijd verliezen aan het repareren en onderhouden van tests dan aan het daadwerkelijk werken aan uw app. Dat is niet waar tests over zouden moeten gaan. We hebben dat op een moeilijke manier geleerd.

De testpiramide

Testpiramide is een grafiek die ons vertelt hoeveel testen je op elke laag zou moeten schrijven.

Lagere lagen zijn sneller en daarom moeten we zoveel mogelijk afdekken met unit- en integratietests. Hoe hoger je niveau is, hoe minder tests je zou moeten hebben. Je zult verschillende namen horen voor individuele lagen, maar de logica erachter is hetzelfde.

De testpiramide

Unit tests

Laten we dus bij het begin beginnen – Unit tests. Hier is een definitie:

Unit testing is een niveau van software testen waarbij individuele units / componenten van software worden getest. Het doel is om te valideren dat elke afzonderlijke eenheid van de software presteert zoals verwacht. Een eenheid is het kleinste testbare onderdeel van alle software.

Dit betekent dat je elke methode afzonderlijk moet testen en alle andere methoden moet bespotten.

Het is niet unit tests, jij bent het!

Unit tests zijn niet alleen goed om er zeker van te zijn dat je code werkt, maar het zorgt er ook voor dat je wat refactoring doet. Ze moeten gemakkelijk te schrijven zijn. Als u moeite heeft met het testen van een bepaald stuk code, betekent dit dat uw code slecht is geschreven en moet worden geherstructureerd. SOLID-principes zullen je hierbij helpen. SOLID is een set ontwerpprincipes voor het schrijven van schone, elegante en leesbare code. Als je solide code schrijft, zullen unit tests een fluitje van een cent zijn.

Dus in principe, met unit tests zorg je ervoor dat elke geïsoleerde methode in je code werkt zoals het hoort. Dat zou betekenen dat alle code werkt zoals verwacht, toch? Niet echt. U moet er ook voor zorgen dat de afzonderlijke componenten goed samenwerken. En dat is waar integratietests komen.

Integratietests

Integratietesten is de fase in softwaretests waarin individuele softwaremodules worden gecombineerd en als een groep worden getest.

Een goed voorbeeld wanneer een unit-test niet voldoende is, is databasequery Bouwers. Bij unit-tests kunt u ervoor zorgen dat u de voorwaarden die u wilt in de zoekopdracht hebt genoemd, maar als uw vraag ingewikkelder is, kunt u er niet echt zeker van zijn dat de voorwaarden die u hebt gebruikt het verwachte resultaat opleveren totdat u de database daadwerkelijk aanroept. Dit is dus waar de integratietest die de query op een testdatabase uitvoert en de verwachte resultaten beweert, zou moeten komen.

Gevallen waarin u integratietests nodig hebt:

  • Verifiëren van de juiste integratie met 3rd partijbibliotheken of APIs
  • Verifiëren van twee of meer modules met unit-tests werken zoals verwacht samen

Functionele tests

Functioneel testen wordt gedefinieerd als het testen van de volledige functionaliteit van een applicatie.

Ze zijn veel eenvoudiger te schrijven in API vergeleken met een applicatie met een gebruikersinterface. Functionele tests voor API moeten bestaan ​​uit het verzenden van daadwerkelijke verzoeken naar API-eindpunten en het valideren van het antwoordformaat. Je moet elke route testen op een succesvolle en foutreactie.

Maar overdrijf het niet, je hebt geen test nodig voor elke mogelijke fout. Dat zou al moeten worden gedekt door unit- en integratietests.Hier wilt u er alleen voor zorgen dat uw route het juiste antwoordformaat retourneert voor een fout. Als uw routes verschillende rollen hebben, moet u ook de beveiligingsfoutreactie testen.

Hier zijn enkele handige tools om het schrijven van uw functionele tests gemakkelijker te maken:

  • PHP-matcher – Bibliotheek waarmee u uw antwoord kunt vergelijken met patronen. U kunt voor elk veld in uw antwoord instellen welk patroon u verwacht, in plaats van echte waarden in uw database op te geven. Op deze manier kunt u alleen antwoordformaat en veldtypen testen zonder dat u zich zorgen hoeft te maken of een tekenreeks of getal in uw testdatabase is gewijzigd.
  • Postman-tests – u kunt uw functionele tests in Postman schrijven, wat erg handig is voor het frontend-team, zij zullen in staat zijn om te controleren en probeer uw api-eindpunten. Het zal een soort interactieve API-documentatie zijn. U kunt Postman-tests integreren met Newman – opdrachtregelprogramma waarmee u tests op de opdrachtregel kunt uitvoeren en deze kunt integreren in Continue integratie (CI) .
  • Faker – bibliotheek voor het genereren van valse gegevens voor uw testdatabase

Een stap verder gaan

Nu u weet dat uw code werkt, je kunt zijn prestaties controleren.

Load testing

Load testing controleert of uw api reageert zoals verwacht op verschillende servers.

Stresstesten

Controleren of de API presteert zoals verwacht bij het ontvangen van een groot aantal verzoeken tegelijkertijd.

Moet ik 100\% dekking hebben?

100\% dekking garandeert niet dat uw code dat is volledig getest en werkend. Dit betekent alleen dat tests elke regel van uw code hebben gebruikt, maar het helpt zeker om de codedekking uit te voeren om te zien of u bepaalde delen van uw code hebt gemist.

We hebben geleerd dat we geen baat hebben bij schrijven tests voor eenvoudige methoden als getters en setters. Ze hebben tijd nodig om te schrijven en te onderhouden, vooral bij grote projecten.

Hoewel tests de meeste potentiële bugs zullen elimineren, zullen er nog steeds enkele randgevallen zijn waar je niet aan had gedacht. Als er een bug verschijnt, zorg er dan voor dat u deze eerst reproduceert met nieuwe tests en repareer vervolgens uw code. Op die manier zal uw dekking verbeteren en weet u zeker dat u die zaak gedekt hebt. Dit kan ook een goede manier zijn om uw oude projecten te behandelen die nog geen tests hebben.

Hier zijn enkele handige tools om de kwaliteit van uw code en tests te controleren:

  • Infectie – tool voor het testen van mutaties. Mutatietesten evalueert de kwaliteit van bestaande tests. Mutatietests wijzigen een programma op een kleine manier en verwachten dat uw tests zullen mislukken, wat betekent dat de mutant wordt gedood. Voor elke geslaagde test blijft de mutant in leven. Testsuites worden gemeten aan de hand van het percentage mutanten dat ze doden. Mutatietesten bieden een testcriterium genaamd de Mutation Score Indicator (MSI) . De MSI meet de effectiviteit van een testset in termen van het vermogen om fouten te detecteren. U kunt het ook integreren in CI en de minimum MSI instellen die vereist is om CI te laten slagen.
  • PHPStan – PHPStan richt zich op het vinden van fouten in uw code zonder deze daadwerkelijk uit te voeren. Het vangt hele klassen bugs op, zelfs voordat u tests voor de code schrijft. Het brengt PHP dichter bij gecompileerde talen in die zin dat de juistheid van elke regel van de code kan worden gecontroleerd voordat u de eigenlijke regel uitvoert.
  • Continue integratie (CI) – stelt je in staat om je git-tests uit te voeren bij elke commit. Het voorkomt dat je PR-s samenvoegt met falende tests.

Conclusie

Het is gemakkelijk om te verdwalen in alle dingen die je tegenkomt over het schrijven van tests. Het belangrijkste doel van testen is ervoor te zorgen dat uw code werkt en gemakkelijk te onderhouden is. Als u net begint met testen, kan het lijken alsof ze te veel tijd kosten, maar geef niet op, als u het eenmaal in handen hebt, wordt uw codeerleven veel gemakkelijker en sneller. 🙂

Dit creatieve stuk is oorspronkelijk gepost op Locastic.com – https://locastic.com/blog/what-to-do-when- u-verdwaalt-in-api-testen /

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *