how develop test scripts using top 5 most popular test automation frameworks
Když se začnete učit o automatizaci testů, musíte narazit na pojem „rámec automatizace testů“. Možná se některým z vás tento termín znepříjemňuje a začíná mít pocit, že je to něco, čemu je těžké porozumět a ještě obtížněji se to provádí.
Tento výukový program je napsán s cílem pomoci vám co nejjednodušší pochopit rámce automatizace testů. Přečtěte si všechny návody v tomto '' Série výukových programů pro automatizaci zde .
Testovací automatizační rámec (ve velmi jednoduchém jazyce) je „soubor pravidel“. Pravidla nám pomáhají psát skripty takovým způsobem, který má za následek „nižší údržbu“.
Abychom zcela porozuměli konceptu rámce, musíme se nejprve naučit, jak píšeme jednoduché skripty, a poté, jak na nich implementovat rámec.
V automatizaci testů píšeme skripty. Skriptování je v zásadě asi tři „A“:
- DOHODA
- AKCE
- TVRZENÍ
Níže jsou uvedeny podrobnosti o každém A s příklady:
# 1.DOHODAnebo identifikace objektu
Objekty (tlačítka, rozevírací nabídky atd.) Identifikujeme buď podle jejich ID, názvu nebo podle názvu okna atd.
V případě webové aplikace identifikujeme podle ID uživatele, nebo XPath nebo CSS nebo podle názvu třídy atd. Pokud nic nefunguje, pak identifikujeme objekty pomocí souřadnic myši (není to však spolehlivá metoda identifikace objektu)
Vezměte tento příklad Selenium WebDriver (s C #), ve kterém identifikujeme objekty pomocí id. (Webová aplikace)
IWebElement txtServer = _webDriver.FindElement(By.Id('tfsServerURL'));
Další příklad z MS Coded UI (desktopová aplikace)
WinButton btnAdd = new WinButton(calWindow); btnAdd.SearchProperties[WinButton.PropertyNames.Name] = 'Add';
Po identifikaci tyto objekty uspořádáme nebo uložíme do UIMaps nebo Object Repository, abychom je mohli znovu použít v našich skriptech. Proto se tento krok nazývá Uspořádání.
#dva.AKCEna identifikovaném objektu
Když jsou objekty identifikovány, provádíme na nich nějaké akce buď myší nebo klávesnicí.Napříkladbuď klikneme, nebo dvakrát klikneme, nebo na něj umístíme ukazatel myši nebo někdy přetáhneme. Někdy píšeme na textová pole. V tomto druhém kroku tedy probereme jakýkoli druh akce, kterou s těmito objekty provádíme.
Příklad 1 : (Selenium WebDriver s C #)
txtServer.Clear(); txtServer.SendKeys(“Some sample text”);
Příklad 2 : (MS Coded UI with C #)
Mouse.Click(buttonAdd);
# 3.TVRZENÍ
Tvrzení v podstatě kontroluje objekt s nějakým očekávaným výsledkem. Například pokud na kalkulačce stiskneme 2 + 3, na obrazovce by se mělo zobrazit 5. V tomto případě je náš očekávaný výsledek 5. Tento koncept je již vysvětlen v našem prvním kurzu.
Zde uvádíme příklad tvrzení:
Assert.AreEqual('5', txtResult.DisplayText);
Téměř každý skript napsaný v automatizaci testů obsahuje tyto tři věci: Uspořádání, Akce a Assertion.
Nyní se podívejte na kompletní skript, který obsahuje všechny tyto kroky. Skript otevře kalkulačku, stiskne 1 + 6 a poté zkontroluje, zda obrazovka zobrazuje 7 nebo ne.
Příklad A:
[TestMethod] [TestMethod] public void TestCalculator() { var app = ApplicationUnderTest.Launch('C:\Windows\System32\calc.exe'); //Object identification part (ARRANGEMENT) //----*Calculator Window----*// WinWindow calWindow = new WinWindow(app); calWindow.SearchProperties[WinWindow.PropertyNames.Name] = 'Calculator'; calWindow.SearchProperties[WinWindow.PropertyNames.ClassName] = 'CalcFrame'; //----*Button1 ----*// WinButton btn1 = new WinButton(calWindow); btn1.SearchProperties[WinButton.PropertyNames.Name] = '1'; //----*Button Add ----*// WinButton btnAdd = new WinButton(calWindow); btnAdd.SearchProperties[WinButton.PropertyNames.Name] = 'Add'; //----*Button 6 ----*// WinButton btn6 = new WinButton(calWindow); btn6.SearchProperties[WinButton.PropertyNames.Name] = '6'; //----*Button Equals ----*// WinButton btnEquals = new WinButton(calWindow); btnEquals.SearchProperties[WinButton.PropertyNames.Name] = 'Equals'; //----*Text Box Results----*// WinText txtResult = new WinText(calWindow); txtResult.SearchProperties[WinText.PropertyNames.Name] = 'Result'; //(ACTIONS Part) // Click '1' button Mouse.Click(btn1); // Click 'Add' button Mouse.Click(btnAdd); // Click '6' button Mouse.Click(btn6); // Click 'Equals' button Mouse.Click(btnEquals); //evaluate the results (ASSERTIONS) Assert.AreEqual('7', txtResult.DisplayText, “Screen is not displaying 7); //close the application app.Close(); }
Co se naučíte:
- Co je s tím skriptem?
- V automatizaci testů je pět populárních frameworků:
- # 1. Lineární rámec:
- # 2. Rámec modularity:
- # 3. Rámec řízený daty:
- # 4. Rámec na základě klíčových slov:
- # 5. Hybridní testovací automatizační rámec:
- Závěr
- Doporučené čtení
Co je s tím skriptem?
Skript je snadno srozumitelný a doufám, že ve výše uvedeném příkladu získáte koncept tří „A“. Ale s tímto scénářem není vše v pořádku.
Tento skript neumožňuje snadnou údržbu. Znovu si vezměte příklad kalkulačky, pokud musíme psát testovací případy každé funkce kalkulačky, bude tam mnoho testovacích případů. Pokud existuje 10 testovacích případů a v každém testu musíme definovat stejný objekt, pak pokud dojde ke změně názvu nebo id objektu, musíme změnit identifikační část objektu v 10 testovacích případech.
Například, vezměte příklad tlačítka PŘIDAT ve skriptu.
WinButton btnAdd = new WinButton(calWindow); btnAdd.SearchProperties[WinButton.PropertyNames.Name] = 'Add';
Řekněme, že tento řádek se používá v 10 testovacích případech. Nyní v další verzi kalkulačky vývojář změnil název tlačítka z „Přidat“ na „Plus“. Nyní, když spustíme naše testovací případy, selžou a musíme změnit výše uvedený řádek na tento v 10 testovacích případech.
btnAdd.SearchProperties[WinButton.PropertyNames.Name] = 'Plus';
Tento testovací případ tedy musíme vylepšit. Při kódování bychom se měli řídit slavným principem DRY. DRY znamená „Neopakujte se“. Část pro identifikaci objektu bychom měli napsat takovým způsobem, že objekt by měl být identifikován pouze na jednom místě a měl by být volán všude.
Podívejte se na vylepšený skript.
Příklad B:
//defining the objects outside the script and only once. ApplicationUnderTest app = null; public WinWindow calWindow { get { WinWindow _calWindow = new WinWindow(app); _calWindow.SearchProperties[WinWindow.PropertyNames.Name] = 'Calculator'; _calWindow.SearchProperties[WinWindow.PropertyNames.ClassName] = 'CalcFrame'; return _calWindow; } } public WinText txtResult { get { WinText _txtResult = new WinText(calWindow); _txtResult.SearchProperties[WinText.PropertyNames.Name] = 'Result'; return _txtResult; } } //making functions for similar kind of tasks public void ClickButton(string BtnName) { WinButton button = new WinButton(calWindow); button.SearchProperties[WinButton.PropertyNames.Name] = BtnName ; Mouse.Click(button); } public void AddTwoNumbers(string number1, string number2) { ClickButton(number1); ClickButton('Add'); ClickButton(number2); ClickButton('Equals'); } //Test case becomes simple and easy to maintain. [TestMethod] public void TestCalculatorModular() { app = ApplicationUnderTest.Launch('C:\Windows\System32\calc.exe'); //do all the operations AddTwoNumbers('6', '1'); //evaluate the results Assert.AreEqual('7', txtResult.DisplayText, “screen is not displaying 7”); //close the application app.Close(); }
Ve výše uvedeném příkladu jsme oddělili calWindow a txtResult objekty a přesuňte je nahoru, aby je bylo možné použít v různých testovacích metodách. Definovali jsme je pouze jednou a můžeme je použít v tolika testovacích případech, kolik chceme.
Také jsme vytvořili dvě funkce. ClickButton () který přijímá název tlačítka a klikne na něj a AddTwoNumbers () který vezme libovolné dvě čísla a přidá je pomocí klikněte na tlačítko funkce uvnitř.
V okamžiku, kdy začneme „vylepšovat“ náš kód a zajišťujeme jeho opětovné použití a údržbu, znamená to, že využíváme jakýkoli automatizační rámec. Nyní je to zajímavé.
Viz také=> Proč potřebujeme rámec pro automatizaci testů?
Existují pět populárních frameworků v automatizaci testů :
- Lineární
- Modularita
- Data řízena
- Klíčové slovo řízeno
- Hybridní
Nyní vysvětlíme každý rámec pomocí jeho charakteristik.
# 1. Lineární rámec:
Vlastnosti
- Ve skriptech je definováno vše, co souvisí se skriptem.
- Nezajímá se o abstrakci a duplikaci kódu
- Záznam a přehrávání obvykle generují lineární kód
- Snadné začít
- Noční můra údržby.
Přečtením výše uvedených 5 charakteristik lineárního rámce s nimi můžeme snadno spojit náš příklad A. Tento příklad v zásadě používá lineární rámec, ve skriptu je definována věc související se skriptem. The okno volání a TxtResult jsou definovány uvnitř skriptu. Skript se nestará o abstrakci a duplikaci kódu. Je to také noční můra údržby, jak jsem vysvětlil dříve.
Proč bychom tedy měli používat tento rámec?
Tento rámec lze použít v projektech malého rozsahu, kde není mnoho obrazovek uživatelského rozhraní. Když poprvé použijeme jakýkoli automatizační nástroj, obvykle vygeneruje kód v lineárním tvaru. Takže se můžeme dozvědět, jaký kód generuje automatizační nástroj pro konkrétní akce. Kromě těchto důvodů byste se tomuto skriptování měli vyhnout.
=> Podívejte se zde na příklad lineárního a klíčového rámce s příkladem QTP.
# 2. Rámec modularity:
Vlastnosti
- Objekty jsou definovány jednou a opakovaně použitelné ve všech testovacích metodách.
- Pro jednotlivé funkce jsou vytvářeny malé a bodové metody
- Testovacím případem je sbírka těchto malých metod a opakovaně použitelných objektů
- To nám umožňuje psát udržovatelný kód.
Čtením výše uvedených charakteristik můžeme spojit náš příklad B s těmito charakteristikami. V tomto příkladu jsme vytvořili abstrakci pohybem calWindow nahoru a definovat jej uvnitř vlastnosti, kterou lze použít všude. Vytvořili jsme dvě malé a nezávislé funkce zvané ClickButton () a AddTwoNumbers () . Spojením těchto dvou malých funkcí vytvoříme náš finální skript, který testuje funkčnost kalkulačky „Přidat“.
Výsledkem je snazší údržba. Pokud dojde k nějaké změně v uživatelském rozhraní kalkulačky, musíme to změnit pouze ve funkcích. Naše skripty zůstanou beze změny. Tento rámec se velmi používá v automatizaci. Slavný rámec Page Object (který se používá se selenem) je také jakousi modularitou. Distribuujeme celou webovou aplikaci na samostatné stránky. Tlačítka, rozbalovací nabídky a zaškrtávací políčka každé stránky jsou definována uvnitř třídy této stránky. Pokud na webu dojde ke změně, musíme to změnit pouze v této třídě stránek a ostatní stránky zůstanou nedotčené. Výsledkem je lepší údržba a snadnější čitelnost skriptů.
Jedinou nevýhodou tohoto rámce je, že vyžaduje dobré objektově orientované koncepty a silné rozvojové dovednosti. Pokud takové máte, tento rámec se velmi doporučuje.
# 3. Rámec řízený daty:
Vlastnosti:
- Testovací data (vstupní a výstupní hodnoty) jsou oddělena od skriptu a uložena v externích souborech. Může to být soubor CSV, tabulka aplikace Excel nebo databáze.
- Když je skript spuštěn, jsou tyto hodnoty vybrány z externích souborů, uloženy v proměnných a nahradit pevné hodnoty, pokud jsou k dispozici.
- Opravdu užitečné na místech, kde je třeba spustit stejný testovací případ s různými vstupy.
Příklad C.:
Chceme spustit testovací případ přidání se třemi různými vstupy.
Data jsou
7 + 2 = 9
5 + 2 = 7
3 + 2 = 5
nejlepší anime stránky ke sledování anime
Tato data (jak vstup, tak výstup) jsme uložili do externího souboru CSV.
[DataSource('Microsoft.VisualStudio.TestTools.DataSource.CSV', '|DataDirectory|\data.csv', 'data#csv', DataAccessMethod. Sequential ), DeploymentItem('TestCalc\data.csv'), TestMethod] public void TestCalculatorDataDrivsen() { app = ApplicationUnderTest.Launch('C:\Windows\System32\calc.exe'); //do all the operations AddTwoNumbers(FromCSV.ADD1, FromCSV.ADD2); //evaluate the results Assert.AreEqual(FromCSV.Sum, txtResult.DisplayText); //close the application app.Close(); }
Ve výše uvedeném skriptu definujeme náš zdroj dat v horní části skriptu, což je soubor .csv.
Zadali jsme cestu k tomuto souboru CSV a řekli skriptu, aby jej analyzoval „Postupně“. To znamená, že skript se spustí tolikrát, kolik řádků je v souboru CSV. V našem případě se skript spustí třikrát. V každém běhu přidá dvě čísla definovaná v prvních dvou sloupcích a ověří, že součet těchto dvou čísel odpovídá číslu přítomnému ve třetím sloupci.
Tento rámec má různé výhody. Všechny hodnoty jsou uloženy mimo skript, takže pokud v příštím sestavení dojde ke změně, musíme pouze změnit data v externím souboru a skript zůstane neporušený.
Druhou výhodou je, že stejný skript lze spustit pro různé vstupy. Vezměte si příklad ERP, ve kterém musíte otestovat registraci 100 zaměstnanců. Můžete napsat jeden skript a uložit jména a další data týkající se zaměstnanců do externího souboru. Spustíte jeden skript, který se spustí 100krát. Pokaždé s jinými údaji zaměstnanců. Můžete snadno zjistit, na jakých datech skript registraci zaměstnance nedokáže. Další výhodou bude, když provádíte negativní testování.
=> Podívejte se na příklad datově řízeného a hybridního rámce s příkladem QTP.
# 4. Rámec na základě klíčových slov:
Vlastnosti:
- Data i akce jsou definovány mimo skript.
- Vyžadovalo to vývoj klíčových slov pro různé typy akcí.
- Funkčnost, kterou musíme testovat, je napsána krok za krokem v tabulkové formě pomocí klíčových slov, která vyvíjíme, a testovacích dat. Tuto tabulku ukládáme do externích souborů, stejně jako datově řízený rámec.
- Skript analyzuje tuto tabulku a provede odpovídající akce.
- Umožňuje do určité míry být součástí automatizace manuálnímu testeru, který neví o kódování.
Příklad D:
Data (např. 1 + 3 = 4) a akce (např. Kliknutí, vymazání atd.) Jsme definovali v souboru aplikace Excel ve formě tabulky.
Skript se stane něčím podobným (níže uvedený kód je napsán pouze pro účely porozumění)
[TestMethod] public void TestCalculator() { app = ApplicationUnderTest.Launch('C:\Windows\System32\calc.exe'); Table tb = ReadFromExcel(); Foreach(WinRow row in tb) { WinCell Window = row.Cells[“Window”]; WinCell Control = row.Cells[“Control”]; WinCell Action = row.Cells[“Action”]; WinCell Arguments = row.Cells[“Arguments”]; UITestControl c = GetControl(Control.Text,Window.Text); If(Action.Text == “Click”) Mouse.Click (c); If (Action.Text == “Clear”) c.Clear(); if(Action.Text == “Verify Result”) Assert.AreEqual(c.Text, Arguments.Text) //….and so on } }
Výše uvedený skript je pouze analyzátorem souboru aplikace Excel. Analyzuje soubor aplikace Excel řádek po řádku a hledá klíčová slova pro provedení příslušných akcí. Pokud najde klíčové slovo „Click“, klikne na definovaný objekt. Pokud najde „Ověřit výsledek“, provede tvrzení.
Existuje několik výhod používání rámce řízeného klíčovými slovy.
První výhodou je, že tento rámec je velmi užitečný v těch scénářích, kde jsou velké šance na změny v testovacích případech. Pokud se některý krok v testovacím případě změní, nemusíme se kódu dotýkat. Musíme pouze aktualizovat soubor aplikace Excel a skript bude aktualizován.
Můžete definovat všechny své skripty v souboru aplikace Excel a předat tento soubor aplikace Excel ručním testerům, aby přidali nové skripty nebo aktualizovali ty stávající. Tímto způsobem se manuální testeři mohou také stát součástí automatizace testů, protože nepotřebují nic kódovat. V případě potřeby pouze aktualizují tento soubor aplikace Excel a skripty se automaticky aktualizují.
Druhou výhodou je, že se váš skript stává nástrojově nezávislým. Skripty můžete udržovat v souboru aplikace Excel a pokud potřebujete v určitém okamžiku změnit svůj automatizační nástroj, můžete jej snadno změnit napsáním analyzátoru aplikace Excel v jiném nástroji.
Nevýhodou tohoto rámce je, že musíte vymyslet klíčová slova pro různé typy akcí. Ve velkých projektech bude tolik klíčových slov, které si musíte zapamatovat a uspořádat skripty a klíčová slova. To se v určitém okamžiku stává těžkopádným úkolem.
V některých složitých scénářích, kde objekty nelze snadno identifikovat a musíme použít souřadnice myši a další techniky, není tento rámec příliš užitečný.
Klíčové slovo řízené je stále oblíbeným rámcem pro mnoho testerů automatizace. Robotický rámec by Google je populární rámec založený na klíčových slovech, který je podporován aktivní komunitou.
# 5. Hybridní testovací automatizační rámec:
Vlastnosti:
- Kombinace dvou nebo více výše uvedených technik, která vychází z jejich silných stránek a minimalizuje jejich slabosti.
- Rámec může používat modulární přístup spolu s rámcem založeným na datech nebo na klíčových slovech.
- Rámec může pomocí skriptů provádět některé úkoly, jejichž implementace v čistě klíčovém přístupu může být příliš obtížná.
Jednoduše řečeno, hybridní framework, použijte kombinaci výše zmíněných technik. Můžeme použít rámec založený na datech, který má také modulární povahu. U některých testovacích případů můžeme použít přístup založený na klíčových slovech a pro zbývající můžeme použít modulární. Takže kdykoli kombinujeme dvě nebo více technik uvedených v tomto článku, ve skutečnosti používáme hybridní přístup.
Závěr
Doufám, že rámec automatizace testů pro vás již není děsivým výrazem. Snažil jsem se co nejjednodušší vysvětlit nejpopulárnější rámce.
Rámečky jsou zde, aby vám usnadnily život. Pomáhají vám psát udržovatelné a spolehlivé skripty. Bez použití rámců je pole automatizace testů noční můrou. Při každé malé změně v aplikaci musíte změnit svůj kód na stovkách míst.
Pochopení těchto rámců je tedy nezbytností pro každého testera, který chce ochutnat automatizaci testů.
V našem další tutoriál v této sérii se naučíme „Provádění a reportování Test Automation“.
Pokud mi něco v tomto článku chybělo nebo pokud potřebujete položit jakoukoli otázku, neváhejte se zeptat v sekci komentáře.
Výukový program PREV # 4 | DALŠÍ výukový program č. 6
Doporučené čtení
- Rámečky QTP - Rámečky automatizace testů - Příklady klíčových slov a lineární rámce - Výukový program QTP # 17
- Příkazy automatizace SeeTest: Podrobné vysvětlení s příklady
- 10 nejoblíbenějších nástrojů RPA pro automatizaci robotických procesů v roce 2021
- Jak se liší plánování testů pro ruční a automatizované projekty?
- Nejoblíbenější rámce automatizace testů s klady a zápory každého z nich - výuka selenu č. 20
- Bezskriptový testovací automatizační rámec: Nástroje a příklady
- Automatizace testů - je to specializovaná kariéra? Mohou normální testeři provádět také automatizaci?
- 25 nejlepších rámců a nástrojů pro testování automatizace Java (část 3)