IT Selenium testování GUI špička v každém směru Co je Selenium IDE Automatické testování aplikace jako černé skříňky Minimální konfigurace Firefox plugin Selenium IDE
Download ReportTranscript IT Selenium testování GUI špička v každém směru Co je Selenium IDE Automatické testování aplikace jako černé skříňky Minimální konfigurace Firefox plugin Selenium IDE
3 IT Selenium testování GUI špička v každém směru Co je Selenium IDE Automatické testování aplikace jako černé skříňky Minimální konfigurace Firefox plugin Selenium IDE Viz. tutorial video Náš vlastní google search IT3 špička v každém směru Pro koho je Selenium IDE? Pro testery Pro vývojáře IT3 špička v každém směru Automatizace testování podle testovacích scénářů Testovací scénáře v jednoduché HTML podobě Smoke testy buildovacího procesu (např. Ant skriptů) Integrační testování jako součást nočních buildů Testování Ajax částí aplikace a GUI Nativní formát testu Jednoduché HTML Srozumitelné i pro nevývojáře <tr> <td>type</td> <td>jusername</td> <td>vjohn</td> </tr> <tr> <td>type</td> <td>jpassword</td> <td>vjohn</td> </tr> <tr> <td>clickAndWait</td> <td>login</td> <td></td> </tr> IT3 špička v každém směru Testování více prohlížečů IT3 špička v každém směru Jeden test lze spustit proti Exploreru Firefoxu Základní commandy Často používané příkazy type click save link=Jdi na seznam clickAndWait – klepne a počká, než se nahraje stránka select – výběr hodnoty z rolovací nabídky <select> 3 IT špička v každém směru label=Hasič assertTextPresent – test skončí, pokud selže verifyTextPresent – test pokračuje dál, i když selže Další commandy i s nápovědou najdete v Selenium IDE* okně Formát commandů: JMENO SELECTOR [HODNOTA] Tlačítko k nezaplacení - Find Možnosti spouštění testů Ručně Automaticky IT3 špička v každém směru Okno firefox pluginu – jeden test Pomocí testrunneru – více testů (testsuite) Pomocí ANTu Pomocí jUnit Ostatní jazyky Ruby Python PHP … Best practices Toto je asi nejdůležitější část prezentace! Provádějte reuse částí testů Raději vytvářejte hodně malých testů, než málo velkých a složitých testů V jUnit Java metoda, např. public void login() V HTML nelze (jak na to viz. další snímek) Testy by měli testovat co nejmenší uživatelský scénář Je snazší vypátrat chybu, pokud mi 4 testy z 50ti existujících selžou, než pokud mi selže 1 test ze 2 existujících. Používejte XPath s uživatelským textem jako selectory Špatně: clickAndWait Dobře: clickAndWait //table[2]/tr[1]/td[4] //td[text() = 'Založit Nový SP'] Výsledkem jsou samopopisné, dobře udržovatelné testy IT3 špička v každém směru Kvízová otázka Uvažujme, že máme sadu 10ti Seleniových testů v HTML formátu, login sekvence se na začátku každého testu opakuje Jak by šlo docílit re-use login sekvence v těchto testech? Možné řešení: Použijte JSP kontejner pro testy a jsp:include <jsp:include page="include/login.jsp"/> IT3 špička v každém směru <tr> <td>type</td> <td>jusername</td> <td>vjohn</td> </tr> <tr> <td>type</td> <td>jpassword</td> <td>vjohn</td> </tr> <tr> <td>clickAndWait</td > <td>//input[@value=" Prihlasit se"]</td> <td></td> </tr> Seskupování testů testsuite.html - HTML soubor, který linkuje více testů <html> <head> <title>Testsuite Example</title> </head> <body> <table cellpadding="1" cellspacing="1" border="1"> <tbody> <tr> <td>Etar tests</td> </tr> </tbody> <tr><td><a href="Login.html">Login</a></td></tr> <tr><td><a href="NovySP.html">Nový SP</a></td></tr> </table> </body> </html> IT3 špička v každém směru Úskalí 1 – formuláře Formuláře – Recorder nenahrává odeslání formuláře stisknutím klávesy <Enter> IT3 špička v každém směru Použijte submitForm(formId) command Úskalí 2 – práce s iframes Práce s iframes - Recorder nenahrává selectFrame command IT3 špička v každém směru Nutné ručně přidat selectFrame(frameId) Operace v iframe selectFrame(relative=top) Úskalí 3 – timeout problém ClickAndWait spadne na timeout Může se stát, pokud odezva aplikace je velmi rychlá Stejný problém i s ostatním XxxAndWait commandy Použijte waitForElementPresent Namísto <tr> <td>clickAndWait</td> <td>save</td> <td></td> </tr> <tr> <td>type</td> <td>name</td> <td>Pavel</td> </tr> IT3 špička v každém směru Použijte <tr> <td>click</td> <td>save</td> <td></td> </tr> <tr> <td>waitForElementPresent</td> <td>name</td> <td></td> </tr> <tr> <td>type</td> <td>name</td> <td>Pavel</td> </tr> Kvízová otázka XPath V aplikaci máme zobrazenou tuto tabulku Jméno Akce Tom Řidič Smazat Jan Hasič Smazat Potřebujeme klepnout na odkaz Smazat u uživatele Jan Hasič. Při nahrávání v Selenium IDE recorder nahrál tento command: špička v každém směru //tr[3]/td[2]/a Jak nahradit XPath na odkaz Smazat, aby fungoval nezávisle na pořadí řádku s Janem Hasičem v tabulce (a byl srozumitelnější, co se děje)? IT3 click Click //tr[td[text()='Jan Hasič']]/td[2]/a Úskalí 4 – mizení testrunneru Aplikace může následujícím Javascriptem zrušit Selenium testrunner window parent.window.location = 'http://www.seznam.cz'; IT3 špička v každém směru Řešení – použijte multiWindow = true Další úskalí Při použití https a neplatném certifikátu se test zastaví na varovném hlášení prohlížeče Pokud aplikace javascriptem otevře popup okno s názvem _new, recorder nenahraje odpovídající selectWindow _new command špička v každém směru Buď v aplikaci používejte vlastní jména (např. mywindow) nebo doplňte do testů po nahrání selectWindow _new command Pokud ve firefox použijete zapamatovanou dříve napsanou hodnotu formuláře (form input field history), recorder to nezaznamená IT3 Buď registrovat certifikát u CA nebo pro testy spustit aplikaci na http Při nahrávání testu vždy hodnotu ručně pište (nepoužívejte form history) Jak vnořovat testsuite? Z jedné testsuite nelze zavolat jinou testsuite Řešení - TestSuiteGenerator IT3 špička v každém směru Z adresářové struktury testů automaticky vytvoří testsuite.html Parametrem volání je root složka s testy Ukázka z praxe Testy pro přerušení servisního požadavku (projekt etar) IT3 špička v každém směru Bez účasti dodavatele S účastí dodavatele Odkazy Selenium homepage IT3 špička v každém směru Selenium IDE Selenium Remote Control (used by jUnit sel. tests) Selenium-RC and Continuous Integration Ajax testing with Selenium using waitForCondition Otázky nakonec IT3 špička v každém směru Nebojte se a ptejte se