Automatizált regressziós tesztek webalkalmazásokhoz
Egy módosított kedvezménykód, egy új szerepkör-jogosultság, vagy egy fizetési szolgáltatás frissítése elronthat egy webalkalmazást olyan ponton, amelyhez hónapok óta senki nem nyúlt. Pontosan itt lépnek be a webalkalmazásokhoz készült automatizált regressziós tesztek: ismételten ellenőrzik, hogy a bevált üzleti folyamatok a változtatások után is tovább működnek-e. Nem elméleti minőségi mérőszámként, hanem pontosan ott, ahol egy hiba blokkolná a rendeléseket, készletmozgásokat, számlákat, vagy ügyfélfiókokat.
Sok csapat esetében a probléma alattomosan kezdődik. A kiadások tovább tartanak, mert az osztályok kézzel kattintanak végig ugyanazokon az alapfolyamatokon. A tesztelési tudás egyes emberekhez van kötve. És egy frissítés előtt megmarad a kényelmetlen kérdés: mit hagytunk ki? Az automatizálás sem a funkcionális felelősséget, sem az értelmes felfedező munkát nem helyettesíti. Megbízhatóvá, reprodukálhatóvá, és ellenőrizhetővé teszi az ismétlődő, üzletileg kritikus ellenőrzéseket.
Mit biztosítanak valójában az automatizált regressziós tesztek
Egy regressziós teszt egy egyszerű kérdésre válaszol: működik-e még valami, ami korábban működött, egy változtatás után is? Egy webalkalmazásban ez ritkán csak egyetlen gombról szól. Az számít, hogy a végponttól végpontig terjedő munkafolyamatok a felhasználói felületen, jogosultságokon, felületeken, és az adatbázison keresztül működnek-e.
Egy példa egy operatív rendszerből: egy munkatárs bejelentkezik, rögzít egy árubeérkezést, könyvel egy készletmozgást, létrehoz egy szállítólevelet, és átadja a küldeményt egy futárszolgálatnak. Minden egyes lépés technikailag helyesnek tűnhet, mégis kudarcot vallhat az egymásra hatásukban. Talán a mennyiség mentésre kerül, de nem frissül a készletben. Talán a címke generálódik, de hiányzik a hivatkozási szám. Talán a munkafolyamat csak adminisztrátoroknak működik, de a raktári szerepkörnek nem.
Az automatizált tesztek meghatározott bemenetekkel végrehajthatják az ilyen útvonalakat és ellenőrizhetik az eredményeket. Ez magában foglalja a felhasználói felületen látható eredményeket, valamint a státuszértékeket, generált dokumentumokat, e-maileket, vagy API válaszokat. Az előny akkor nő, ha az ellenőrzéseket az üzemeltetési kockázatok közelében szervezik — nem a technikailag lehetséges tesztesetek száma alapján.
Mely webes munkafolyamatokat érdemes elsőként automatizálni
Nem minden kattintás érdemel azonnal automatizált tesztet. Egy ritkán használt, alacsony kárpotenciállal rendelkező beállítási oldal kezdetben manuálisan is ellenőrizhető. Ezzel szemben a gyakori változásokkal, magas használattal, vagy egyértelmű pénzügyi és üzemeltetési következményekkel járó munkafolyamatok korán a tesztkészletbe tartoznak.
Különösen értékesek a bejelentkezés, jelszó-visszaállítás, és fiókzárolás tesztjei. Ezek biztosítják az alkalmazáshoz való hozzáférést, és gyakran érintik őket az identitásszolgáltatások, munkamenet-kezelés, vagy biztonsági szabályok változásai. Ugyanolyan fontosak az alapvető folyamatok, mint a rendelésfelvétel, ár- és adószámítás, jóváhagyások, készletkönyvelések, dokumentumgenerálás, és a szállítási, ERP-, vagy fizetési szolgáltatókhoz vezető felületek.
A józan priorizálás egyaránt segít a vezetésnek és az üzleti osztályoknak. Ne először azt kérdezze, melyik oldalt a legkönnyebb tesztelni. Kérdezze meg: melyik hiba állít meg egy műszakot, okoz újramunkát, vagy vezet helytelen ügyféltájékoztatáshoz? Ebből alakul ki egy tesztlista, amely a valódi működést védi.
Egy tesztesetnek ellenőrizhető eredményre van szüksége
A „rendelés létrehozása" még nem jó teszteset. Jobb a következő: egy értékesítési képviselő az értékesítési szerepkörrel létrehoz egy rendelést egy meglévő ügyfélnek, hozzáad egy tételt meghatározott mennyiséggel, elmenti, és generál egy rendelésszámot. Ezt követően a státusz „nyitott", az összeg megfelel a szabályoknak, és a rendelés megjelenik a nyitott tranzakciók listáján.
Ez a pontosság nem bürokrácia. Megakadályozza az olyan teszteket, amelyek végigkattintanak anélkül, hogy meg tudnák állapítani, helyes-e az üzleti eredmény. Emellett megkönnyíti az egyeztetést a fejlesztés, a QA, és az üzleti osztályok között. Különösen egyedi fejlesztésű rendszerekben a szakterületi szakértők gyakran az egyetlen megbízható forrás arra, hogy mit is jelent valójában a „helyes" a mindennapi működésben.
Teszt-piramis a mindenre kiterjedő böngésző-automatizálás helyett
A böngészőtesztek értékesek, de nem a teljes teszt-stratégiát jelentik. Lassabban futnak, sérülékenyebbek az instabil tesztadatokkal szemben, és apró UI-módosítások után is elromolhatnak, ha a szelektorokat rosszul választották. Aki minden szabályt kizárólag a felszínen keresztül ellenőriz, lassú és karbantartás-igényes csomagot épít.
Az üzleti logikát, mint az árszámítások, mennyiségellenőrzések, vagy státuszátmenetek, ott kell tesztelni, ahol implementálva van — például egység- vagy integrációs tesztként. A felületek célzottan tesztelhetők kontrollált válaszokkal. A böngészőalapú végponttól végpontig tesztek ezután azon kevés útvonalak számára maradnak fenntartva, ahol az összes komponens együttműködése döntő.
PHP 8.4 alkalmazásoknál MySQL 8-cal ez például azt jelenti: a számítási és validációs szabályokat a kódhoz közel biztosítják, az adatbázis-tranzakciókat és API-szerződéseket integrációs módon tesztelik, míg egy böngészőteszt a teljes rendelést a generált dokumentumig követi. Ez kevésbé látványos, mint egy nagy gyűjtemény látható kattintásos tesztből. Ugyanakkor gyorsabb visszajelzést és alacsonyabb karbantartási terhet biztosít.
A stabilitás tesztadatokból és világos technikai határokból ered
Sok automatizálási projekt nem a tesztelő eszköz miatt bukik el, hanem a nem kontrollált előfeltételek miatt. Ha egy tesztfiók zárolva van, egy tesztrendelés az előző napról még mindig létezik, vagy egy külső szolgáltatás lassan válaszol, hamis riasztás történik. Az ilyen instabil tesztek gyorsan elveszítik a csapat bizalmát.
A tesztadatokat ezért szándékosan kell létrehozni és tisztítani. Elengedhetetlenek a különálló bérlők vagy egyértelműen elszigetelt adatkészletek, az egyedi azonosítók minden tesztfuttatáshoz, és a meghatározott kezdeti állapotok. Egy teszt nem függhet véletlenszerűen más tesztek végrehajtási sorrendjétől. Ahol külső szolgáltatások vannak érintve, világos döntést kell hozni: valós tesztkörnyezetet használnak, vagy a felületet szimulálják az adott teszthez? Mindkét megközelítés helyes lehet.
A szelektorok is figyelmet érdemelnek. A tesztek ne függjenek elrendezési osztályoktól, szövegpozícióktól, vagy véletlenszerű HTML-struktúráktól. A kifejezetten tesztelésre szánt stabil attribútumok csökkentik a felesleges karbantartást. Ez egy kicsi technikai döntés nagy hatással, amikor a felület és a dizájn rendszeresen fejlődik.
Az automatizált regressziós tesztek integrálása a kiadási folyamatba
A legjobb teszt sem sokat segít, ha csak kézileg indítják el a nagy kiadások előtt. Egy szintezett végrehajtás értelmes: gyors kód- és felülettesztek futnak minden változtatással. A legfontosabb böngésző-útvonalak pull requestek során vagy a staging környezetbe való telepítés előtt futnak. Kiterjedtebb ellenőrzések éjszaka vagy egy tervezett éles kiadás előtt zajlhatnak.
A visszajelzés döntő fontosságú. Egy sikertelen tesztnek nemcsak piros ikonra van szüksége, hanem használható betekintésre is: milyen adatokat használtak? Melyik lépésnél történt a hiba? Melyik képernyőkép vagy napló bizonyítja ezt? A nagy dedikált QA-osztály nélküli csapatok számára az egyértelmű megállapítások különösen értékesek. Képesnek kell lenniük azonosítani, hogy a hiba a rendszerben, a tesztadatokban, vagy a tesztkörnyezetben van-e.
A COCO itt önállóan üzemeltetett tesztinfrastruktúraként használható tesztfolyamatok végrehajtására, bizonyítékok rögzítésére, és az eredmények közérthető nyelven történő bemutatására. Ez különösen releváns, amikor a képernyőképeket, belső felületeket, vagy tesztadatokat nem szabad külső felhőbe átvinni. Az önálló üzemeltetés azonban nem jelenti a karbantartás hiányát: a hozzáférési jogokat, frissítéseket, kapacitást, és megőrzési szabályokat ugyanolyan gondosan kell megtervezni, mint magukat a teszteket.
Mit árulnak el a mérőszámok — és mit nem
Az automatizált tesztek növekvő száma nem a minőség bizonyítéka. Egy 2000 felszínes tesztből álló csomag kevesebb védelmet nyújthat, mint 40 gondosan karbantartott teszt a kritikus értékfolyamatokhoz. Tanulságosabbak az olyan kérdések, mint: mennyi ideig tart a visszajelzés egy változtatás után? Hány releváns hibát fognak el a termelés előtt? Milyen gyakran valóban hamis riasztások a tesztsikertelenségek? És mely üzletileg kritikus folyamatok vannak bizonyíthatóan lefedve?
A futási idő is gyakorlati tényező. Ha egy csomagnak négy órára van szüksége az eredmények szállításához, a napi üzletmenetben megkerülik. Ha 15 percen belül egyértelmű jelzést ad a bejelentkezésről, rendelésről, készletről, és dokumentumokról, támogatja a döntéshozatalt a kiadás előtt. A szükséges mélység az alkalmazástól és a kockázattól függ. Egy belső tervezőeszköz mást igényel, mint egy fizetéseket és személyes adatokat kezelő ügyfélportál.
A helyes kezdés kisebb, mint sokan gondolnák
Kezdjen egy olyan folyamattal, amelynek kudarca érezhető hatással lenne, és térképezze fel teljesen. Határozza meg a várt eredményt együtt azokkal az emberekkel, akik naponta használják ezt a munkafolyamatot. Biztosítson kontrollált tesztadatokat, stabil technikai horgonyokat, és nyomon követhető bizonyítékokat. Csak amikor ez az első teszt megbízhatóan fut, kellene hozzáadni a következő folyamatot.
Így nem egy lenyűgöző, de törékeny tesztkulissza lesz a végeredmény. Ehelyett egy ellenálló biztonsági vonalat épít a változtatásokhoz — lépésről lépésre, pontosan ott, ahol a webalkalmazása ténylegesen hordozza az operatív üzletet.