Menü Bezárás

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:

  1. Saját, beépített kulcsszavak (BuilIn): ezeket a Robotban mindig lehet használni.
  2. 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.
  3. 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.)
  4. 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égiaMi alapján keres?Példa
idWebelem idid:example
namename attributumname:example
identifierid vagy name attributumidentifier:example
classWebelem classclass:example
tagTag neve.tag:div
xpathXPath kifejezés.xpath://div[@id=”example”]
cssCSS selector.css:div#example
domDOM kifejezésn.dom:document.images[5]
linkHivatkozás (link) pontos szövegelink:The example
partial linkHivatkozás (link) szövegrészletepartial link:he ex
jqueryjQuery kifejezés.jquery:div.example
defaultKulcsszó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.

  1. 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ő

Szőke Ármin
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.
Vissza