Tesztautomatizálás Robot Framework segítségével
I. rész
Robot Framework bevezető
A Robot Framework az Apache License 2.0 alatt kiadott nyílt forráskódú szoftver, és hozzá kapcsolódó ökoszisztéma legtöbb könyvtára és eszköze is nyílt forráskódú. A keretrendszert eredetileg a Nokia Networks fejlesztette ki, és ma a Robot Framework Foundation támogatja.
A szakirodalomban gyakran RF-nek rövidítik a Robot Framework-öt és az egyszerűség kedvéért mi is rövidíteni fogjuk a nevet, de nem RF-ként, hanem Robot-ként fogunk hivatkozni az eszközre.
A Robot egy kulcsszó vezérelt teszttervező, tesztautomatizáló keretrendszer (Keyword Driven Testing). Külső könyvtárak (interfészek) segítségével több különböző technológián képes teszteket futtatni: Web, Swing, SWT, Windows GUI, adatbázisok, SSH, Telnet, API…
A Robot segítségével megvalósítható az adatvezérelt tesztautomatizálás is (Data Driven Testing).
A Robot szerkezete
A Robot generikus, alkalmazási és technológiafüggetlen keretrendszer, amely az alábbi moduláris architektúrával rendelkezik:
A Robotot „Tesztadat”-ok segítségével „programozhatjuk”. A tesztadatok könnyen átlátható, egyszerűen szerkeszthető táblázatos formátumot képviselő szövegállományok. A Robot a futtatás során feldolgozza, értelmezi ezeket, végrehajtja a teszteket, majd naplót és riportokat generál.
A fentiekből látszik, hogy „minden” tesztadat. A kulcsszavak, a tesztesetek, a változók és a tesztadatok is. Azt, hogy mit hogyan értelmez a robot a tesztadat szövegállományok szintaktikai elemzésével derül ki.
A Robot több különböző formátumot támogat tesztadat íráshoz:
- A táblázatos formátum meghatározható HyperText Markup Language (HTML) segítségével,
- tabulátorral elválasztott értékekkel (TSV: Olyan CSV állomány, ahol a határoló nem a , vagy a ; hanem a TAB),
- Plain text: Tabulátorral vagy | (pipeline)-al elválasztot szöveg
- “reStructuredText” (reST) szövegformátum.
A Robot általában nem képes közvetlenül kommunikálni a célrendszerrel. Például nem képes a weboldalon önállóan ráklikkelni egy linkre. A célrendszerrel való kommunikációt külső könyvtárak segítségével végzi el. Ilyen tesztkönyvtár például a webes alkalmazásokhoz a SeleniumLibrary.
Első tesztek
Ez az anyag a tabulátoros Plain text használatával mutatja be az alapokat. Ennek lényege, hogy a különböző tesztadatok közé TAB vagy minimum 4 szóköz karakter kerül. A félreértések elkerülése miatt innentől a „tesztadat írás” helyett a „kód írás” kifejezést használjuk.
A továbbiakban egy konkrét példán keresztül mutatjuk be a Robot használatát. Ennek előfeltétele a Robot Framework környezet megléte. A környezet összeállításához itt található útmutató:
A környezet a következőket tartalmazza:
- Python
- Robot Framework
- SeleniumLibrary
- AngularJSLibrary (ez csak akkor kellhet, ha Angularos alkalmazást szeretnénk tesztelni.
- Nokia/RED Editor
A Nokia RED használata nem szükséges, de megkönnyíti a munkát. Kiemeli, színezi a beírt szöveget és segíti a kódírást úgy, hogy kérésre felkínál kód lehetőségeket. A továbbiakban a leírások azt veszik alapul, hogy a RED telepítve van.
A tesztelendő alkalmazás
A http://automationpractice.com oldalt direkt abból a célból készítették, hogy ezen lehessen gyakorolni a tesztautomatizálást. Az oldal egy teljes, női ruhákat áruló webshop-ot szimulál. A tesztjeinket erre az oldalra fogjuk elkészíteni.
A teszteket Chrome böngészőben fogjuk futtatni, de nem nehéz más böngészők használata sem. A SeleniumLibrary leírásában megtalálható, hogyan:
http://robotframework.org/SeleniumLibrary/SeleniumLibrary.html#Open%20Browser
Első lecke: Teszteset → Weboldal elérése
Az első Robot tesztesettel megpróbáljuk megnyitni a Chrome böngészőben a kiszemelt webalkalmazás fő oldalát.
Projekt létrehozás RED-ben: Webshop_test
- New Project/Robot Framework/Robot Project Next
- Project Name: Webshop_test (Itt még beállítható a projekt mappája is, ha a default nem megfelelő) Finish
A Project Explorer-ben megjelenik a Webshop_test projekt. (Ha nincs ez a képernyőn, akkor: Windows/Perspective/Reset Perspective)
Új munkaállomány létrehozása projektben: weboldal_megnyitas.robot
- File/New/File
- a projekt kiválasztása, majd állománynév megadása és Finish
A Robot futtatható, teszteseteket tartalmazó állományainak plain text esetén a kiterjesztése .robot
Külső könyvtárak meghatározása: SeleniumLibrary. Ennek a segítségével érjük majd el a böngészőn belüli elemeket. A létrehozott weboldal_megnyitas.robot szövegállományba kell beírni a következő sorokat (és menteni 😊 ).
*** Settings *** Library SeleniumLibrary
A Robotban a különböző típusú információkat különböző adat-blokkokban adjuk meg. A blokkok sorrendje tetszőleges. A *** Settings *** -el jelöljük azt a blokkot, ahol többek között a külső könyvtárakat határozhatjuk meg.
Robot kód formázása
A fenti példában a Library után TAB vagy minimum 4 szóköz áll A Robot a kulcssavak után és a paraméterek között TAB-ot (minimum 4 szóközt) használ. Erre azért van szükség, mert a kulcsszavak is tartalmazhatnak szóközt.
Ha valahonnan Copy-Paste módszerrel Robot kódot másolunk, figyelni kell, hogy megmaradtak-e az elválasztó TAB-ok.
Teszteset lépés: Nyisd meg a Chrome-ban a megadott weboldalt.
Megvalósítás: Az előző sorok után írjuk be még a következő kódrészt. (Szebb, ha az előző után még-egy sort kihagyunk.):
*** Test Cases ***
Open Test Link
SeleniumLibrary.Open Browser http://automationpractice.com Chrome
SeleniumLibrary.Maximize Browser Window
- A Test Case blokk tartalmazza a teszteseteket
- A Test Case blokkban az első teszteset neve Open Test Link.
- A teszteset lépései a teszteset sorai. A Robotban-ban a lépéseket a teszteset neve alatt egy TAB-bal beljebb kell kezdeni.
- A böngésző megnyitása és a megnyitott böngészőablak teljes-képernyősre méretezésére a SeleniumLibrary tartalmaz kulcsszavakat. A SeleniumLibrary használható kulcsszavai: http://robotframework.org/SeleniumLibrary/SeleniumLibrary.html
- Ha egy könyvtárat behúzunk a Settings blokkban, akkor a könyvtár kulcsszavait a következő formában mindig elérhetjük: könyvtárnév.kulcsszó
Kulcsszó vs Keywords
A teszteseteket kulcsszavak segítségével lehet megírni. Az előző példában az Open Browser és a Maximize Browser Window a SeleniumLibrary kulcsszavai voltak. A Robot kulcsszavai 4 helyről származhatnak:
- Saját, beépített kulcsszavak (BuilIn): ezeket a Robotban mindig lehet használni.
- Standard könyvtárak kulcsszavai: A Robottal együtt (egybecsomagolva) terjesztik. Használatukat jelezni kell a Settings blokkban a Library kulcsszó segítségével.
- Külső könyvtárak: Ezeket a használat előtt telepíteni kell. A telepítés után ugyanúgy lehet használni, mint a standard könyvtárakat. (Ilyen a SeleniumLibrary.)
- Saját kulcsszavak: Magunk és készíthetünk kulcsszavakat már meglévő kulcsszavak felhasználásával, vagy például Python programként. (Saját kulcsszó készítésről lesz még szó később bővebben.)
A magyar „kulcsszó” talán félrevezető lehet, mert nem feltétlenül 1 szóról van szó, hanem egy teljes mondatról. Egy teljes mondat felel meg egy kulcsszónak. Ez lehetőséget ad arra, hogy a teszteseteink az üzlet számára is értelmes elnevezéseket kapjanak. A teszteseteink nevei lehetnek akár magyarul (ékezetekkel) is értelmes címek, pl. így:
*** Test Cases *** Alkalmazás megnyitása SeleniumLibrary.Open Browser http://automationpractice.com Chrome SeleniumLibrary.Maximize Browser Window
Tesztesetek futtatása
A RED-ben a zöld nyílra klikkelve el lehet indítani a tesztesetet. Ha az indítás előtt nem mentettünk, akkor szólni a fog a mentés miatt.
Ha parancssorból szeretnénk futtatni a tesztet, akkor előbb be kell lépni a tesztet tartalmazó könyvtárba, majd a következő paranccsal megtehető a futtatás.
robot -T -d reports weboldal_megnyitas.robot
- A -T kapcsoló timstamp-et készít a riport állományokhoz, hogy a későbbi eredmény ne írja felül a mostanit.
- A -d kapcsoló után megadhatunk egy mappanevet, ahova a riportok kerülni fognak
- Az utolsó paraméterünk a tesztet tartalmazó állomány. (Ez nemcsak egy állomány lehet. Később nézünk példát teszteset-csoport futtatásra.)
Tesztfutás eredménye
- A Robot megnyitja a Chrome böngészőben az oldalt és teljes képernyősre állítja.
- A consol-on (RED-ben egy külön ablakban) megjelenik az eredmény.
- A reports mappában keletkezik három állomány:
- output.xml: XML formátumú teljes futási log
- report.html: Egy összefoglaló html oldal a futásról
- log.html: Egy részletes futási log, html formában
Második lecke: Teszteset → Sign in gomb megnyomása
SeleniumLibrary: locatorok
Ahhoz, hogy weboldalon objektumokkal tudjunk műveleteket végezni, valahogyan azonosítani kell tudnunk ezeket az objektumokat. A webelemek azonosításához az előző leckében behúzott SeleniumLibrary-t tudjuk használni.
A SeleniumLibraryban a webelemeket azonosítására locator-okat használ. Egy locator egy szabályt jelent, hogy hogyan lehet megtalálni egy adott elemet.
A SeleniumLibrary-ban van néhány beépített szabályrendszer, stratégia web-objektumok azonoítására.
Stratégia | Mi alapján keres? | Példa |
id | Webelem id | id:example |
name | name attributum | name:example |
identifier | id vagy name attributum | identifier:example |
class | Webelem class | class:example |
tag | Tag neve. | tag:div |
xpath | XPath kifejezés. | xpath://div[@id=”example”] |
css | CSS selector. | css:div#example |
dom | DOM kifejezésn. | dom:document.images[5] |
link | Hivatkozás (link) pontos szövege | link:The example |
partial link | Hivatkozás (link) szövegrészlete | partial link:he ex |
jquery | jQuery kifejezés. | jquery:div.example |
default | Kulcsszóspecifikus alapértelmezett viselkedés. | default:example |
A legtöbb webalkalmazás elég komplex, így valószínűleg az id, tag, name, class locatorok-at nem fogjuk tudni használni tesztautomatizáláshoz. A cikksorozatban az Xpath locator stratrégiát fogjuk használni. Ennek a mintájára felépíthető a css, dom, jquery stratégia is.
Az XPath kifejezések egy külön cikk lehetne, itt most nem térünk ki rá. (Xpath alapok pl.: https://www.w3schools.com/xml/xpath_intro.asp)
Amit még ki fogunk használni, hogy ha a lokátor // vagy (// -el kezdődik, akkor a lokátor XPath kifejezésnek tekinthető. Más szóval, a //div használata egyenértékű az explicit xpath://div használatával.
A SeleniumLibrary ad lehetőséget saját stratégia, azaz saját locator készítésére is. (Ezzel a módszerrel ebben a számban Őri Róbert: Dinamikus objektumelérés Robot Frameworkben cikke foglalkozik.)
Ha a Chrome vagy Firefox böngészőben megnyitjuk a tesztelendő oldalt és F12-t nyomunk, akkor előugrik egy fejlesztői eszköztár, ami hasznos segítség az XPath-ok kitalálásához.
Megfelelő XPath
A Bejelentkezés gombra pl. felírhatjuk a következő XPath-t: //a[contains(text(), ’Sign in’)]
Egy elemre általában többféleképpen is megadhatunk XPath-t. Például működne a //a[@class=’login’] is. A sorozat későbbi részében bemutatásra kerül, hogy hogyan lehet a tesztautomatizálásba bevonni a manuális tesztelőket, akik nem értenek az automatizáláshoz. Ehhez viszont szükséges az, hogy az XPath lehetőleg megfeleljen a következőknek:
- Egyértelműen egy elemet azonosítson be.
- Lehetőleg ne tartalmazzon sorrendiségre utaló számokat, pl.: //li[2]
- Ha szeretnénk, hogy a manuális tesztelők is tudjanak a későbbiekben automatizált esetet készíteni, akkor a képernyőn megjelenő labelek, felíratok szerepeljenek az XPath-ban.
- A legtöbb esetben a webalkalmazás logikáját figyelembe tudjuk venni. Az alkalmazás logikájára építve tudunk majd saját locator-t készíteni.
- A relatív elérések használata ajánlott (Pl. A legkevesebb esetben van szükség a gyökértől indulni. Pl.: /html/akarmi kerülendő)
- Ha több elemnek felírható úgy az XPath-a, hogy csak egy részletben különböznek, akkor erre lehet paraméteres kulcsszót vagy locator-t készíteni. (Lásd később)
„Sign in” megnyomása
A Test Cases blokkba írunk egy újabb tesztesetet az előző után.
Press Sign in
SeleniumLibrary.Click Element //a[contains(text(), ’Sign in’)]
Ha most újra futtatjuk a teszteket, akkor látni fogjuk, a böngészőben megnyitja a webshopot, teljes képernyőre igazítja a böngészőt, majd megnyílik a regisztrációra és belépésre alkalmas aloldal.
Akkor is működött volna az egylépéses tesztünk, ha lehagyjuk a „SeleniumLibrary.”-ot a lépés elejéről. A Robot megvizsgálta volna, hogy a Click Element kulcsszó melyik könyvtárban van meghatározva. Azzal. hogy elé írjuk a könyvtárat, megkönnyítjük Robot dolgát. Ráadásul így mi is írhatnánk hasonló névvel kulcsszót, ekkor az itt használt forma kötelező lenne, csak így tudná a robot megkülönböztetni a kettőt.
A példánk működött volna a „//a[contains(text(), ’Sign in’)]” helyett a „link:Sign in” locatoros megadással is. Az életben ritka, hogy ennyire egyszerűen adható meg egy elem. Az „életet szimulálva” maradunk az XPath-os megoldásnál. (Ilyen esetben a valóságban gyorsabb és szebb a link locator startégiát használni!)
A teszteset akkor valódi teszteset, ha tartalmaz ellenőrzést is. Miután megnyomtuk a Sign in gombot (igazából linket), nézzük meg, hogy megjelent-e az oldalon a „AUTHENTICATION” felírat. A Press Sign in teszteset következő sora:
Page Should Contain AUTHENTICATION
Kulcsszavak
A Robot legfontosabb tulajdonsága, hogy kulcsszóvezérelt. Eddig is használtunk olyan kulcsszavakat (pl. Open Browser, Clic Element), amiket a rendszer vagy az interfész adott. A Robot igazi ereje akkor használható ki, ha saját kulcsszavakat készítünk. Saját kulcsszót készíthetünk úgy, hogy a már meglévők segítségével alkotunk újat, vagy úgy is, hogy programozunk. A programozásra csak nagyon különleges esetben van szükség.
Kulcsszavakat *** Keywords *** blokkon belül lehet készíteni. A kulcsszavak szerkezete megegyezik a tesztesetek szerkezetével. Egy elkészült kulcsszó felhasználható más kulcsszavakban és tesztesetekben is.
- példa: Kezdőoldal megnyitása saját keyworddel:
*** Keywords *** Open Start Page SeleniumLibrary.Open Browser http://automationpractice.com Chrome SeleniumLibrary.Maximize Browser Window
2. példa: Navigációs sávon egy elemre klikkelni
Ez a példa tartalmaz egy eddig nem használt elemet, a paraméterezést. A terv az, hogy olyan kulcsszót írunk, aminek használat közben megadhatjuk, hogy Contact us vagy Sign in elemre klikkeljen-e. A Keywords blokkban maradva:
Click Navigation [Arguments] ${nav_element} SeleniumLibrary.Click Element div[@class=’nav’]//a[contains(text(), ’${nav_element}’)]
Az [Arguments] részben lehet felsorolni TAB-okkal, milyen paramétereket szeretnénk használni a kulcsszóban. Többféle paramétertípus létezik a Robotban, mi most csak a szöveges paraméterrel foglalkozunk. A szöveges paraméter formája: ${paraméternév}. A Click Element sorban aztán a konkrét ’Sign in’ szöveg helyett ezt a paramétert írtuk be.
Hogyan módosul a Test Case szekció?
*** Test Cases *** Open Automationpractice Page Open Start Page SeleniumLibrary.Title Should Be My Store Press Sign in Click Navigation Sign in Page Should Contain AUTHENTICATION
A Click Navigation kulcsszó után adtuk meg, hogy melyik elemet szeretnénk megnyomni: Sign in.
Előretekintés
Ez az első rész csak egy egyszerű „kezdjük el” típusú betekintést ad a Robot Framework használatába. Nem egy teljes tananyag, csak egy kedvcsináló. A sorozat következő részeiben terv szerint a következő témákról lesz még szó:
- tesztstruktúra kialakítása,
- data driven test megvalósítása,
- tesztadatok menedzselése
- együttműködés a fejlesztéssel (CI, verziókezelés, folyamatok, módszerek, technikai együttműködés)
- manuális tesztelés Robottal?
A szerző
-
Tanácsadó
2000-ben szereztem meg tanári diplomámat matematika-számítástechnika szakon. 2006-ig tanárként dolgoztam. Az Avon Cosmetics-ben kezdtem teszteléssel foglalkozni, később banki és telekommunikációs projektekben vettem részt senior tesztelőként, majd tesztvezető- ként. Tanácsadóként oktatás, tesztelési folyamat kialakítás, tesztelési módszertan írás, teszteszköz kiválasztás és bevezetés volt eddig a feladatom.