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
Report
Transcript 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