Mit kell tennie, ha elveszik az API tesztelésben?

(2020. május 12.)

Ha még nem írnak teszteket, el kell kezdened. A tesztek javítják a kódod minőségét, csökkentik a hibákat, és valószínűleg arra kényszerítenek, hogy többet gondolj a tervezésre és a minőségre. Valójában a legnehezebb elindítani és kitalálni, hogy milyen típusú teszteket kell írni.

Tehát elkezd guglizni, és sok teszttípust talál: egység, integráció, elfogadás, funkcionális, rendszer, füst, e2e … Egyes források azt mondják, hogy 100\% -os lefedettségre van szükséged, mások szerint a teljes lefedettség nem jelenti azt, hogy a kódod teljesen tesztelt. Még akkor is, ha eldönti, hogy milyen típusú teszteket használjon, nehéz lehet eldönteni, hogyan teszteljen bizonyos logikákat az alkalmazásában.

Ne add fel! Van néhány tippünk, amelyeket útközben megtanultunk, és remélhetőleg ez megkönnyíti az életét.

Ne próbálja mindezt csak funkcionális tesztekkel kipróbálni

Ez az első számú hiba a fejlesztők tesznek. Tehát ezt először tisztázzuk.

A funkcionális tesztek a REST Api alkalmazásában azt jelentenék, hogy egy végpontra kérelmet küldenek, és érvényesítenék annak válaszát. Ha az útvonalának több különböző esete van, amelyekben a tartományi logika mehet, akkor mindegyik esethez külön tesztet kell írnia, hogy megbizonyosodjon arról, hogy mindegyik működik.

Ez akár egy nagyon kicsi alkalmazásnál is működhet, de mint amint az alkalmazásod növekszik, ezt nagyon nehéz fenntartani, és nagyon lassúak lesznek. Egy bizonyos ponton több időt veszít a tesztek kijavításával és karbantartásával, mint az alkalmazással való tényleges munka. A teszteknek nem erről kell szólniuk. Megtanultuk ezt a nehéz utat.

A tesztpiramis

A tesztpiramis egy grafikon, amely megmondja, mennyi tesztet kell írni az egyes rétegekre.

Alsó rétegek gyorsabbak, és ezért kell a lehető legtöbbet lefednünk egység- és integrációs tesztekkel. Minél több magas szintet kap, annál kevesebb tesztet kell elvégeznie. Különböző elnevezéseket fog hallani az egyes rétegekhez, de a mögöttük lévő logika ugyanaz.

A tesztpiramis

Egységtesztek

Tehát kezdjük az elejétől – Egységtesztek. Itt van egy meghatározás:

Az egység tesztelése a szoftver tesztelésének olyan szintje, ahol a szoftver egyes egységeit / összetevőit tesztelik. A cél annak ellenőrzése, hogy a szoftver minden külön egysége a várt módon teljesít-e. Az egység a szoftverek legkisebb tesztelhető része.

Ez azt jelenti, hogy az egyes módszereket külön kell tesztelnie, és az összes többi módszert meg kell csúfolnia.

Ez nem egységtesztek, te vagy az!

Az egységtesztek nem csak arra szolgálnak, hogy megbizonyosodjanak a kódod működéséről, hanem arra is késztet, hogy végezz újrakezdést. Könnyen kell írniuk. Ha egy adott kóddarab tesztelésével küzd, az azt jelenti, hogy a kódja rosszul van megírva, és azt újra kell dolgozni. A SZOLID alapelvek segítenek itt. A SOLID tervezési elvek összessége a tiszta, elegáns és olvasható kód írásához. Ha szilárd kódot ír, akkor az egységtesztek egy darab torta lesznek.

Tehát alapvetően az egységtesztekkel győződjön meg arról, hogy a kódban szereplő minden egyes módszer a megfelelő módon működik. Ez azt jelentené, hogy az összes kód a várt módon működik, igaz? Nem igazán. Azt is meg kell győződnie arról, hogy az egyes alkatrészek rendben működnek-e. És itt jönnek az integrációs tesztek.

Integrációs tesztek

Az integrációs tesztelés a szoftvertesztelés azon fázisa, amelyben az egyes szoftvermodulokat egyesítik és csoportként tesztelik.

Jó példa arra, hogy ha az egység tesztje nem elég, az adatbázis-lekérdezés építők. Az egységtesztek során megbizonyosodhat arról, hogy a lekérdezésben kívánt feltételeket hívott meg, de ha a lekérdezés bonyolultabb, akkor nem lehet biztos abban, hogy a használt feltételek visszaadják a várt eredményt, amíg tényleges hívást nem kezdeményez az adatbázisba. Tehát itt kell lennie az integrációs tesztnek, amely a lekérdezést egy tesztadatbázisban futtatja és a várt eredményeket állítja be.

Esetek, ahol integrációs tesztekre van szükség:

  • A 3. integráció helyes ellenőrzésének ellenőrzése pártkönyvtárak vagy API-k
  • Két vagy több modulellenőrzéssel rendelkező modul ellenőrzése a várakozásoknak megfelelően működik együtt

Funkcionális tesztek

A funkcionális tesztelés bizonyos alkalmazások teljes funkcionalitásának tesztelését jelenti.

Sokkal egyszerűbb API-ba írni, mint a felhasználói felülettel rendelkező alkalmazásokhoz. Az API funkcionális tesztjeinek abból kell állniuk, hogy tényleges kéréseket küldenek az API végpontokhoz, és érvényesítsék a válaszformátumot. Minden útvonalat tesztelnie kell a sikeres és hibás válaszok érdekében.

De ne tegye ezt túl, nincs szüksége tesztre az egyes lehetséges hibákra. Ezt már egység- és integrációs teszteknek kell lefedniük.Itt csak azt szeretné meggyőződni, hogy az útvonal hibára adott helyes válaszformátumot ad-e vissza. Ha az útvonalaknak más szerepköre van, akkor tesztelje a biztonsági hibák válaszát is.

Íme néhány hasznos eszköz, amely megkönnyíti a funkcionális tesztek írását:

  • PHP egyező – könyvtár, amely lehetővé teszi, hogy a válaszát minták alapján ellenőrizze. Beállíthatja, hogy melyik mintára számítson az egyes mezőkre a válaszában, ahelyett, hogy valós értékeket állítana az adatbázisban. Így csak válaszformátumot és mezőtípusokat tesztelhet, anélkül, hogy aggódna, ha a karakterlánc vagy a szám megváltozott a tesztadatbázisában.
  • Postás tesztek – beírhatja a funkcionális tesztjeit a Postman-be, ami nagyon hasznos a frontend csapat számára, képesek lesznek ellenőrizni és próbáld ki az api végpontokat. Olyan lesz, mint az interaktív API dokumentáció. Integrálhatja a Postman teszteket a Newman – parancssori futóval, amely lehetővé teszi a tesztek futtatását a parancssorban és a Folyamatos integráció (CI) .
  • Faker – könyvtár hamis adatok előállításához a tesztadatbázis számára

Egy lépéssel tovább

Most, hogy tudod, hogy a kódod működik, ellenőrizheti annak teljesítményét.

Tesztelés betöltése

A tesztelés ellenőrzi, ha az api a várakozásoknak megfelelően reagál a különböző szerverekre.

Stressz teszt

Annak ellenőrzése, hogy az API a várt módon működik-e, ha egyszerre sok kérést kap.

Szükségem van 100\% -os lefedettségre?

A 100\% -os lefedettség nem garantálja, hogy a kódod teljesen tesztelt és működő. Ez csak azt jelenti, hogy tesztek használták a kódod minden egyes sorát, de biztosan segít a kód lefedettségének futtatásában, hogy lássa, nem hiányzott-e a kód egyes részeinek lefedése.

Megtudtuk, hogy nem előnyös az írás tesztek egyszerű módszerekhez, mint getterek és setterek. Időbe telik az írás és a karbantartás, különösen nagy projekteknél.

Bár a tesztek kiküszöbölik a legtöbb lehetséges hibát, mégis lesznek olyan éles esetek, amelyekre nem gondolt. Ha hiba jelenik meg, akkor először győződjön meg róla, hogy új tesztekkel reprodukálja, majd javítsa ki a kódot. Így javul a lefedettsége, és biztos lesz benne, hogy lefedte ezt az esetet. Ez egy nagyszerű módszer arra is, hogy elkezdje lefedni azokat a régi projekteket, amelyek még nem rendelkeznek tesztekkel.

Íme néhány hasznos eszköz a kód és a tesztek minőségének ellenőrzésére:

  • Fertőzés – a mutáció tesztelésének eszköze. A mutációs teszt értékeli a meglévő tesztek minőségét. A mutációs tesztelés kis mértékben módosítja a programot, és arra számít, hogy a tesztek sikertelenek lesznek, ami azt jelenti, hogy a mutánsokat megölik. Minden sikeres teszt esetében a mutáns életben marad. A tesztcsomagokat az általuk elpusztított mutánsok százalékos arányával mérjük. A mutációs tesztelés biztosítja a Mutation Score Indicator (MSI) nevű tesztelési kritériumot. Az MSI a tesztkészlet hatékonyságát a hibák észlelésére való képesség szempontjából méri. Integrálhatja a CI-be, és beállíthatja a CI átadásához szükséges minimális MSI-t.
  • PHPStan – A PHPStan arra összpontosít, hogy hibákat találjon a kódban anélkül, hogy ténylegesen futtatná. A hibák egész osztályait elkapja, még mielőtt teszteket írna a kódhoz. Közelebb hozza a PHP-t a lefordított nyelvekhez abban az értelemben, hogy a kód egyes sorainak helyessége ellenőrizhető a tényleges sor futtatása előtt.
  • Folyamatos integráció (CI) – lehetővé teszi a tesztek futtatását minden egyes elkötelezettségen. Ez megakadályozza, hogy összevonja a PR-eket a sikertelen tesztekkel.

Következtetés

Könnyű eltévedni a tesztek írásával kapcsolatos minden dologban. A tesztelés fő célja annak biztosítása, hogy a kód működjön és könnyen karbantartható legyen. Ha még nem ismeri a tesztelést, úgy tűnhet, hogy túl sok időbe telik, de ne adja fel, ha megszerzi, ez sokkal könnyebbé és gyorsabbá teszi a kódolási életét. 🙂

Ezt a kreatív darabot eredetileg a Locastic.com webhelyen tették közzé – https://locastic.com/blog/what-to-do-when- elveszsz-api-tesztelésben /

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük