27. února 2020

Technologie Selenium nám pomáhá efektivněji testovat

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ě:

Následující 3 proměnné jsou pro definici jednotlivých dílčích kroků klíčové:

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