Robot Framework 4

Úvod

Robot Framework plus Python – toto spojení  od roku 2005 hýbe světem automatizovaného testování. Právě v tomto roce spatřila světlo světa jeho první verze, kterou jistý Fin Pekka Klärck vyvinul v rámci své diplomové práce na univerzitě. Od té doby prošel tento framework (a vůbec celá komunita kolem něj) vývojem. Dnes je Robot Framework obecně jedním z nejpoužívanějších nástrojů pro automatizaci testů a koncem března 2021 přišli vývojáři s upgradem na Robot Framework 4. Pojďme se v tomto článku podívat na to, co nástroj přináší ve své nové verzi.

U nás v Teseně je stěžejním nástrojem na několika automatizačních projektech. Pro naše významné klienty pomocí něj vytváříme vysoce efektivní automatizované testy webových a desktopových aplikací, ale i testy integrační, případně databázové.

První krátký náhled do release notes

Když si otevřeme Release notes k nové verzi, zjistíme, že seznam změn je velice rozsáhlý. Celkem došlo k 72 vylepšením, změnám či opravám, které jsou rozdělené dle priorit.

V tomto článku jsem se rozhodl popsat z mého pohledu nejvýznamnější změny.

Větvení kódu

Jak známo, světy testingu a vývoje si jsou dle moderních metodik čím dál tím blíž. Možná právě to se promítá do dvou následujících významných změn, které Robot Framework zaznamenal.

IF – ELSE struktura

Princip IF-ELSE asi není třeba blíže představovat. Pro programátory zcela běžná věc, ve světě testingu velmi kontroverzní téma. Vyjdeme-li ze základních principů stavby testovacích scénářů, větvení v nich pravděpodobně nenalezneme. Pravděpodobně i proto tato struktura dlouhou dobu v Robot Frameworku chyběla. Běžnou praxí pak bylo obcházet toto řešení pomocí Run Keyword If, což však v některých případech znamenalo „jet z Prahy do Brna přes Vídeň“.

V nové verzi už  ale tento workaround potřebovat nebudeme. Strukturu IF-ELSE lze zapsat takto:

IF ${Count} > O
   Do Something
   Another keyword
END

Kód je dokonce dále možné rozvětvit pomocí ELSE následovně:

IF ${Count} > O
   Do Something
ELSE
   Another keyword
END

Domnívám se, že většina vývojářů automatizovaných testů tuto možnost s radostí uvítá. I já osobně jsem už stihl tuto strukturu v kódu pro klienta využít.

Vnořené cykly

Druhou významnou kapitolou je vnořování dvou a více (doporučuji maximálně dvou) cyklů do sebe. Do dnešní doby bylo možné v Robot Frameworku implementovat pouze jeden FOR cyklus. V případě, že jsme pak chtěli v rámci jedné iterace použít opět FOR cyklus, museli jsme si vypomoci zavoláním jiného keywordu, který „vnořený“ FOR cyklus obsahoval. I tento workaround by měl být minulostí. Od nové verze Robot Frameworku můžeme implementaci zefektivnit. Pro názornost si představme situaci, kdy potřebujeme najít jednu konkrétní hodnotu v tabulce. Budeme tedy procházet každý řádek a v rámci nich pak všechny buňky:

FOR   ${row}   IN   @{rows}
   FOR   ${cell}   IN   @{row}
      IF      "${cell}" == "EXPECTED VALUE"
              Process Cell   ${cell}
      END
   END
END

SKIP status

Od počátku Robot Frameworku bylo zavedené, že všechny testy nabývaly buď statusu PASS nebo FAIL. Nyní jako velká novinka přibývá status SKIP. Existuje několik způsobů, jak tohoto statusu dosáhnout, podrobně jsou popsané v Release Notes. Zde popíšu ty základní:

  • Do BuiltIn Library přibyly keywordy Skip a Skip If. První z nich nastaví bezpodmínečně testu Skip status a ukončí ho, druhý tak provede v případě splnění určité podmínky.
  • Parametrem --skip ve spouštěcím příkazu nastavíme daným testům SKIP status a neprovádíme je. Je obdobou staršího parametru --exclude, ovšem s tím rozdílem, že SKIP testy jsou zobrazeny ve výstupním logu. 
  • Parametrem --skiponfailure ve spouštěcím příkazu dokážeme nastavit SKIP status těm testům, které reálně skončily stavem FAIL. Testy, u kterých chceme tuto funkčnost využít, musí být odlišeny tagem. Využitelné je to například pro spouštění sady testů, která obsahuje některé ještě nedokončené Test Cases. Spouštěcí příkaz pak může vypadat následovně:
robot --skiponfailure not-ready ./
a výsledek:

CRITICALITY status odstraněn

Robot Framework už dále nepodporuje koncept rozdělení testů na critical / non-critical. Důvodů k této změně je několik. Jako největší z nich autoři uvádějí právě zavedení SKIP statusu, o kterém byla řeč výše.

Označení Critical vnášelo do výsledků testů kombinace (PASS – Critical, PASS – Non-critical, FAIL – Critical, PASS – Non-critical). S rozšířením o SKIP status by se opět zvýšil počet kombinací, kterých by mohly testy ve výsledku nabývat (SKIP – Critical, SKIP – Non-critical). Vnášelo by to do výsledných logů nepřehlednost a některé kombinace by ztrácely svůj význam. Navíc koncept SKIP statusu je svým významem do značné míry velmi podobný původnímu významu Critical testů. Vývojáři se tedy nyní rozhodli Criticality status odstranit.

Závěr

Závěrem můžeme s potěšením říct, že vývoj oblíbeného nástroje Robot Framework jde i po mnoha letech fungování stále vpřed. Vývojáři Robot Frameworku tak vytváří skvělé podmínky pro to, aby se komunita kolem jejich nástroje rozšiřovala a mohly tak vznikat například stále novější knihovny plné různých užitečných funkcionalit.

Pokud jste po přečtení tohoto článku dostali chuť vyzkoušet si nástroj Robot Framework v praxi, naučit se základy nebo případně rozšířit své znalosti, rádi Vám s tím pomůžeme. V rámci našich školení aktuálně poskytujeme výuku ve dvou úrovních – kurz pro začátečníky a navazující pokročilý kurz.

Autor: Michal Jirka

V testingu Michal začal pracovat před necelými čtyřmi lety (únor 2017), přičemž po celou dobu působil v Teseně. Již od začátku se zaměřoval na automatizaci testů, zkušenosti získával na několika různých projektech především pro CSAS a ŠKODA. Poslední měsíce se věnoval práci pro pardubickou ČSOB Pojišťovnu, kde zavádějí automatizované testování od úplného začátku.