A Dictionary értéke

Robot framework tippek és trükkök sorozat

Mielőtt belevágnánk a mostani részbe, a robot framework tippek és trükkök sorozat többi cikkét elolvashatjátok ITT , ITT és még ITT is.

Kalamajka

Az alábbihoz hasonló dolgot csináltunk:

Arról van szó, hogy létrehozunk egy dictionary-t és ezt a dictionary-t le szeretném másolni. A másolatot elronthatom, de az eredetinek kellenek az értékei később.

Oké, nézzük az eredményt:

{‘előadó’: ‘Önképző Szakkör’, ‘műalkotás’: ‘Fényes szelek alagútja’}

{‘előadó’: ‘Önképző Szakkör’, ‘műalkotás’: ‘Fényes szelek alagútja’}

Hoppácska! Az első dictionary értéke felvette a második dictionary értékét. Valami nagyon elromlott.

A kérdés az, hogy miért??

Az érték ki nem hült helye

A megfejtés az, a dictionary nem egy érték, hanem egy objektum. Az objektumok az objektumorientált programozás építőelemei. Nekünk a Robot Frameworkben nincs sok dolgunk ezzel… általában. Most viszont pont ez zavar be, nem úszuk meg, hogy egy picit ne értsük meg az objektumok működését.

A „sima” (Robot Frameworkben scalar) változók úgy működnek, hogy a változó nevéhez rendelnek egy értéket. A Dictionary és a List nem pont így működik!

A Robot Frameworkben a Dictionary és a List objektumok. Az objektumok nem egy, hanem több értéket is tárolnak. Ezt nehéz úgy tárolni, mint a „sima” változókat. A „sima” változó a memóriában egy összefüggő helyen egy értéket tárol, viszont az objektumoknak sok értékkel kell megküzdeni és ez nem valósítható meg egy összefüggő helyen. Ezért itt bonyodalmak vannak a háttérben, amiket nekünk nem kell ismerni, csak a bonyodalom következményét. Az objektumok neve nem értéket (értékeket) helyettesít, hanem az objektum kezdőhelyére hivatkozik.

Ezt úgy lehet elképzelni, hogy a memóriát egy nagy szekrénynek képzeljük, ami tele van polcokkal és fiókokkal.

  1. Scalar érték esetén az értéket belerakom egy pont jó méretű fiókba és a fiókra teszek egy nevet. A változónév a fiókra tett név, a változó értéke a fiókban lévő érték. Ha az értékre vagyok kíváncsi, akkor szolok a Robotnak, hogy nyissa ki azt a fiókot, aminek mondom a nevét és a benne lévő értéket adja nekem.
  2. Objektum esetén az értékeket csak több fiókba és polcra tudom eltenni. Ha az első fiókba eltárolom, hogy melyik polcokon és fiókokban vannak az értékek, akkor elég ismernem az első fiók helyét. Az első fiókot elnevezem. Ha a robotnak megadom ezt a nevet, akkor ebben a fiókban nem értéket talál, hanem további fiók és polc helyeket.

Megjegyzés 1: Minden hasonlat sántít, ez is, de jelen célnak megfelel.

Megjegyzés 2: Ezt az egész mizériát az értékekkel és helyekkel a Robot igyekszik elrejteni előlünk, így például nekünk soha nem kell tudnunk a Robot Frameworkben, hogy hol vannak a fiókok, elég a neveket tudni. Viszont jelenleg a Set Variable kulcsszó esetén a háttér nem ismerete elrontja a mókánkat.

A hiba megértése

Miért is történt akkor, ami történt?

Amikor az első dictionary-t lemásolni véltem a Set Variable kulcsszóval, akkor csak az eredeti dictionary első fiókját másoltam le, így a második dictionary első fiókja pontosan ugyanazokat a helyeket tartalmazza, mint az eredeti dictionary első fiókja. Ha valamelyik másik fiókban kicserélek egy értéket, akkor mindkét dictionary ugyanazt az értéket fogja látni, mert mindkét dictionarynak az első fiókjában ugyanazok a fiók-helyek vannak eltárolva.

A Set Variable kulcsszó ily módon nem használható dictionary (és lista) esetén, mivel nem az értékeket, hanem csak az értékek helyzetét másolta le.

Mit lehet tenni?

Értékes másolás

Amit keresünk az a Copy Dictionary (vagy listánál a Copy List) kulcsszó, ami a Collection könyvtárban található.

Alapesetben így lehet használni:

${masodik_dictionary}=   copy dictionary    ${eredeti_dictionary}

Ha a másolandó dictionary egy (vagy több) értéke újabb dictionary vagy lista, akkor a Copy Dictionary második argumentuma legyen True, így rekurzívan azok is értékként lesznek lemásolva:

${masodik_dictionary}=   copy dictionary    ${eredeti_dictionary}  True

Érték-elés

  1. A legtöbb esetben a tesztautomatizáláshoz nem kell fejlesztői szaktudás. Viszont a fenti példa is mutatja, hogy egy alap szintű programozási ismeret nem árt.
  2. A Robot Framework dokumentációban a Set Variable rész említi, hogy scalar érték létrehozásához használható. A dokumentáció tanulmányozása minden esetben hasznos! 🙂
  3. A dictionary és a list kezelésére a Robot Framework Collection könyvtárában található kulcsszavakat érdemes használni. Collection könyvtár dokumentációja

Jó tesztelést! Hajrá! 🙂

A cikket Őri Robert ötlete alapján Szőke Ármin készítette.

Megosztás

Kérsz értesítést a legújabb cikkekről?

Kapcsolódó cikkek

A tesztpiramis: a stabil és kifizetődő tesztautomatizálás alapköve

Bevezető A szoftverfejlesztés világában az automatizálás gyakran úgy indul, mint egy lelkes fellángolás: „Minden manuális tesztet váltsunk ki automata scriptekkel!” A kezdeti eufória után azonban sok projektvezető és fejlesztő szembesül a kőkemény valósággal. A tesztek lassúak, gyakran ok nélkül elbuknak, a karbantartásuk pedig több időt emészt fel, mint amennyit maga a fejlesztés. Ilyenkor merül fel

Tesztautomatizálás: mikor érdemes belevágni, és mikor várjunk még?

Bevezető A szoftverfejlesztési projektek egyik legvitatottabb kérdése nem az, hogy kell-e automatizálni a tesztelést, hanem az, hogy mikor. „Már az első naptól írjunk automata teszteket, vagy ráérünk, ha már kész a funkciók nagy része?” – hangzik el a kérdés szinte minden projektindító megbeszélésen. A válasz azonban nem egy egyszerű dátum vagy verziószám. A tesztautomatizálás ugyanis

Tesztautomatizálás útmutató: mikor, hogyan és miért érdemes bevezetni?

Szoftvert fejleszteni ma már nem csak kódolást jelent. Egy termék sikere legalább annyira múlik azon, hogy a kiadás pillanatában stabilan, hibamentesen és megbízhatóan működjön, mint magán az ötleten. Ahogy az IT projektek egyre komplexebbé válnak, a hagyományos, tisztán manuális tesztelés egyre kevésbé tud lépést tartani a fejlesztés tempójával. Eljön a pont, amikor a tesztelés már

Scroll to Top