Robot Framework tippek-trükkök sorozat
A sorozatról
A Robot Framework (RF) egy nagyszerű tesztautomatizáló [link1] keretrendszer, mi nagyon kedveljük, mert sokoldalú és szerintünk felveszi a versenyt a drága eszközökkel is. A cikksorozat nem csak azoknak szól, akik ezt használják tesztautomatizálásra, hanem mindenkinek, aki nap, mint nap szembesül a tesztautomatizálásban rejlő nehézségekkel. A gyakorlati részeket RF-ben mutatjuk be, de ezek is érthetőek lesznek annyira, hogy más eszközre is könnyen át lehessen ültetni.
Tesztadatok tesztautomatizálásnál
Sok helyen a tesztadatok-on csak azokat az adatokat értik, amik a tesztlépések során valamilyen bemeneti értékek. A tesztautomatizálásnál érdemes nagyobb halmazra gondolni, amikor tesztadatokról beszélünk:
- konfigurációs értékek (böngésző, operációs rendszer, tesztrendszer elérhetősége, kapcsolódási adatok…)
- tesztlépések bemeneti értékei
- elvárt eredmény értékek
- objektumok neve (pl.: terminál neve, fül title, input mező neve, link szövege, kép neve, ….)
- objektumok elérési leírása (pl.: xpath, css locator, objektum id, objektum tulajdonságok, …)
- menet közben megtalált objektumok aktuális tulajdonság értékei (pl.: szín, típus, számított érték, input mező aktuális értéke, aktív/inaktív, …)
Tesztautomatizálás esetében mindig a tervezés része a tesztadatok tárolási módjának a megszervezése. (Nagyon sok tervezési feladat van, ami a tesztadatokkal kapcsolatos, de most csak erről lesz szó.)
Tesztadatok tárolása
A Robot Framework nagyon rugalmas eszköz. Bármilyen tárolási módokat is választunk, azt (egyéb fejlesztés nélkül is) támogatja.
- Adatbázis
- Excel, CSV
- JSON
- XML
- Változók
- YAML
Tervbe van véve, hogy mindegyikről fogunk írni, de most, amit meg szeretnénk mutatni, az a YAML.
YAML
A YAML egy emberbarát, adatmegadási formátum. A legjobban a JSON-hoz hasonlít, csak itt az adatok egymásba ágyazottságát nem kapcsos zárójelekkel, hanem behúzással (egyenlő számú szóköz) jelezzük. Amit a JSON tud, azt a YAML is tudja. Ez annyira igaz, hogy a YAML parser-ek feldolgozzák a JSON-t is. Itt egy egyszerű példa YAML formátumú adatra (tesztadat.yaml):
Előkészület
YAML parser
Szükségünk van egy YAML parser-re, ami elvégzi a piszkos munkát. Amit mi használni fogunk, az egy Python csomag a PyYaml. Ez nekünk most azért lesz jó, mert a RF mindazt tudja, amit a futtatókörnyezete tud. (Mint tudjuk, a RF egy Python program.)
A PyYaml -t parancssorból telepíthetjük könnyen:
YAML állomány beolvasása változóként
A RF *** Settings *** részébe kell beolvasni változóként a .yaml vagy .yml kiterjesztésű állományt.
A tesztadat.yaml-t egy speciális dictionary-ba olvassa be a RF. Innentől ebben a dictionary-ban tudunk „matatni”.
Szimpla értékek
Ez a YAML állományban azok a változók, amik nincsenek al-struktúrában és egyetlen értéket tartalmaznak. Esetünkben a „name” és az „age” ilyenek. Ezekre változónévként lehet hivatkozni:
Szövegkezelési trükkök
A YAML-nek van két hasznos „trükkje” egybefüggő szövegek kezelésére.
- Ha sortördelt szöveget, sortördelten szeretnénk „értelmezni”, akkor erre a | jelet lehet használni a szöveg előtt. Lásd „intro multi” értékét a példában.
- Ha a sortördelt szöveg egybefüggő és csak azért tördeled a sorokat, hogy kiférjenek, akkor ezt a > jelel lehet jelezni a szöveg előtt. Lásd az „intro simple” értékét
Próbáld meg kiíratni ezeket az értékeket és „rögtön” láthatóvá válik, miről is van szó:
Megjegyzés: Azt is észre lehet venni, hogy a szóköz ebben az esetben változtatás nélkül működik változónévként.
Listaértékek
A YAML-ben egy változó alá tartozó, „-„ (kötő)jellel kezdődő sorok a listaelemek. Példánkban a nyelvek (languages) listája ilyen. A listákat ciklussal dolgozhatjuk fel, vagy arra is van mód, hogy az n. elemet érjük el:
Megjegyzés 1.: Figyeld meg, hogy a változónév előtt @ jel van! Ezzel jelöljük a RF-nek, hogy ez nem szimpla változó, hanem egy lista.
Megjegyzés 2.: Mivel a listaelemek számozása 0-tól kezdődik, ezért a 2. elem indexe: 1.
Dictionary (kulcs-érték párok listája)
A példa YAML-ben a „details”-en belül egy al-szerkezetet találunk „first name”, „last name” és „birth” kulcsokkal. A „birth” kulcs alatt még egy al-szerkezet található „year”, „month”, „day” kulcsokkal. Hogyan lehet ilyen esetben hozzáférni az adatokhoz? A „details” a fő kulcs, ezt a ${details} változó jelöli.
- Alapesetben egy kulcs-érték párhoz, például a „first name”-hez így lehet hozzáférni:
${details[‘first name’]} - Egy másik módszer is műkidik RF-ben, amihez nem kell idézőjel: ${details}[last name]
- Az előző módszerek akkor is működnek, ha al-szerkezethez tartozó értéket kell lekérdezni:
- Születési év: ${details[‘birth’][‘year’]}
- Születési hó: ${details}[birth][month]
- Ha a szerkezet kulcsai nem tartalmaznak szóközt, akkor egy szebb formátum is használható: Születési nap: ${details.birth.day}
Megjegyzés: A legutolsó formátum olyan „szép” és könnyen olvasható, hogy érdemes ezt használni, ha lehet. Ehhez az kell, hogy a YAML adatok kulcsaiban ne legyen szóköz, hanem például aláhúzásjel. Pl.: „first_name”, „last_name”.
A dictionary-s kód tehát:
Megjegyzés: A fenti példa 3 különféle módot tartalmaz a dictionary-n belüli alszerkezetek eléréséhez:
- szögletes zárójelek + ’ (idézőjel)
- szögletes zárójelek
- pontok
Összefoglalás
A YAML állományok nagyon hasznos lehetőséget biztosítanak olyan, strukturált tesztadatok tárolására, ahol a tesztadatokat minimális tanulás után olyan munkatárs is képes értelmezni, vagy szerkeszteni, aki nem rendelkezik adatbázis, vagy speciális adatformátum ismerettel. A hátránya talán az, hogy a behúzásokat be kell tartani (pont ugyanannyi szóköz előzi meg az egy szinten lévő elemeket), de ezt a Robot Framework tesztjeinél, kulcsszavainál is be kell tartani.
A leggyakrabban a YAML-t konfigurációs beállítások tárolására használják, de lényegében bármilyen strukturált tesztadat tárolására is használható.
A cikkben szereplő YAML és teljes RF állományt itt találjátok:
https://gitlab.com/passed_sharing/blog/-/tree/main/Robot_Framework/YAML