Co je funkční testování?
V této části se připojíte k týmu Tailspin při definování funkčních testů pro svůj kanál. Funkční testy ověřují, jestli každá funkce softwaru dělá to, co by měla.
Tým nejprve definuje, co se týká funkčního testu. Prozkoumávají některé typy funkčních testů. Pak se rozhodnou, že první test přidá do svého kanálu.
Týdenní schůzka
Tým má týdenní schůzku. Andy demonstruje kanál verze. Tým sleduje úspěšný přesun sestavení kanálem z jedné fáze do druhé. Nakonec se webová aplikace zvýší na přípravnou verzi.
Amita: Jsem tak šťastný s kanálem. Můj život je mnohem jednodušší. Pro jednu věc automaticky získám nasazenou verzi do testovacího prostředí. To znamená, že na testovací servery nemusím ručně stahovat a instalovat artefakty sestavení. To je významný úspora času.
Také testy jednotek, které Mara a Andy napsali, odstraňují všechny regresní chyby před vydáním. To odstraňuje hlavní zdroj frustrace. Netrávit čas hledáním a dokumentováním chyb regrese.
Ale obávám se, že veškeré testování je stále ruční. Proces je pomalý a nemůžeme nic ukázat na správě, dokud nedokončím. Je to těžké, protože testování je důležité. Testování zajišťuje, aby uživatelé získali správné prostředí. Ale tlak je na rychlejší doručování.
Andy: Jsem si jistý, že vám můžeme pomoct. Jaký druh testů trvá většinu času?
Amita: Myslím, že testy uživatelského rozhraní dělají. Musím si projít každý krok, abych se ujistil, že získám správný výsledek, a musím to udělat pro každý prohlížeč, který podporujeme. Je to velmi časově náročné. A s rostoucí složitostí webu nebude testování uživatelského rozhraní v dlouhodobém horizontu praktické.
Mara: Testy uživatelského rozhraní se považují za funkční testy.
Tim: Na rozdíl od co, nefunkční testy?
Mara: Přesně. A nefunkční testy jsou něco, o co se zajímáte zejména.
Tim: Dobře, jsem zmatený.
Co jsou funkční a nefunkční testy?
Mara:Funkční testy ověřují, že každá funkce softwaru dělá to, co by měla. Způsob implementace jednotlivých funkcí není v těchto testech důležitý. Důležité je, že se software chová správně. Zadáte vstup a zkontrolujete, že výstup je to, co očekáváte. Takto Amita testuje uživatelské rozhraní. Pokud například vybere nejlepšího hráče na tabuli výsledků, očekává, že uvidí profil daného hráče.
Nefunkční testy kontrolují charakteristiky, jako je výkon a spolehlivost. Příkladem nefunkčního testu je kontrola, kolik lidí se může k aplikaci současně přihlásit. Zátěžové testování je dalším příkladem nefunkčního testu. Tyto problémy týkající se výkonu a spolehlivosti jsou věci, o které se staráte, Tim.
Tim: Oni jsou, skutečně. Musím o tom trochu přemýšlet. Možná chci do kanálu přidat i nějakou automatizaci, ale nevím jistě, co chci udělat. Jaké druhy automatizovaných testů můžu spustit?
Mara: Prozatím se zaměříme na funkční testování. Je to druh testování, který Amita dělá. A to zní jako oblast, kde chceme zlepšit.
Jaké druhy funkčních testů můžu spustit?
Existuje mnoho druhů funkčních testů. Liší se podle funkcí, které potřebujete otestovat, a čas nebo úsilí, které obvykle vyžadují ke spuštění.
Následující části obsahují některé běžně používané funkční testy.
Orientační testování
Orientační testování ověřuje nejzásadnější funkce vaší aplikace nebo služby. Tyto testy se často spouští před dokončením a vyčerpávajícími testy. Orientační testy by měly běžet rychle.
Řekněme například, že vyvíjíte web. Orientační test může použít curl
k ověření, že web je dostupný a že načtení domovské stránky způsobí stav HTTP 200 (OK). Pokud při načítání domovské stránky vznikne jiný stavový kód, například 404 (Nenalezena) nebo 500 (vnitřní chyba serveru), víte, že web nefunguje. Také víte, že není důvod spouštět další testy. Místo toho diagnostikujete chybu, opravíte ji a restartujete testy.
Testování částí
Pracovali jste s testy jednotek v testech kvality v kanálu buildu pomocí modulu Azure Pipelines .
Stručně řečeno, testování jednotek ověřuje nejzákladnější součásti programu nebo knihovny, jako je například jednotlivá funkce nebo metoda. Určíte jeden nebo více vstupů spolu s očekávanými výsledky. Spouštěč testů provede každý test a zkontroluje, jestli skutečné výsledky odpovídají očekávaným výsledkům.
Řekněme například, že máte funkci, která provádí aritmetickou operaci, která zahrnuje dělení. Můžete zadat několik hodnot, které očekáváte, že uživatelé zadají. Zadáte také hodnoty hraničních a malých písmen, například 0 a -1. Pokud očekáváte, že určitý vstup způsobí chybu nebo výjimku, můžete ověřit, že funkce tuto chybu vygeneruje.
Testy uživatelského rozhraní, které spustíte později v tomto modulu, jsou testy jednotek.
Testování integrace
Testování integrace ověřuje, že několik softwarových komponent spolupracuje na vytvoření kompletního systému. Systém elektronického obchodování může například zahrnovat web, databázi produktů a platební systém. Můžete napsat integrační test, který přidá položky do nákupního košíku a pak tyto položky koupí. Test ověří, že se webová aplikace může připojit k databázi produktů a pak splnit objednávku.
Můžete kombinovat testy jednotek a integrační testy a vytvořit strategii vícevrstvého testování. Před spuštěním integračních testů můžete například spouštět testy jednotek na jednotlivých komponentách. Pokud všechny testy jednotek projdou, můžete přejít k integračním testům s větší jistotou.
Regresní testování
K regresi dochází v případě, že se po přidání nebo změně funkce změní nebo přeruší stávající chování. Regresní testování pomáhá určit, jestli kód, konfigurace nebo jiné změny ovlivňují celkové chování softwaru.
Regresní testování je důležité, protože změna v jedné komponentě může ovlivnit chování jiné komponenty. Řekněme například, že optimalizujete databázi pro výkon zápisu. Výkon čtení této databáze, který zpracovává jiná komponenta, může neočekávaně dojít k poklesu. Pokles výkonu čtení je regrese.
K otestování regrese můžete použít různé strategie. Tyto strategie se obvykle liší podle počtu spuštěných testů, abyste ověřili, že nová funkce nebo oprava chyb neporuší stávající funkce. Při automatizaci testů ale může regresní testování zahrnovat pouze spuštění všech testů jednotek a integračních testů při každé změně softwaru.
Testování sanity
Testování sanity zahrnuje testování každé hlavní součásti kusu softwaru, aby bylo možné ověřit, že software vypadá jako funkční a může projít důkladnějším testováním. Testy sanity si můžete představit jako méně důkladné než regresní testy nebo testy jednotek, ale testy sanity jsou širší než orientační testy.
I když je testování sanity možné automatizovat, často se provádí ručně v reakci na změnu funkce nebo opravu chyb. Například tester softwaru, který ověřuje opravu chyb, může také ověřit, že jiné funkce fungují zadáním některých typických hodnot. Pokud se zdá, že software funguje podle očekávání, může projít důkladnějším testem.
Testování uživatelského rozhraní
Testování uživatelského rozhraní (UI) ověřuje chování uživatelského rozhraní aplikace. Testy uživatelského rozhraní pomáhají ověřit, jestli sekvence nebo pořadí interakcí uživatelů vede k očekávanému výsledku. Tyto testy také pomáhají ověřit, že vstupní zařízení, jako je klávesnice nebo myš, ovlivňují uživatelské rozhraní správně. Testy uživatelského rozhraní můžete spustit a ověřit chování nativní aplikace pro Windows, macOS nebo Linux. Nebo můžete pomocí testů uživatelského rozhraní ověřit, že se uživatelské rozhraní chová podle očekávání ve webových prohlížečích.
Test jednotek nebo integrační test může ověřit, že uživatelské rozhraní přijímá data správně. Testování uživatelského rozhraní ale pomáhá ověřit, že se uživatelské rozhraní zobrazuje správně a že výsledek funguje podle očekávání pro uživatele.
Například test uživatelského rozhraní může ověřit, že se v reakci na kliknutí na tlačítko zobrazí správná animace. Druhý test může ověřit, že se stejná animace zobrazí správně při změně velikosti okna.
V tomto modulu pracujete s testy uživatelského rozhraní, které jsou kódovány ručně. K automatickému sestavení testů uživatelského rozhraní ale můžete použít systém zachycení a přehrání.
Testování použitelnosti
Testování použitelnosti je forma ručního testování, která ověřuje chování aplikace z pohledu uživatele. Testování použitelnosti obvykle provádí tým, který software sestaví.
Zatímco testování uživatelského rozhraní se zaměřuje na to, jestli se funkce chová podle očekávání, testování použitelnosti pomáhá ověřit, jestli je software intuitivní a splňuje potřeby uživatele. Jinými slovy, testování použitelnosti pomáhá ověřit, jestli je software "použitelný".
Řekněme například, že máte web, který obsahuje odkaz na profil uživatele. Test uživatelského rozhraní může ověřit, jestli je odkaz k dispozici a že po kliknutí na odkaz zobrazí profil uživatele. Pokud ale lidé nemůžou tento odkaz snadno najít, mohou být frustrovaní, když se pokusí o přístup ke svému profilu.
Testování přijetí uživateli
Uživatelské akceptační testování (UAT), jako je testování použitelnosti, se zaměřuje na chování aplikace z pohledu uživatele. Na rozdíl od testování použitelnosti se UAT obvykle provádí skutečnými koncovými uživateli.
V závislosti na softwaru můžou být koncoví uživatelé požádáni o dokončení konkrétních úloh. Nebo můžou software prozkoumat, aniž by museli vyžadovat konkrétní pokyny. U vlastního softwaru se UAT obvykle děje přímo s klientem. V případě obecnějšího softwaru můžou týmy spouštět beta testy. V beta testech dostanou uživatelé z různých geografických oblastí nebo uživatelů s určitými zájmy přednostní přístup k softwaru.
Zpětná vazba od testerů může být přímá nebo nepřímá. Přímá zpětná vazba může přicházet ve formě slovních komentářů. Nepřímá zpětná vazba může přicházet ve formě měření jazyka těla testerů, pohybů očí nebo času, který trvá dokončení určitých úkolů.
Už jsme probrali důležitost psaní testů. Ale jen zdůraznit, tady je krátké video, kde Abel Wang, poradce pro cloud v Microsoftu, vysvětluje, jak zajistit kvalitu v plánu DevOps.
Zeptejte se Abela
Co si tým vybere?
Tim: Všechny tyto testy zní důležitě. Co bychom měli řešit jako první?
Andy: Už máme funkční testy jednotek. Zatím nejsme připraveni provést testování přijetí uživateli. Na základě toho, co slyším, myslím, že bychom se měli zaměřit na testování uživatelského rozhraní. Právě teď je to nejpomalejší část našeho procesu. Amita, souhlasíte?
Amita: Ano, souhlasím. V této schůzce ještě zbývá nějaký čas. Andy nebo Mara, chcete mi pomoct naplánovat automatizovaný test uživatelského rozhraní?
Mara: Naprosto. Alech Chtěl bych prodiskutovat, jaký nástroj bychom měli použít a jak budeme testy spouštět.
Jaké nástroje můžu použít k psaní testů uživatelského rozhraní?
Mara: Co jsou naše možnosti při psaní testů uživatelského rozhraní? Vím, že jich je mnoho. Některé nástroje jsou open source. Ostatní nabízejí placenou komerční podporu. Tady je několik možností, které je potřeba vzít v úvahu:
- Ovladač aplikace pro Windows (WinAppDriver): WinAppDriver pomáhá automatizovat testy uživatelského rozhraní v aplikacích pro Windows. Tyto aplikace se dají psát v Univerzální platforma Windows (UPW) nebo model Windows Forms (WinForms). Potřebujeme řešení, které funguje v prohlížeči.
- Selenium: Selenium je přenosná opensourcová architektura pro testování softwaru pro webové aplikace. Běží ve většině operačních systémů a podporuje všechny moderní prohlížeče. Testy Selenium můžete psát v několika programovacích jazycích, včetně jazyka C#. Ve skutečnosti můžete použít balíčky NuGet, které usnadňují spuštění Selenium jako testy NUnit. Pro naše testy jednotek už používáme NUnit.
- SpecFlow: SpecFlow je určen pro projekty .NET. Je inspirovaný nástrojem nazvanýmKur. SpecFlow i Modul podporuje vývoj řízený chováním (BDD). BDD používá analyzátor přirozeného jazyka s názvem Gherkin, který pomáhá technickým týmům i netechnickým týmům definovat obchodní pravidla a požadavky. K sestavení testů uživatelského rozhraní můžete zkombinovat SpecFlow nebo Ochucenou se selenem.
Andy se dívá na Amitu.
Andy: Vím, že tyto možnosti jsou pro vás nové, takže nevadí, když vybereme Selenium? Mám s ním zkušenosti a podporuje jazyky, které už znám. Selenium také nám poskytne automatickou podporu pro více prohlížečů.
Amita: Jistě. Je lepší, když má někdo z nás nějaké zkušenosti.
Návody spustit funkční testy v kanálu?
Ve službě Azure Pipelines spouštíte funkční testy stejně jako jakýkoli jiný proces nebo test. Zeptejte se sami sebe:
- Ve které fázi se testy spustí?
- Na jakém systému se testy spustí? Budou běžet na agentu nebo v infrastruktuře, která je hostitelem aplikace?
Pojďme se připojit k týmu, když na tyto otázky odpoví.
Mara: Jedna věc, na kterou jsem nadšená, je, že teď můžeme testovat v prostředí, které je jako produkční prostředí, kde je aplikace skutečně spuštěná. Funkční testy, jako jsou testy uživatelského rozhraní, mají v tomto kontextu smysl. Můžeme je spustit ve fázi testování kanálu.
Amita: Souhlasím. Stejný pracovní postup můžeme udržovat, pokud spustíme automatizované testy uživatelského rozhraní ve stejné fázi, ve které spouštím ruční testy. Automatizované testy nám ušetří čas a umožní mi soustředit se na použitelnost.
Tim: Amita testuje web ze svého přenosného počítače s Windows, protože to je způsob, jak většina našich uživatelů navštíví tento web. Ale stavíme na Linuxu a pak nasadíme službu Aplikace Azure Service v Linuxu. Jak to zvládneme?
Mara: Skvělá otázka. Máme také na výběr, kde testy spouštíme. Můžeme je spustit:
- Na agentu: buď agent Microsoftu, nebo agent, který hostujeme
- Na testovací infrastruktuře: buď místně, nebo v cloudu
Naše stávající testovací fáze zahrnuje jednu úlohu. Tato úloha nasadí web do služby App Service z agenta Linuxu. Můžeme přidat druhou úlohu, která spouští testy uživatelského rozhraní z agenta Windows. Agent windows hostovaný Microsoftem je již nastavený na spouštění testů Selenium.
Andy: Znovu, pojďme se držet toho, co víme. Pojďme použít agenta Windows hostovaného Microsoftem. Později můžeme spustit stejné testy z agentů, kteří používají macOS a Linux, pokud potřebujeme další pokrytí testů.
Plán
Mara: Dobře. Tady je přehled toho, co uděláme:
- Spuštění testů uživatelského rozhraní Selenium z agenta Windows hostovaného Microsoftem
- Testy načítají webový obsah z aplikace, která běží ve službě App Service, ve fázi testování .
- Spusťte testy ve všech prohlížečích, které podporujeme.
Andy: Budu pracovat s Amitou na tomhle. Amita, sejdeme se zítra ráno. Než se setkáme, rád bych udělal trochu výzkumu.
Amita: Skvělá! Uvidíte se.
Vytvoření funkčního testovacího plánu
Viděli jsme, jak tým rozhodne, jak bude implementovat první funkční testy. Pokud váš tým právě začíná do svého kanálu začlenit funkční testy (nebo i v případě, že to už děláte), nezapomeňte, že vždy potřebujete plán.
Často, když někdo požádá členy týmu o svůj plán testování výkonnosti, je běžné, že odpoví seznamem nástrojů, které budou používat. Seznam nástrojů ale není plán. Musíte také zjistit, jak budou testovací prostředí nakonfigurovaná. Musíte určit procesy, které se mají použít, a určit, jak vypadá úspěch nebo selhání.
Ujistěte se, že váš plán:
- Bere v úvahu očekávání firmy.
- Bere v úvahu očekávání cílových uživatelů.
- Definuje metriky, které použijete.
- Definuje klíčové ukazatele výkonu, které budete používat.
Testování výkonu musí být součástí plánování hned od začátku. Pokud používáte scénář nebo panel Kanbanu, můžete zvážit, že máte v blízkosti oblasti, kde můžete naplánovat testovací strategii. V rámci plánování iterace by měly být zvýrazněny mezery v testovací strategii. Je také důležité zjistit, jak budete monitorovat výkon po nasazení aplikace, a ne jen změřit výkon před jeho vydáním.