facebook-pixel

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

Facebook
LinkedIn
Twitter

Nem szeretnél lemaradni az új bejegyzésekről?

Tartalomjegyzék

sorozatok
Dechandt Dóra

BDD rövid bemutatása

BDD pro és kontra Egyik előző írásunkban (LINK) már kifejtettük, hogyan működik a BDD. Ezúttal az előnyeire és hátrányaira szeretnénk rávilágítani. A BDD (Behavior Driven

Érdekel a tesztelés világa?

Dolgozz velünk hazai és nemzetközi projekteken

egy csoport ember ül egy asztalnál laptopokkal

Várj, ne maradj le legújabb szakmai cikkeinkről

Iratkozz fel hírlevelünkre és minden hónapban elküldjük a legizgalmasabb cikkeket

egy laptop számítógépet tartó szemüveges férfi
egy süti csokireszelékkel
Tájékoztatjuk, hogy a honlap felhasználói élmény fokozásának érdekében sütiket alkalmazunk. A honlapunk használatával ön a tájékoztatásunkat tudomásul veszi.