Jak automatizace testů přispívá k udržitelnosti ve vývoji aplikací?
Automatizace testů je důležitou součástí každého softwarového projektu. Nejen že zvyšuje kvalitu a spolehlivost aplikací, ale také šetří čas a peníze vývojářů a zákazníků. V tomto článku se podíváme na to, jak v Ackee využíváme automatizaci testů, jaké technologie používáme, jaké jsou rozdíly mezi různými typy testů a jak vybíráme testy k automatizaci. Také si ukážeme, jak testujeme náš vlastní produkt pomocí frameworku Playwright.
Proč je automatizace testů důležitá?
Jako agentura se u projektů velice často setkáváme s velikým tlakem na rychlost dodání, ale i s omezeným budgetem pro projekt (neboli všichni chtějí appku hned a za co nejmíň). To znamená, že ne vždy dostaneme příležitost psát end-to-end testy pro daný projekt. Když už ale tu příležitost máme, tak se snažíme co nejvíce automatizovat testy, které nám zajistí, že aplikace funguje správně a splňuje požadavky zákazníka.
Automatizace testů nám přináší několik výhod:
- Zvyšuje kvalitu aplikace
- Zvyšuje efektivitu vývojete
- Zvyšuje spokojenost zákazníka
- Zvyšuje udržitelnost projektu
Jaké technologie k automatizaci používáme a proč?
V Ackee používáme různé testovací frameworky pro různé typy testů a vrstvy aplikace. Zde jsou příklady testovacích frameworků, které u nás ve firmě používáme napříč týmy:
- Frontend – Cypress: Cypress je framework pro psaní end-to-end (E2E) testů pro webové aplikace. Používáme ho pro testování uživatelského rozhraní (UI) a interakcí s aplikací z pohledu uživatele. Cypress nám umožňuje snadno psát, spouštět a ladit testy v reálném prohlížeči. Také nám nabízí řadu nástrojů pro vizualizaci, záznam a analýzu testů.
- Backend – Mocha: Mocha je framework pro psaní jednotkových (unit) a integračních (integration) testů pro backendovou část aplikace. Používáme ho pro testování logiky, funkcí a datových operací na serveru. Mocha nám umožňuje psát testy v JavaScriptu, který je stejný jazyk, který používáme pro vývoj backendu. Také nám umožňuje používat různé knihovny pro tvrzení (assertions), špionáž (spies), zástupce (stubs) a simulace (mocks), které nám pomáhají izolovat a ověřovat chování kódu.
- QA – Playwright: Playwright je framework pro psaní E2E testů pro webové a mobilní aplikace. Používáme ho pro testování celé aplikace z pohledu kvality (QA). Playwright nám umožňuje psát testy v TypeScriptu, který je nadstavbou JavaScriptu s přidanou statickou typovou kontrolou. Také nám umožňuje spouštět testy paralelně a v různých prohlížečích a zařízeních.
Jaké jsou rozdíly mezi QA E2E testy a frontend testy?
Jak jsme již zmínili, používáme dva různé frameworky pro psaní E2E testů: Cypress pro frontend a Playwright pro QA. To je proto, že tyto dva typy testů mají různé cíle a zaměření.
- Frontend testy se zaměřují na UI aka uživatelské rozhraní. Testují, jak se aplikace zobrazuje a reaguje na uživatelské akce, jako jsou kliky, vstupy, scrollování atd. Frontend testy nám pomáhají zajistit, že aplikace je funkční, vzhledná a použitelná pro uživatele.
- QA testy se zaměřují na celou aplikaci. Testují, jak aplikace funguje jako celek, jak komunikuje s backendem, databází, externími službami atd. QA testy nám pomáhají zajistit, že aplikace je spolehlivá, bezpečná a integrovaná s ostatními systémy.
Proč jsme přešli na Playwright pro QA testy?
Přechod na Playwright ovšem neznamená, že se veškeré testy přepíšou, to by byl krok proti udržitelnosti a také víme, že i Cypress má svoje silné stránky. Používáme oba frameworky v závislosti na potřebách a kontextu projektu. Nicméně jsme se rozhodli používat Playwright pro QA testy z několika důvodů:
- Opravdu jednoduchý a rychlý setup. Playwright nás setupem provede v pár krocích a je hotovo. Nemusíme se starat o instalaci prohlížečů, ovladačů, závislostí atd. Vše je připraveno a funguje z krabice.
- Typescript native. Playwright je napsán v TypeScriptu a podporuje ho nativně. To znamená, že můžeme psát testy v TypeScriptu bez nutnosti konfigurovat transpilery, linters, formátovače atd.
- Rychlejší běh testů. Playwright nám umožňuje spouštět testy paralelně a využívat více workerů. To znamená, že můžeme testovat více scénářů a prohlížečů najednou, což nám šetří čas a zvyšuje pokrytí testů..
- Podpora více prohlížečů a zařízení. Playwright nám umožňuje testovat aplikaci v různých prohlížečích, jako jsou Chrome, Firefox, Safari a Edge. To nám pomáhá zajistit, že aplikace funguje správně a konzistentně napříč různými platformami a prostředími. Bohatá sada funkcí a možností. Playwright nám nabízí mnoho funkcí a možností, které nám usnadňují psaní a spouštění testů.
Jak vybíráme testy k automatizaci?
Pro automatizaci vybíráme části aplikace, které se nejméně mění, ale nejčastěji používají (login, homepage atd). Neboli testy pracující s těmi nejdůležitějšími funkcemi. To nám pomáhá zajistit, že automatizované testy jsou stabilní, udržitelné a efektivní. Při výběru testů k automatizaci také bereme v úvahu následující kritéria:
- Riziko: Vybereme testy, které pokrývají ty části aplikace, které mají nejvyšší riziko selhání nebo způsobení škody. Například, testy, které ověřují bezpečnost, ochranu dat, platební procesy atd.
- Frekvence: Vybereme testy, které pokrývají ty části aplikace, které se používají nejčastěji nebo jsou nejvíce ovlivněny změnami v kódu. Například, testy, které ověřují základní funkce, navigaci, kompatibilitu atd.
- Složitost: Vybereme testy, které pokrývají ty části aplikace, které jsou nejsložitější nebo nejtěžší otestovat manuálně. Například, testy, které ověřují logiku, algoritmy, výpočty atd.
Jak testujeme náš produkt pomocí Playwright?
Nyní, když jsme si vysvětlili, proč a jak používáme automatizaci testů, pojďme se podívat na to, jak testujeme náš vlastní produkt pomocí Playwright. Náš produkt je webová aplikace, která umožňuje uživatelům vytvářet, spravovat a sdílet své osobní a profesní projekty. Aplikace je postavena na Reactu a Firebase a používá Google OAuth pro autentizaci uživatelů.
Pro testování našeho produktu používáme Playwright pro psaní a spouštění E2E testů, které ověřují funkčnost a integraci celé aplikace. Naše testy jsou rozděleny do různých souborů podle funkcionalit, které testují, jako jsou login, homepage, dashboard, project, task, comment atd. Každý soubor obsahuje několik testů, které pokrývají různé scénáře a případy užití.
Zde je ukázka jednoduchých testů, zda se uživatel z úvodní stránky všech třech prostředí dostane přes tlačítko na Google na Google login. Jak můžete vidět vpravo, testy se provádí ve 3 prohlížečích: Chrome, Firefox a Safari.
Automatizace testování: Jak budeme pokračovat dál?
- Naše testy chceme mít co nejefektivnější a udržitelné, což se nejen díky skvělému supportu od našich vývojářů daří a chceme se posouvat dál.
- S Playwrightem nepracujeme dlouho, takže jedna z dalších priorit je vytvořit pipeline, ve které se budou testy spouštět při releasu. Aktuálně testy spouštíme pouze lokálně, což samozřejmě není ideální. Našim cílem je toto změnit, aby bylo vše ohledně testů dostupné celému týmu, který na projektu pracuje.
- Pro visual testing má Playwright sice svoje funkce, ale ty nelze dobře využít při běhu testů v pipeline, proto budeme dělat research na tool, který nám s tím pomůže.
Závěr
Automatizace představuje klíčový nástroj pro zajištění kvality a udržitelnosti ve vývoji aplikací. Díky efektivnímu využití frameworků jako Cypress a Playwright jsme schopni nejen zlepšit spolehlivost a funkčnost našich produktů, ale také optimalizovat čas a zdroje vývojového týmu. S přechodem na Playwright jsme identifikovali další možnosti zlepšení, včetně implementace automatizovaných testů do procesu releasů a neustále usilujeme o to, aby naše testy byly co nejefektivnější a udržitelné pro celý tým.