Co dělat, když se ztratíte v testování API?

(12. května 2020)

Pokud ještě nepíšete testy, měli byste začít. Testy zlepší kvalitu vašeho kódu, sníží počet chyb a pravděpodobně vás přinutí přemýšlet více o designu a kvalitě. Nejtěžší ve skutečnosti je začít a zjistit, jaký typ testů napsat.

Začnete tedy googlovat a najdete spoustu typů testů: jednotka, integrace, přijetí, funkce, systém, kouř, e2e… Některé zdroje říkají, že musíte mít 100\% pokrytí, jiné říkají, že úplné pokrytí neznamená, že je váš kód plně otestován. I když se rozhodnete, jaký typ testů použít, může být těžké rozhodnout, jak otestovat nějakou konkrétní logiku ve vaší aplikaci.

Nevzdávejte to! Máme několik tipů, které jsme se během toho naučili, a doufejme, že vám to usnadní život.

Nezkoušejte to všechno otestovat pouze funkčními testy

Toto je chyba číslo jedna vývojáři při testování. Pojďme si to ujasnit jako první.

Funkční testy v REST Api by znamenaly odeslat požadavek na jeden koncový bod a prosadit jeho odpověď. Pokud má vaše trasa několik různých případů, ve kterých může logika domény jít, budete muset pro každý případ napsat samostatný test, abyste se ujistili, že všechny fungují.

To by mohlo fungovat i na velmi malé aplikaci, ale jako jakmile vaše aplikace poroste, bude velmi obtížné ji udržovat a budou velmi pomalé. V určitém okamžiku začnete ztrácet více času na opravu a údržbu testů, než ve skutečnosti pracujete na své aplikaci. O tom by testy neměly být. Naučili jsme se to tvrdě.

Testovací pyramida

Testovací pyramida je graf, který nám říká, kolik testů byste měli napsat na každou vrstvu.

Dolní vrstvy jsou rychlejší, a proto musíme co nejvíce pokrýt testy jednotky a integrace. Čím vyšší úroveň získáte, tím méně testů byste měli absolvovat. Uslyšíte různá pojmenování pro jednotlivé vrstvy, ale logika za nimi je stejná.

Testovací pyramida

Testy jednotek

Začněme tedy od začátku – Testy jednotek. Zde je definice:

Testování jednotek je úroveň testování softwaru, při které se testují jednotlivé jednotky / komponenty softwaru. Účelem je ověřit, že každá samostatná jednotka softwaru funguje podle očekávání. Jednotka je nejmenší testovatelnou součástí jakéhokoli softwaru.

To znamená, že byste měli testovat každou metodu izolovaně a zesměšňovat všechny ostatní metody.

Není to jednotkové testy, jste to vy!

Testy jednotek nejsou jen dobré pro zajištění funkčnosti vašeho kódu, ale také vás přimějí provést nějaké refaktorování. Mělo by se jim snadno psát. Pokud se potýkáte s testováním konkrétní části kódu, znamená to, že je váš kód špatně napsán a měl by být refaktorován. SOLID principy vám zde pomohou. SOLID je sada konstrukčních zásad pro psaní čistého, elegantního a čitelného kódu. Pokud píšete solidní kód, budou jednotkové testy hračkou.

Takže v zásadě s jednotkovými testy zajistíte, aby každá izolovaná metoda v kódu fungovala tak, jak má. To by znamenalo, že celý kód funguje podle očekávání, že? Spíš ne. Musíte také zajistit, aby jednotlivé komponenty fungovaly dobře. A právě tady přicházejí integrační testy.

integrační testy

Testování integrace je fáze testování softwaru, ve které jsou jednotlivé softwarové moduly kombinovány a testovány jako skupina.

Dobrým příkladem, kdy test jednotky nestačí, je databázový dotaz stavitelé. V testech jednotek se můžete ujistit, že jste v dotazu zavolali podmínky, které chcete, ale pokud je váš dotaz složitější, nemůžete si být jisti, že podmínky, které jste použili, vrátí očekávaný výsledek, dokud neprovedete skutečné volání do databáze. Toto je místo, kde by měl přijít integrační test, který spustí dotaz na testovací databázi a potvrdí očekávané výsledky.

Případy, kdy potřebujete integrační testy:

  • Ověření správné integrace s 3. party knihovny nebo API
  • Ověření dvou nebo více modulů, které mají jednotkové testy, fungují společně podle očekávání

Funkční testy

Funkční testování je definováno jako testování úplné funkčnosti některé aplikace.

Psaní v API je mnohem jednodušší ve srovnání s aplikací s uživatelským rozhraním. Funkční testy pro API by měly spočívat v odesílání skutečných požadavků do koncových bodů API a ověření formátu odpovědi. Měli byste otestovat úspěšnost a chybovou reakci každé trasy.

Ale nedělejte to, nepotřebujete test každé možné chyby. To by již mělo být pokryto jednotkovými a integračními testy.Zde se jen chcete ujistit, že vaše trasa vrací správný formát odpovědi na chybu. Pokud mají vaše trasy různé role, měli byste také otestovat reakci na chybu zabezpečení.

Zde je několik užitečných nástrojů, které vám usnadní psaní funkčních testů:

  • PHP Matcher – Knihovna, která vám umožní zkontrolovat odpověď podle vzorců. Můžete nastavit, jaký vzor očekáváte pro každé pole ve své odpovědi, místo toho, abyste ve své databázi prosazovali skutečné hodnoty. Tímto způsobem můžete bez obav otestovat pouze formát odpovědi a typy polí, pokud se ve vaší testovací databázi změnil nějaký řetězec nebo číslo.
  • Pošťákovy testy – své funkční testy můžete psát v Pošťákovi, což je pro frontendový tým velmi užitečné, budou moci kontrolovat a zkuste své koncové body API. Bude to jako interaktivní dokumentace API. Testy Postmana můžete integrovat s Newman – běžcem příkazového řádku, který vám umožňuje spouštět testy v příkazovém řádku a integrovat je do Kontinuální integrace (CI) .
  • Faker – knihovna pro generování falešných dat pro vaši testovací databázi

o krok dále

Nyní, když víte, že váš kód funguje, můžete zkontrolovat jeho výkon.

Testování zátěže

Testování zátěže kontroluje, zda vaše rozhraní API reaguje podle očekávání na různé servery.

Stresové testování

Kontrola, zda API funguje podle očekávání, když přijímá velký počet požadavků současně.

Musím mít 100\% pokrytí?

100\% pokrytí nezaručuje, že váš kód je plně otestováno a funkční. To znamená pouze, že testy používaly každý řádek vašeho kódu, ale určitě to pomůže spustit pokrytí kódu, abyste zjistili, zda vám chyběly některé části vašeho kódu.

Zjistili jsme, že z psaní nemáme prospěch testy na jednoduché metody jako getry a settery. Psaní a udržování jim zabere čas, zejména u velkých projektů.

Zatímco testy eliminují většinu potenciálních chyb, stále budou existovat některé okrajové případy, na které jste nemysleli. Pokud se objeví chyba, nezapomeňte ji nejprve reprodukovat novými testy a poté opravte svůj kód. Tím se zlepší vaše pokrytí a budete si jisti, že jste tento případ pokryli. Může to být také skvělý způsob, jak začít pokrývat vaše starší projekty, které ještě nemají testy.

Zde je několik užitečných nástrojů ke kontrole kvality kódu a testů:

  • Infekce – nástroj pro testování mutací. Testování mutací hodnotí kvalitu stávajících testů. Testování mutací upravuje program malými způsoby a očekává, že vaše testy selžou, což znamená, že mutant bude zabit. U každého úspěšného testu mutant zůstane naživu. Testovací sady se měří procentem mutantů, které zabijí. Testování mutací poskytuje testovací kritérium zvané Mutation Score Indicator (MSI) . MSI měří účinnost testovací sady z hlediska její schopnosti detekovat poruchy. Můžete jej také integrovat do CI a nastavit minimální MSI požadované pro průchod CI.
  • PHPStan – PHPStan se zaměřuje na hledání chyb v kódu, aniž by jej skutečně spustil. Zachytí celé třídy chyb ještě předtím, než napíšete testy kódu. Posouvá PHP blíže ke kompilovaným jazykům v tom smyslu, že správnost každého řádku kódu lze zkontrolovat před spuštěním skutečného řádku.
  • Kontinuální integrace (CI) – umožňuje provádět testy na git při každém potvrzení. Zabrání vám ve sloučení PR s neúspěšnými testy.

Závěr

Je snadné se ztratit ve všech věcech, které o psaní testů najdete. Hlavním cílem testování by mělo být zajistit, aby váš kód fungoval a jeho údržba byla snadná. Pokud jste v testování nováčkem, mohlo by se zdát, že to zabere příliš mnoho času, ale nevzdávejte to, jakmile se ho chopíte, váš programovací život bude mnohem jednodušší a rychlejší. 🙂

Tato kreativní část byla původně zveřejněna na Locastic.com – https://locastic.com/blog/what-to-do-when- testujete-ztratíte-v-api /

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *