data driven parameterized testing with spock framework
Prozkoumejte způsoby psaní testů založených na datech nebo parametrizovaných testech pomocí Spock Framework:
V tomhle Série výukových lekcí Spock zdarma , prozkoumali jsme vše kolem Testování jednotek ve Spocku a v našem předchozím tutoriálu otestujte příslušenství, tvrzení a zprávy.
V tomto kurzu se pokusíme pochopit, co jsou to parametrizované testy a jak můžete využít vestavěné funkce Spocku k dosažení testování na základě dat.
Začněme!!
Podívejte se na videonávod
Co se naučíte:
- Co jsou parametrizované testy?
- Psaní parametrizovaných testů se Spockem
- Životní cyklus bloku „kde“
- tipy a triky
- Závěr
- Doporučené čtení
Co jsou parametrizované testy?
Pro každého, kdo pracoval s automatizačními / jednotkovými testy, není testování založené na datech nový termín.
Parametrizované testy nejsou nic jiného, ale jedná se o jakýkoli druh testů, které sdílejí stejnou logiku provádění a liší se pouze ve vstupních datech a výsledcích v některých případech.
Příklad: Předpokládejme, že máte aplikaci Kalkulačka, abyste mohli úplně otestovat funkčnost, možná budete chtít spustit testy proti jiné vstupní sadě.
Příklad: Záporné hodnoty, zlomková čísla, normální celá čísla, celá čísla blížící se maximálnímu povolenému rozsahu atd. Bez ohledu na to, jaké vstupní hodnoty máte, chcete spustit stejnou logiku provádění.
Dalším dobrým důvodem pro psaní parametrizovaných testů je, že netestuje pouze šťastnou cestu, ale také testuje chybovou cestu nebo negativní scénáře.
Příklad: Předpokládejme, že existuje aplikace, která vrací, zda je daná přípona souboru platná nebo ne. Testy založené na datech mohou vývojáři rychle umožnit provádět testy podporovaných přípon souborů a případných chybových scénářů nebo testů negativního vstupu.
Nyní můžete tradičně uvažovat o psaní nebo kopírování testů pro více vstupních hodnot, ale to není správný nebo chytrý způsob, jak dosáhnout tohoto druhu provedení testu. Jakmile se ve vaší aplikaci začne zvyšovat počet testů, bude obtížné tyto testy udržovat.
Psaní parametrizovaných testů se Spockem
Kde: blok
Blok where v testu Spock je blok, který obsahuje data pro parametrizovaný test. Může volitelně obsahovat vstupní i očekávané výstupní hodnoty. Důležitým bodem k tomuto bloku je, že by to měl být poslední blok v testu Spock.
Poté lze kombinovat se všemi ostatními bloky, jako je daný, kdy a poté, ale měl by být posledním blokem.
Podívejme se na příklad, abychom tomu lépe porozuměli
Budeme používat aplikaci kalkulačky, která vezme 2 vstupní parametry a vrátí součet dodaných vstupů. Budeme psát parametrizovaný test dodávající více vstupů a očekávaných hodnot.
def 'sample parameterized test'() input2
Ve výše uvedeném ukázce kódu vidíte následující:
- Blok „kde“, který obsahuje data pro spuštění testu.
- Blok „kde“ je poslední blok testu.
- „Kde“ je kombinováno s ostatními bloky, tj. Zadáno, kdy a poté.
- Reprezentace dat je speciální formát zvaný datové tabulky, kterému se podrobně věnujeme v následujících částech tohoto tutoriálu.
- Řádek záhlaví dat je v podstatě vlastnosti / vstupní proměnné, které lze přímo použít v testu. Např. Podívejte se na prohlášení v bloku „kdy“, kde jsme přímo použili vstup1 a vstup2 jako vstupní parametry, aniž byste je výslovně definovali.
Používání datových tabulek
Zkusme nyní podrobně porozumět datovým tabulkám. Každý řádek datové tabulky představuje data pro jednotlivý scénář (provedení testu).
Podle konvence, tj. Před vstupními hodnotami předchází jeden kanál („|“), zatímco výstupním hodnotám předchází dvojitý kanál („||“). To nemá žádný logický význam, ale je to konvence a zlepšuje čitelnost. Oba níže uvedené příklady tedy platí.
input1 |input2 |expectedResult 10 |15 |25 -4 |6 |2 input1 |input2 || expectedResult 10 |15 || 25 -4 |6 || 2
Řádek záhlaví, jak je znázorněno výše, má název pro každý z parametrů dodávaných jako data k testování. Zde je důležité si uvědomit, že tyto názvy parametrů by se neměly střetávat s žádnými existujícími lokálními / globálními proměnnými v testu, jinak bude chyby při kompilaci vyřešit názvy proměnných.
Při používání datových tabulek je důležité si uvědomit, že jsou vyžadovány minimálně 2 sloupce. Pokud potřebujete pouze jeden sloupec, pak je řešením prázdný sloupec s hodnotami podtržítka jako níže.
input1 ||_ 10 ||_ -4 ||_
Výhodou tohoto formátu je jednoduchost, čitelnost a rozšiřitelnost. Přidání nového datového vstupu je stejně jednoduché jako přidání nového řádku s datovými hodnotami.
Dalším bodem, který je zde třeba poznamenat, je, že datové tabulky lze použít k uložení jakéhokoli typu proměnných, tříd, objektů, výčtů atd., Díky nimž je ještě výkonnější. Protože groovy je volitelně psaný jazyk, pokud není zadán explicitní typ, znamenají proměnné v datové tabulce v závislosti na typu poskytovaných dat.
Uvidíme další Příklad použití datových tabulek se seznamem řetězců jako vstupem a výstupem jako počet prvků v řetězci.
def 'sample parameterized test with list data type'() when: def actualCount = input1.size() then: actualCount == expectedCount where: input1
Ve výše uvedeném příkladu si můžete všimnout, že jsme zadali vstup jako seznam polí řetězců a výstup je velikost tohoto seznamu polí. Poskytuje tedy velkou flexibilitu mít vstupní data různých typů.
Můžete také jednoduše zmínit všechny výrazy, které vracejí data příslušného typu vstupu a používají se také přímo v datových tabulkách.
Životní cyklus bloku „kde“
U testů obsahujících vzorky bloků a dat ve formě datových tabulek představuje každý řádek dat jedno provedení testovací metody.
Například, pokud existuje 5 řádků dat a test obsahuje bloky „dané“ a „kdy“, pak se pro takový datový řádek testovací bloky provedou jednou. Celkově tedy proběhne celkem 5 provedení testovací metody.
tipy a triky
Podívejme se na několik tipů a triků pro parametrizované testy při práci s těmito datovými tabulkami.
# 1) Zobrazení výsledků provádění jednotlivých řádků samostatně. Jak jsme viděli v sekci životního cyklu, pro každý řádek dat existuje jedno provedení testovacího kódu. Aby se tyto řádky nebo výsledky zobrazily samostatně pro každý takový řádek, lze pro takové testy použít poznámku „@Unroll“.
Zkusme to pochopit na příkladu:
Budeme používat stejnou aplikaci kalkulačky se 3 sadami vstupních dat dodávaných do testované metody.
jak vytvořit kopii pole java
def 'sample parameterized test'() -20
Bez anotace „@Unroll“ se podívejme, jak vypadá výsledek v terminálu (stejně jako zprávy založené na html). U tohoto druhu výstupu je obtížné zjistit, která sada vstupu způsobila selhání testu.
Nyní se podívejme, jak je výstup testu hlášen samostatně pro každý řádek po přidání anotace „@Unroll“ do testovací metody (která má jako vstup dat datové tabulky).
#dva) Nyní pojďme pochopit, jak k těmto testům založeným na datech přidat smysluplné informace (namísto některých automaticky připojených indexů jako na výše uvedeném snímku obrazovky).
Můžeme použít zástupné symboly pro vstupní a výstupní vlastnosti (podle datové tabulky) a pak můžeme vidět hodnoty naplněné v názvech testů daty z datových tabulek.
Pojďme použít stejný příklad a aktualizovat název testu, abychom získali data ze vstupu a očekávaného výstupu, jak je uvedeno v tabulkách dat:
@Unroll def 'result of adding #input1 & #input2 should be #expectedResult'() given: def app = new CalculatorApp() when: def resultSum = app.add(input1, input1) then: resultSum == 2 * input1 where: input1
Nyní se podívejme, jak vypadá výstup v terminálu a v přehledech založených na HTML:
Jak zde vidíte, data ze vstupu a výstupu se nyní zobrazují spolu s názvy testů, když se provádějí. Tímto způsobem je řešení problémů a ladění mnohem jednodušší, protože jasně naznačuje, jaký vstup způsobil selhání nebo špatné chování testu.
Závěr
V tomto kurzu jsme se dozvěděli o psaní parametrizovaných testů pomocí Spock framework. Také jsme diskutovali o různých funkcích datových tabulek a o tom, jak je lze použít.
Podívejte se na náš nadcházející tutoriál, abyste věděli, jak používat Mocks and Stubs with Spock !!
Výukový program PREV | DALŠÍ výuka
Doporučené čtení
- Psaní testů jednotek pomocí Spock Framework
- Spock Interview Otázky s odpověďmi (nejoblíbenější)
- Spock pro integraci a funkční testování se selenem
- Spock Mocking and Stubbing (Příklady s videonávody)
- Výukový program Spock: Testování pomocí Spocka a Groovyho
- Rámec řízený daty v selenu WebDriver pomocí POI Apache
- Jak provádět testování na základě dat pomocí nástroje TestComplete
- Jak funguje testování založené na datech (příklady QTP a selenu)