Při vývoji moderního software máme dnes tu výhodu, že můžeme použít automatizační nástroje k provádění testů. Na rozdíl od dřívějších možností, kdy manuální testeři museli sady skriptů a testovací data zadávat jen a pouze ručně.
Účelem
automatizačního testování však není zcela opustit manuální testování, ale
minimalizovat počty testovacích případů, které se musí provádět ručně a tím
šetřit ekonomické zdroje. Automatické testování nám umožňuje například rychle a
pohodlně otestovat dlouhé formuláře s opakujícími se daty což šetří čas testerů
a zvyšuje rychlost provádění testů. Ovšem před samotným vývojem automatizačních
testů je třeba se zamyslet nad tím, kdy má automatizace smysl a položit si
některé otázky:
- opakují se testy výrazně,
aby bylo třeba uvažovat o jejich automatizaci?
- běží na několika
hardwarových a softwarových platformách?
- bude se jednat o testy,
které jinak vyžadují mnoho úsilí a času při ručním testování?
- nelze provádět testy
ručně efektivněji?
Automatizace má smysl
- u regresních testů, kde
ověřujeme, že nedošlo k zásahu do stávající funkčnosti (například po přidání
modulu nebo nové funkce).
- u komparačních testů.
- u nefunkčních testů
(např. zátěžové testy apod.)
- u testů řízených daty,
kdy se mění pouze vstupní a výstupní data.
Základní rozdíly v nejčastěji používaných technologiích Selenium
Selenium IDE
|
Selenium RC
|
Selenium Webdriver
|
Velmi snadné použití a instalace
|
Komplikovaná konfigurace
|
Méně komplikovaná konfigurace než
RC
|
Znalosti programování nejsou
vyžadovány (i když některé znalosti HTML pomáhají)
|
Vyžaduje zkušenosti s
programováním
|
Vyžaduje zkušenosti s
programováním
|
Běží pouze ve Firefoxu a Chrome
|
Podporuje všechny prohlížeče
|
Podporuje všechny prohlížeče
|
Podporuje nahrávání/přehrávání
|
Nepodporuje nahrávání/přehrávání
|
Nepodporuje nahrávání/přehrávání
|
Core engine je JavaScript
|
Core engine je založen na
JavaScriptu
|
Interaktivní interakce s
prohlížečem
|
Pro spuštění skriptů nevyžaduje
žádný server
|
Vyžaduje spuštění serveru
Selenium RC ke spuštění skriptů
|
Nevyžaduje žádný server a může
spouštět skripty přímou komunikací s prohlížeči
|
Nemá podporu pro podmíněné
operátory podmíněné a smyčky
|
Může provádět operace za pomoci
podmíněných operátorů a smyček
|
Může provádět operace za pomoci
podmíněných operátorů a smyček
|
Používá se pouze jako
prototypovací nástroj
|
Používá se k psaní pokročilých
skriptů
|
Používá se k psaní pokročilých
skriptů
|
Nepodporuje „listeners“
|
Nepodporuje „listeners“
|
Podporuje „listeners“ – (Event
Listeners)
|
Není objektově orientovaný
|
Jeho API je mírně objektově
orientované a nadbytečné
|
Jeho API je čistě objektově
orientované a kompaktní
|
Má nejpomalejší provádění
|
Má pomalejší provádění než
WebDriver, ale rychlejší než IDE
|
Má nejrychlejší provádění
|
Nemá rozhraní API
|
Má jednoduché a malé API
|
Má komplexní a velké API
|
Nepodporuje testování aplikací
iOS / Android
|
Nepodporuje testování aplikací
iOS / Android
|
Podporuje testování aplikací iOS
/ Android
|
Nelze pohybovat kurzorem myši
|
Nelze pohybovat kurzorem myši
|
Schopen pohybovat kurzorem myši
|
Má vestavěnou nápovědu a generuje
výsledky testů
|
Má vestavěný generátor výsledků
testu
|
Nemá zabudovaný mechanismus,
který generuje soubor s výsledky testů
|
Lze exportovat
testovací skripty do formátu použitelného v RC a WebDriver
|
Neplatí
|
Neplatí
|
Při testování na systémech CCA využíváme nejčastěji Selenium IDE v prohlížeči Mozilla Firefox. I přestože je tato technologie vhodná především k pilotním automatizovaným testům, poskytuje možnost vytvářet automatické testy i těm kolegům, kteří nemohou vytvářet složitější testy pomocí některého z programovacích jazyků. Pomocí Selenium IDE testujeme webová rozhraní na projektech, kde jsou vyžadovány pravidelné regresní testy, jako jsou například zdravotnické registry eReg.
Při práci v
Selenium IDE je třeba využívat i Nástroje pro vývojáře (klávesa F12), kde si
pomocí průzkumníku lze dohledat konkrétní názvy a parametry fragmentů stránky,
které se využívají pro obsluhu testu.
V samotném projektu při vývoji testu zadáváme některé
parametry ručně:
Command –
definice akce, kterou chceme v daném kroku scénáře vykonat (otevření URL, čtení
či zápis hodnoty, kontrola hodnoty, vykonání události...)
Target –
definice toho, na čem chceme Command vykonat (např stránka či prvek stránky).
Prvek stránky lze specifikovat například pomocí id, name, CSS selectoru, Xpath...
Value –
definuje případ, kdy Command vyžaduje nějakou hodnotu, tak zde se musí napsat
Výhodou testů
napsaných v Selenium IDE je, že nám prostřednictvím Menu File / Export Test
Case (Export Test Suite) vygeneruje programový kód pro testovací frameworky
různých jazyků. Nyní jsou podporovány jazyky Java, Rubby, C# a Python. Toto nám
umožní zakomponovat kód do naší aplikace a případně ho zobecnit či jakkoliv
upravit.
Další dobrou
vlastností je možnost je spouštění testů z příkazové řádky, pomocí parametru:
selenium-side-runner -c "browserName=firefox"
/path/to/your-project.side --output-directory /path/to/your-results/. Pokud existuje více souborů, side, které
chceme spustit, lze použít zástupný znak (např. /Path/to/*.side).
Testy v Selenium
lze psát také pomocí Selenium webdriver. Pro tuto technologii je základem
framework. Můžeme použít například framework unittest (pro python), ale
existuje jich celá řada:
Definujeme si v
něm třídu, která zdědí vlastnost TestCase. Vytvoříme klíčové funkce pro ovládání testu a naprogramujeme test,
viz. níže uvedený příklad:
class
PasswordTest(unittest.TestCase):
@classmethod
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.get("http://hlinezp.cca.cz")
assert "Přihlášení" in
self.driver.title
print("TC na kontrolu hesla")
def tearDown(self):
print("Ukoncuji test...")
self.driver.quit()
# Test na chybně
zadané uživatelské jméno a heslo
def test_Kontrola_Delky_Hesla(self):
print("Test na chybne zadane
uzivatelske jmeno a heslo")
username =
self.driver.find_element_by_id("Login1_UserName")
password =
self.driver.find_element_by_id("Login1_Password")
username.send_keys("bla")
password.send_keys("bla")
TlacitkoPrihlasit =
self.driver.find_element_by_id("Login1_LoginButton").click()
self.driver.implicitly_wait(10)
error_message =
self.driver.find_element_by_css_selector('td[style = "color: Red;"]')
if error_message:
assert error_message.text ==
"Nesprávné jméno nebo heslo."
print (error_message.text,"-
text nalezen - test1 - OK")
else:
exit()
print("Not FOUND")
Výhody a nevýhody použití technologie Selenium webdrive
- Pořizovací náklady. Se zavedením Selenia se nepojí žádné přímé náklady.
- Podpora různých prohlížečů. Testy je možné spouštět na více prohlížečích.
- Podpora různých programovacích jazyků. Selenium má vlastní programovací jazyk Selenese, ale testy je možné psát i v C#, Javě, JavaScriptu, PHP, Pythonu nebo dalších jazycích.
- Různé způsoby tvorby testů. Seleniové skripty je možné nahrávat z webového prohlížeče i vytvářet manuálně, případně oba přístupy kombinovat.
- Propojení s dalšími nástroji. Selenium se neváže na konkrétní reportovací nástroj nebo další aspekty testovacího frameworku. Je integrované s různými populárními nástroji, jako je Hudson, SauceLabs nebo QMetry.
- Nejedná se o komplexní řešení. Pro plně efektivní automatizaci potřebuje frameworky třetích stran a další nástroje.
- Vyžaduje znalosti programování. Na rozdíl od některých jiných komerčních nástrojů vyžaduje obsáhlé technické znalosti od členů testovacího týmu.
- Absence správy testů. Selenium neobsahuje žádné nástroje na správu testů, testovací skripty jsou ukládané jako jednoduché soubory bez atributů. Organizace jednotlivých skriptů vyžaduje použití externích nástrojů (SVN, Git).
- Obtížná editace nativních skriptů. Skripty psané v Selenium nejsou příliš intuitivní z hlediska čitelnosti a je tedy relativně obtížné je editovat.
- Paralelní zpracování. Testy nelze spouštět paralelně za použití jediného stroje.
Autor: Tomáš Stěhule
CCA Group a.s.
tomas.stehule@cca.cz
Žádné komentáře:
Okomentovat