200 likes | 405 Views
Selenium testování GUI. 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. Pro koho je Selenium IDE?. Pro testery Automatizace testování podle testovacích scénářů
E N D
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
Pro koho je Selenium IDE? • Pro testery • Automatizace testování podle testovacích scénářů • Testovací scénáře v jednoduché HTML podobě • Pro vývojáře • 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
Testování více prohlížečů • 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> • 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ě • Okno firefox pluginu – jeden test • Pomocí testrunneru – více testů (testsuite) • Automaticky • 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ů • V jUnit Java metoda, např. public void login() • V HTML nelze (jak na to viz. další snímek) • Raději vytvářejte hodně malých testů, než málo velkých a složitých testů • 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 //table[2]/tr[1]/td[4] • Dobře: clickAndWait //td[text() = 'Založit Nový SP'] Výsledkem jsou samopopisné, dobře udržovatelné testy
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?
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>
Úskalí 1 – formuláře • Formuláře – Recorder nenahrává odeslání formuláře stisknutím klávesy <Enter> • Použijte submitForm(formId) command
Úskalí 2 – práce s iframes • Práce s iframes - Recorder nenahrává selectFrame command • 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
Kvízová otázka XPath • V aplikaci máme zobrazenou tuto tabulku • Potřebujeme klepnout na odkaz Smazat u uživatele Jan Hasič. Při nahrávání v Selenium IDE recorder nahrál tento command: • click //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)? • 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'; • Ř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 • Buď registrovat certifikát u CA nebo pro testy spustit aplikaci na http • Pokud aplikace javascriptem otevře popup okno s názvem _new, recorder nenahraje odpovídající selectWindow _new command • 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á • 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 • 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) • Bez účasti dodavatele • S účastí dodavatele
Odkazy • Selenium homepage • Selenium IDE • Selenium Remote Control (used by jUnit sel. tests) • Selenium-RC and Continuous Integration • Ajax testing with Selenium using waitForCondition
Otázky nakonec • Nebojte se a ptejte se