20
špička v každém směru IT 3 Selenium testování GUI

Selenium testování GUI

  • Upload
    eara

  • View
    83

  • Download
    3

Embed Size (px)

DESCRIPTION

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ářů - PowerPoint PPT Presentation

Citation preview

Page 1: Selenium testování GUI

špička v každém směru

IT3

Selenium testování GUI

Page 2: Selenium testování GUI

IT3

špička v každém směru

Co je Selenium IDE

Automatické testování aplikace jako Automatické testování aplikace jako černé skříňkyčerné skříňky

Minimální konfiguraceMinimální konfigurace Firefox plugin Selenium IDEFirefox plugin Selenium IDE

Viz. Viz. tutorialtutorial video video Náš vlastní google searchNáš vlastní google search

Page 3: Selenium testování GUI

IT3

špička v každém směru

Pro koho je Selenium IDE?

Pro testeryPro testery Automatizace testování podle testovacích scénářůAutomatizace testování podle testovacích scénářů Testovací scénáře v jednoduché HTML podoběTestovací scénáře v jednoduché HTML podobě

Pro vývojářePro vývojáře Smoke testy buildovacího procesu (např. Ant skriptů)Smoke testy buildovacího procesu (např. Ant skriptů) Integrační testování jako součást nočních buildůIntegrační testování jako součást nočních buildů Testování Ajax částí aplikace a GUITestování Ajax částí aplikace a GUI

Page 4: Selenium testování GUI

IT3

špička v každém směru

Nativní formát testu

Jednoduché HTMLJednoduché HTML Srozumitelné i Srozumitelné i

pro nevývojářepro nevývojáře

<tr><tr>

<td>type</td><td>type</td>

<td>jusername</td><td>jusername</td>

<td>vjohn</td><td>vjohn</td>

</tr></tr>

<tr><tr>

<td>type</td><td>type</td>

<td>jpassword</td><td>jpassword</td>

<td>vjohn</td><td>vjohn</td>

</tr></tr>

<tr><tr>

<td>clickAndWait</td><td>clickAndWait</td>

<td>login</td><td>login</td>

<td></td><td></td>

</tr></tr>

Page 5: Selenium testování GUI

IT3

špička v každém směru

Testování více prohlížečů

Jeden test lze spustit protiJeden test lze spustit proti ExploreruExploreru FirefoxuFirefoxu

Page 6: Selenium testování GUI

IT3

špička v každém směru

Základní commandy

Často používané příkazyČasto používané příkazy typetype clickclick

savesave link=Jdi na seznamlink=Jdi na seznam

clickAndWait – klepne a počká, než se nahraje stránkaclickAndWait – klepne a počká, než se nahraje stránka select – výběr hodnoty z rolovací nabídky <select>select – výběr hodnoty z rolovací nabídky <select>

label=Hasičlabel=Hasič assertTextPresent – test skončí, pokud selžeassertTextPresent – test skončí, pokud selže verifyTextPresent – test pokračuje dál, i když selževerifyTextPresent – test pokračuje dál, i když selže

Další commandy i s nápovědou najdete v Selenium IDE* Další commandy i s nápovědou najdete v Selenium IDE* okněokně

Formát commandů: JMENO SELECTOR [HODNOTA]Formát commandů: JMENO SELECTOR [HODNOTA] Tlačítko k nezaplacení - FindTlačítko k nezaplacení - Find

Page 7: Selenium testování GUI

IT3

špička v každém směru

Možnosti spouštění testů

RučněRučně Okno firefox pluginu – jeden testOkno firefox pluginu – jeden test Pomocí testrunneru – více testů (testsuite)Pomocí testrunneru – více testů (testsuite)

AutomatickyAutomaticky Pomocí ANTuPomocí ANTu Pomocí jUnitPomocí jUnit Ostatní jazykyOstatní jazyky

RubyRuby PythonPython PHPPHP ……

Page 8: Selenium testování GUI

IT3

špička v každém směru

Best practices

Toto je asi nejdůležitější část prezentace!Toto je asi nejdůležitější část prezentace! Provádějte reuse částí testůProvádějte reuse částí testů

V jUnit Java metoda, např. public void login()V jUnit Java metoda, např. public void login() V HTML nelze (jak na to viz. další snímek)V HTML nelze (jak na to viz. další snímek)

Raději vytvářejte hodně malých testů, než málo velkých a Raději vytvářejte hodně malých testů, než málo velkých a složitých testůsložitých testů Testy by měli testovat co nejmenší uživatelský scénář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 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.selžou, než pokud mi selže 1 test ze 2 existujících. Používejte XPath s uživatelským textem jako selectoryPoužívejte XPath s uživatelským textem jako selectory

Špatně: clickAndWaitŠpatně: clickAndWait //table[2]/tr[1]/td[4]//table[2]/tr[1]/td[4] Dobře: clickAndWaitDobře: clickAndWait //td[text() = 'Založit Nový SP']//td[text() = 'Založit Nový SP']

Výsledkem jsou samopopisné, dobře udržovatelné testyVýsledkem jsou samopopisné, dobře udržovatelné testy

Page 9: Selenium testování GUI

IT3

špička v každém směru

Kvízová otázka

Uvažujme, že máme sadu Uvažujme, že máme sadu 10ti Seleniových testů v 10ti Seleniových testů v HTML formátu, login HTML formátu, login sekvence se na začátku sekvence se na začátku každého testu opakujekaždého testu opakuje

Jak by šlo docílit re-use login Jak by šlo docílit re-use login sekvence v těchto testech?sekvence v těchto testech?

<tr><tr>

<td>type</td><td>type</td>

<td>jusername</td><td>jusername</td>

<td>vjohn</td><td>vjohn</td>

</tr></tr>

<tr><tr>

<td>type</td><td>type</td>

<td>jpassword</td><td>jpassword</td>

<td>vjohn</td><td>vjohn</td>

</tr></tr>

<tr><tr>

<td>clickAndWait</<td>clickAndWait</td>td>

<td>//<td>//input[@value="Prihlasit input[@value="Prihlasit se"]</td>se"]</td>

<td></td><td></td>

</tr></tr>

Možné řešení: Použijte Možné řešení: Použijte JSP kontejner pro testy a JSP kontejner pro testy a jsp:includejsp:include

<jsp:include <jsp:include page="include/login.jsp"/>page="include/login.jsp"/>

Page 10: Selenium testování GUI

IT3

špička v každém směru

Seskupování testů

testsuite.html - HTML soubor, který linkuje více testůtestsuite.html - HTML soubor, který linkuje více testů<html><html> <head><head> <title>Testsuite Example</title><title>Testsuite Example</title> </head></head><body><body> <table cellpadding="1" cellspacing="1" border="1"><table cellpadding="1" cellspacing="1" border="1"> <tbody><tbody> <tr><tr> <td>Etar tests</td><td>Etar tests</td> </tr></tr> </tbody></tbody> <tr><td><a href="Login.html">Login</a></td></tr><tr><td><a href="Login.html">Login</a></td></tr> <tr><td><a href="NovySP.html">Nový SP</a></td></tr><tr><td><a href="NovySP.html">Nový SP</a></td></tr> </table></table></body></body></html></html>

Page 11: Selenium testování GUI

IT3

špička v každém směru

Úskalí 1 – formuláře

Formuláře – Recorder nenahrává odeslání formuláře Formuláře – Recorder nenahrává odeslání formuláře stisknutím klávesy <Enter>stisknutím klávesy <Enter> Použijte submitForm(formId) commandPoužijte submitForm(formId) command

Page 12: Selenium testování GUI

IT3

špička v každém směru

Úskalí 2 – práce s iframes

Práce s iframes - Recorder nenahrává Práce s iframes - Recorder nenahrává selectFrameselectFrame commandcommand Nutné ručně přidatNutné ručně přidat

selectFrame(frameId)selectFrame(frameId) Operace v iframeOperace v iframe selectFrame(relative=top)selectFrame(relative=top)

Page 13: Selenium testování GUI

IT3

špička v každém směru

Úskalí 3 – timeout problém

ClickAndWait spadne na timeoutClickAndWait spadne na timeout Může se stát, pokud odezva aplikace je velmi rychláMůže se stát, pokud odezva aplikace je velmi rychlá Stejný problém i s ostatním XxxAndWait commandyStejný problém i s ostatním XxxAndWait commandy Použijte waitForElementPresentPoužijte waitForElementPresent

NamístoNamísto PoužijtePoužijte

<tr><tr>

<td>clickAndWait</td><td>clickAndWait</td>

<td>save</td><td>save</td>

<td></td><td></td>

</tr></tr>

<tr><tr>

<td>type</td><td>type</td>

<td>name</td><td>name</td>

<td>Pavel</td><td>Pavel</td>

</tr></tr>

<tr><tr>

<td>click</td><td>click</td>

<td>save</td><td>save</td>

<td></td><td></td>

</tr></tr>

<tr><tr>

<td>waitForElementPresent</td><td>waitForElementPresent</td>

<td>name</td><td>name</td>

<td></td><td></td>

</tr></tr>

<tr><tr>

<td>type</td><td>type</td>

<td>name</td><td>name</td>

<td>Pavel</td><td>Pavel</td>

</tr></tr>

Page 14: Selenium testování GUI

IT3

špička v každém směru

Kvízová otázka XPath

V aplikaci máme zobrazenou tuto tabulkuV aplikaci máme zobrazenou tuto tabulku

Potřebujeme klepnout na odkaz Smazat u uživatele Jan Potřebujeme klepnout na odkaz Smazat u uživatele Jan Hasič. Při nahrávání v Selenium IDE recorder nahrál Hasič. Při nahrávání v Selenium IDE recorder nahrál tento command:tento command: click //tr[3]/td[2]/aclick //tr[3]/td[2]/a

Jak nahradit XPath na odkaz Smazat, aby fungoval Jak nahradit XPath na odkaz Smazat, aby fungoval nezávisle na pořadí řádku s Janem Hasičem v tabulce (a nezávisle na pořadí řádku s Janem Hasičem v tabulce (a byl srozumitelnější, co se děje)?byl srozumitelnější, co se děje)?

Click //tr[td[text()='Jan Hasič']]/td[2]/aClick //tr[td[text()='Jan Hasič']]/td[2]/a

JménoJméno AkceAkce

Tom ŘidičTom Řidič SmazatSmazat

Jan HasičJan Hasič SmazatSmazat

Page 15: Selenium testování GUI

IT3

špička v každém směru

Úskalí 4 – mizení testrunneru Aplikace může následujícím Javascriptem zrušit Selenium Aplikace může následujícím Javascriptem zrušit Selenium

testrunner windowtestrunner window

parent.window.location = parent.window.location = ''http://www.seznam.czhttp://www.seznam.cz';'; Řešení – použijte multiWindow = trueŘešení – použijte multiWindow = true

Page 16: Selenium testování GUI

IT3

špička v každém směru

Další úskalí

Při použití https a neplatném certifikátu se test zastaví na varovném Při použití https a neplatném certifikátu se test zastaví na varovném hlášení prohlížečehlášení prohlížeče

Buď registrovat certifikát u CA nebo pro testy spustit aplikaci na httpBuď registrovat certifikát u CA nebo pro testy spustit aplikaci na http Pokud aplikace javascriptem otevře popup okno s názvem _new, Pokud aplikace javascriptem otevře popup okno s názvem _new,

recorder nenahraje odpovídající recorder nenahraje odpovídající selectWindow _new commandselectWindow _new command Buď v aplikaci používejte vlastní jména (např. mywindow) nebo doplňte Buď v aplikaci používejte vlastní jména (např. mywindow) nebo doplňte

do testů po nahrání do testů po nahrání selectWindow _newselectWindow _new command command Pokud ve firefox použijete zapamatovanou dříve napsanou hodnotu Pokud ve firefox použijete zapamatovanou dříve napsanou hodnotu

formuláře (form input field history), recorder to nezaznamená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 Při nahrávání testu vždy hodnotu ručně pište (nepoužívejte form

history)history)

Page 17: Selenium testování GUI

IT3

špička v každém směru

Jak vnořovat testsuite?

Z jedné testsuite nelze zavolat jinou testsuiteZ jedné testsuite nelze zavolat jinou testsuite Řešení - TestSuiteGeneratorŘešení - TestSuiteGenerator

Z adresářové struktury testů automaticky vytvoří testsuite.htmlZ adresářové struktury testů automaticky vytvoří testsuite.html Parametrem volání je root složka s testyParametrem volání je root složka s testy

Page 18: Selenium testování GUI

IT3

špička v každém směru

Ukázka z praxe

Testy pro přerušení servisního požadavku (projekt etar)Testy pro přerušení servisního požadavku (projekt etar) Bez účasti dodavateleBez účasti dodavatele S účastí dodavateleS účastí dodavatele

Page 19: Selenium testování GUI

IT3

špička v každém směru

Odkazy

Selenium homepageSelenium homepage Selenium IDESelenium IDE Selenium Remote Control (used by jUnit sel. tests)Selenium Remote Control (used by jUnit sel. tests)

Selenium-RC and Continuous IntegrationSelenium-RC and Continuous Integration Ajax testing with Selenium using waitForConditionAjax testing with Selenium using waitForCondition

Page 20: Selenium testování GUI

IT3

špička v každém směru

Otázky nakonec

Nebojte se a ptejte se Nebojte se a ptejte se