E2E Testing: A Tutorial and Architectural Guide
A végponttól végpontig (E2E) tesztelés segít az alkalmazás legfontosabb folyamatainak, például a felhasználói bejelentkezési kéréseknek a validálásában. Front-end fejlesztés esetén az E2E tesztek segítenek ellenőrizni, hogy a megfelelő felhasználói felület került-e megjelenítésre. Back-end fejlesztés esetén az E2E tesztek segítenek ellenőrizni, hogy a back-end szolgáltatások egy fontos folyamata a várt kimenetet adja-e vissza.
Ez a bejegyzés bemutatja az E2E tesztelést, és használható tippeket ad. Azt is elmagyarázzuk, hogyan írhat újrafelhasználható teszteket, hogy azok segítségével könnyebben készíthessen E2E teszteket. Mint bizonyára tudja, az E2E tesztek gyakran nagy frusztrációt jelentenek a fejlesztők számára, mivel megírása, futtatása és karbantartása sok erőfeszítést igényel.
Először is nézzük meg, hol helyezkedik el az E2E tesztelés a szoftvertesztelési piramisban.
Az E2E tesztek helye a tesztelési piramisban
A tesztelési piramist vizsgálva négy fő tesztelési típust találunk, amelyek segítségével garantálhatjuk a kód minőségét:
- Az E2E tesztek segítenek az alkalmazás nagy értékű útvonalainak ellenőrzésében. Más szóval, segítenek a felhasználói történetek ellenőrzésében, mivel gyakran ezek képviselik a folyamatokat az alkalmazásban.
- Az integrációs tesztek segítenek több funkció vagy komponens integrációjának ellenőrzésében. Az integrációs tesztekből megtudhatja, hogy a kódja koherens módon működik-e más funkciókkal.
- Az egységtesztek segítenek a funkciók üzleti logikájának ellenőrzésében. Az egységtesztek a tesztelés legalapvetőbb formája, és biztosítják az üzleti logika helyességét.
- Végül nem feledkezhetünk meg a statikus elemzésről vagy statikus tesztelésről sem. A statikus tesztelés segít megtalálni a gépelési vagy típushibákat.
A piramis szerint a legtöbb tesztnek egységtesztnek kell lennie, kevesebb integrációs és még kevesebb E2E-tesztnek. Az alkalmazásban lévő folyamatok ellenőrzése azonban még mindig fontos. Az E2E teszteket nehéz karbantartani, és sok erőfeszítést igényelnek. Ezért csak a legfontosabb folyamatokat ellenőrizze E2E tesztekkel. Az egyéb tesztelési típusoknak, például az integrációs és egységtesztelésnek már elegendő bizalmat kell nyújtania a kódbázisában.
A különböző E2E tesztelési stratégiák
Hadd mondjam el, hogy léteznek különböző stratégiák. Választhatunk a horizontális E2E tesztelés és a vertikális E2E tesztelés között. Mindkét stratégiát érdemes megvizsgálni, mivel lehetővé teszik a különböző forgatókönyvek tesztelését. Ismerjük meg, hogy mit csinálnak az egyes stratégiák.
Stratégia #1: Vertikális végponttól-végpontig tesztelés
Ez a stratégia a tesztelési piramis minden rétegének tesztelésére összpontosít. Magában foglalja az egységteszteket, az integrációs teszteket és a felhasználói felület tesztjeit. A cél az, hogy az egységtesztek segítségével granuláris szinten tesztelje a komponenst, az integrációs tesztek segítségével tesztelje, hogyan viselkedik a komponens más komponensekkel való interakció során, végül pedig ellenőrizze a komponens viselkedését, amikor a felhasználók a felhasználói felületen keresztül interakcióba lépnek.
A leggyakrabban egy folyamatos integrációs csővezetéket szeretne használni, hogy automatizálja ezeket a teszteket minden egyes kód commit vagy pull request esetén.
Stratégia #2: Horizontális végponttól végpontig tesztelés
A horizontális E2E tesztelés a teljes felhasználói folyamat ellenőrzésére összpontosít. Íme egy minta folyam egy webshophoz:
- Termékoldal megnyitása
- Termékméret kiválasztása
- Termék hozzáadása a kosárhoz
- Kasszára lépés
- A cím- és fizetési adatok kitöltése
- Fizetés befejezése
- Vásárlás visszaigazoló képernyő megjelenítése
Itt a felhasználói folyamat minden egyes tranzakcióját szeretnénk ellenőrizni. Gyakran ez a fajta tesztelés ellenőrzi a különböző alkalmazások közötti interakciót, és ellenőrzi ezen alkalmazások állapotváltozásait.
Megjegyezzük, hogy az ilyen típusú tesztek megírása költséges. A felhasználói folyamatok definiálása és e tesztek megírása meglehetősen sok időt igényel. Ezért próbáljon meg az alkalmazás kritikus tranzakciós útvonalaira összpontosítani.
Mindemellett ügyeljen arra, hogy ezeket a kritikus felhasználói folyamatokat különböző feltételek mellett tesztelje. Ez a stratégia lehetővé teszi, hogy teljes képet kapjon a felhasználói folyamat robusztusságáról. Ezek a feltételek közé tartoznak:
- Összetett időzítési forgatókönyvek: Például egy koncertjegy csak 15 percig áll rendelkezésére.
- Eltérő adatbevitel vagy hiányzó adatok.
- Folyamatmegszakítások: A felhasználó úgy dönt, hogy elhagyja a pénztár oldalát, hogy egy másik termékoldalt nézzen meg. Ellenőriznünk kell például, hogy a komponens elmenti-e a pénztár állapotát.
A következőkben megtanuljuk, mikor írjunk E2E teszteket.
Mikor írjunk E2E teszteket
Nem biztos, hogy tudja, hogy az E2E tesztek drága tesztek, amelyeket a folyamatos integrációs pipeline-ban kell futtatni. Gyakran sok előkészületet igényelnek, például egy olyan adatbázis létrehozását, amely a termelési adatokat utánozza. Ráadásul néha időigényes folyamatokat képviselnek az alkalmazásban. Ezért lassúak lehetnek, és több erőforrást igényel a végrehajtásuk.
Az E2E teszteket az alkalmazás legfontosabb folyamatainak ellenőrzésére használja. Példák a nagy értékű folyamatokra:
- Bejelentkezés és kijelentkezés
- Új felhasználó regisztrálása
- Tétel hozzáadása a kosárhoz
- Jelszó módosítása
- Minden más, a szolgáltatással kapcsolatos fontos folyamat
Ne feledkezzen meg azonban arról, hogy az ön által írt üzleti logikát egység- és integrációs tesztekkel ellenőrizze. Az egység- és integrációs tesztek kombinációja bőséges bizalmat kell, hogy adjon a kódod minőségével kapcsolatban. Az E2E tesztek segítenek növelni ezt a bizalmat a kritikus útvonalak esetében.
Itt van néhány megvalósítható tipp az E2E tesztek írásához.
Tippek az E2E tesztek írásához
Fókuszáljon az újrafelhasználható tesztek írására
Az első és legfontosabb tipp, hogy kis, független, újrafelhasználható teszteket és komponenseket írjon. Ez lehetővé teszi, hogy több kis komponenst összefűzve könnyebben hozzon létre teljes, végponttól végpontig tartó felhasználói folyamatokat. Ahelyett, hogy sok egyéni komponenst írna, amelyeket csak az E2E tesztek használnak, összpontosítson az újrafelhasználható komponensek írására.
A kis, független komponensek írása segít a kód újrafelhasználásában és csökkenti a hibaelhárítási időt. Emellett a kis komponenseket könnyebb frissíteni, ha a funkcionalitás vagy a felhasználói folyamatok megváltoznak.
Mindig mérlegelje az E2E-teszt írásának okát
Ha egy adott folyamatot le akar fedni egy E2E-teszttel, fontolja meg, hogy érdemes-e lefedni. Csak a nagy értékű felhasználói folyamatokat tesztelje E2E tesztekkel. Például nem szabad tesztelnie, hogy hibaüzenet jelenik-e meg, ha a felhasználó helytelen e-mail címet ad meg. Ez egy túlságosan egyszerű használati eset, amely nem illik egy E2E tesztbe. Ez a követelmény egyszerűen tesztelhető egységteszttel.
Másrészt érdemes tesztelni, hogy a bejelentkezési oldal a sikeres bejelentkezés után átirányít-e a megfelelő alkalmazásoldalra. Ez egy értékes folyamat ahhoz, hogy a felhasználók használni tudják az alkalmazást. Röviden, mindig vegye figyelembe az E2E teszt megírásának okát.
Az E2E teszteknek nem szabad függniük a megvalósítás részleteitől
Nem akarja minden alkalommal frissíteni az E2E teszteket, amikor egy adott folyam megvalósítási részleteit megváltoztatja. Ezért olyan komponenseket akar írni, amelyek lehetővé teszik az implementációs részletek absztrahálását. Az E2E tesztelés sokkal könnyebben karbantarthatóvá és szórakoztatóbbá válik, ha az implementációs részleteket elrejtjük a komponensekben. Röviden, az E2E-teszteknek függetlennek kell lenniük az implementációs részletektől.
A következőkben nézzük meg az E2E-tesztek buktatóit.
Az E2E-tesztelés buktatói
Itt egy lista az E2E-teszteléssel kapcsolatos gyakori buktatókról:
- Az E2E-teszteknek nem szabad megpróbálni a lehető legtöbbet tesztelni egy menetben. Gyakran előfordul, hogy a fejlesztők hatalmas E2E-teszteket írnak, amelyek a felhasználói folyamat minden aspektusát ellenőrzik. Tartsa egyszerűnek a dolgokat, és ellenőrizze a felhasználói folyamat legfontosabb aspektusait. Például egy bejelentkezési folyamat esetében csak azt kell ellenőriznie, hogy a felhasználó át lett-e irányítva az alkalmazás oldalára. Ez megkönnyíti a fejlesztők számára az E2E-tesztek karbantartását és frissítését.
- Amikor egy E2E-teszt sikertelen, nehéz lehet megtalálni a hiba pontos okát. Csökkentheti azonban a szükséges hibakeresési erőfeszítéseket, ha az üzleti logikát egység- és integrációs tesztekkel fedezi le. Egyes eszközök jó okelemzést is nyújtanak, beleértve a sikertelen tesztlépések képernyőképeit és konzolnaplóit, ami csökkentheti a hibaelhárítás idejét.
- Az E2E tesztek jelentős időt igényelnek a folyamatos integrációs (CI) csővezetékben. Blokkolhatják a CI-csővezetéket, ami lelassítja a teljes fejlesztést. Ez azt jelenti, hogy esetleg be kell fektetnie a CI-csatornájába, hogy több csővezeték legyen a tesztek futtatására.
- Az E2E-tesztek folyamatos erőfeszítést jelentenek. Minden alkalommal, amikor új funkciókat adnak hozzá, vagy a régi funkciók megváltoznak, valószínűleg frissítenie kell az E2E-tesztjeit. Ezt az erőfeszítést azonban csökkenthetjük, ha olyan újrafelhasználható komponenseket írunk, amelyek absztrahálják a megvalósítás részleteit. Emellett egyes eszközök mesterséges intelligenciát használnak a tesztek adaptálására, amikor a kód változik, csökkentve ezzel a tesztek karbantartását.
Most nézzük meg röviden a rendszertesztelés és az E2E tesztelés közötti különbségeket.
Rendszertesztelés vs. E2E tesztelés – mi a különbség?
Mi a különbség a rendszertesztelés és az E2E tesztelés között? A rendszertesztelés mind a funkcionális, mind a nem funkcionális követelmények validálására összpontosít. Gyakran egy külső csapat végzi, amely az alkalmazást fekete dobozként kezeli. Más szóval, semmit sem tudnak az alkalmazás működéséről, kivéve azokat a követelményeket, amelyeknek meg kell felelnie.
A tesztelésnek ezt a formáját azonban gyakran összekeverik az E2E-teszteléssel, mivel a rendszertesztelés az E2E-tesztelés egyik formája. Bár a rendszertesztelés sokkal többet ellenőriz, mint az E2E tesztelés. A rendszertesztelés például a skálázhatóságot, a teljesítményt vagy a megbízhatóságot méri. Míg az E2E-tesztelés a felhasználói folyamatok helyes befejezésére összpontosít.
Végül foglaljuk össze a cikk tanulságait.
Következtetés az E2E-ről
A végponttól végpontig tartó tesztek elég hatékonyak, mivel segítenek a nagy értékű felhasználói folyamatok vagy felhasználói történetek validálásában. Segítenek garantálni az alkalmazás minőségét.
Az E2E tesztek írása és karbantartása azonban jelentős időt és erőfeszítést igényelhet. Ezt az erőfeszítést csökkenthetjük, ha kis, újrafelhasználható komponenseket írunk, amelyek absztrahálják az implementációs részleteket. Egyes eszközök segítenek rugalmasabb tesztek létrehozásában is azáltal, hogy AI vagy több attribútumot használnak az egyes elemek azonosítására. Ezért nem kell minden alkalommal frissíteni az E2E teszteket, amikor a nagy értékű felhasználói folyamatok végrehajtási részletei megváltoznak. Ezenkívül az újrafelhasználható komponensek lehetővé teszik, hogy ezeket a komponenseket összefűzze, és így könnyen létrehozza az E2E tesztfolyamatokat.
Az E2E teszteknek le kell fedniük az alkalmazás legfontosabb folyamatait. Azokat a folyamatokat tesztelik, amelyeket a felhasználók és az ügyfelek követnek, hogy értéket kapjanak az alkalmazásból. Ha nem tudnak bejelentkezni, vagy nem tudnak hozzáadni egy terméket a kosárhoz, akkor vagy elmennek (ha tudnak), vagy hívják az ügyfélszolgálatot, ha kénytelenek használni az alkalmazásodat. Például le akarja fedni a bejelentkezési és kijelentkezési folyamatot, de kevésbé érdekli a hibaüzenet ellenőrzése egy rossz e-mail cím beírása után.
Az E2E tesztek írása végül is szórakoztató kell, hogy legyen. Nem szabad, hogy sok időt és erőfeszítést igényeljen a megírásuk és karbantartásuk. Tartsa egyszerűnek az E2E teszteket, és összpontosítson az újrafelhasználható összetevőkre, és nagyszerű eredményeket fog látni!
Ezt a bejegyzést Michiel Mulders írta. Michiel szenvedélyes blokkláncfejlesztő, aki szeret műszaki tartalmakat írni. Emellett szeret tanulni a marketingről, a UX-pszichológiáról és a vállalkozói tevékenységről. Amikor épp nem ír, akkor valószínűleg egy belga sört fogyaszt!