Robot Framework Basics

Introduction

Robot Framework is a framework for developing automated acceptance tests (ATDD).

It is a keyword-driven testing framework that provides table formatting

The main ideas for creating Robot Framework were reflected in Pekka Klärck's master's thesis in 2005.

The first version was developed by Nokia Siemens Networks in the same year. Version 2.0 was released under the open source Apache License on June 24, 2008. The framework is written in Python.

You can guess that the framework is Finnish by some Easter eggs, for example in the library OperatingSystem you can find the text Hyv\xe4 esimerkki, which translated from Finnish means good example

Documentation

RobotFramework consists of several libraries, so documentation broken into pieces:

Example

A small example of working with a configured framework. Read about installing RobotFramework here

Go to the directory with tests

cd /soft/src/tests/robot

This directory may contain Makefile , Dockerfile various files from which data is taken to create test environments, and so on.

This is usually set up by DevOps or QA Team Lead

ls -la

total 70 drwxr-xr-x 8 andrei urn_su 4096 Mar 9 12:15 . drwxr-xr-x 9 andrei urn_su 4096 Mar 9 17:45 .. drwxr-xr-x 2 andrei urn_su 4096 Mar 9 12:15 bin -rw-r--r-- 1 andrei urn_su 1534 Mar 9 12:15 Dockerfile -rw-r--r-- 1 andrei urn_su 1293 Mar 9 12:15 Dockerfile.alpine -rw-r--r-- 1 andrei urn_su 38 Mar 9 12:15 .dockerignore drwxr-xr-x 2 andrei 111 4096 Mar 9 12:15 input -rw-r--r-- 1 andrei urn_su 13586 Mar 9 12:15 Makefile drwxr-xr-x 2 andrei 111 4096 Mar 9 12:15 output -rw-r--r-- 1 andrei urn_su 0 Mar 9 12:15 README.md drwxr-xr-x 2 andrei urn_su 4096 Mar 9 12:15 requirements drwxr-xr-x 2 andrei urn_su 4096 Mar 9 12:15 scripts drwxr-xr-x 8 andrei 111 4096 Mar 9 12:15 src

In this example, to create a test environment, you need to run

make dev

More about make read the article «Working with GNUmakefile»

When the environment is active, you can start using the robot.

To call help, run

robot --help

QuickStart

Официальное руководство для быстрого старта в RobotFramework можно клонировать с github

Документация

git clone https://github.com/robotframework/QuickStartGuide.git
cd QuickStartGuide
ll

drwxr-xr-x 5 andrei urnsu 4096 May 5 11:25 ./ drwxr-xr-x 5 andrei urnsu 4096 May 5 11:25 ../ -rw-r--r-- 1 andrei urnsu 796 May 5 11:25 BUILD.rst drwxr-xr-x 8 andrei urnsu 4096 May 5 11:25 .git/ drwxr-xr-x 2 andrei urnsu 4096 May 5 11:25 lib/ -rw-r--r-- 1 andrei urnsu 21237 May 5 11:25 QuickStart.rst -rw-r--r-- 1 andrei urnsu 359 May 5 11:25 README.rst drwxr-xr-x 2 andrei urnsu 4096 May 5 11:25 sut/

Проект для тестирования логина находится в директории sut

Скрипт называется login.py

python sut/login.py create andrei HeiHeiru1

SUCCESS

python sut/login.py login andrei HeiHeiru1

Logged In

robot QuickStart.rst

============================================================================== QuickStart ============================================================================== User can create an account and log in | PASS | ------------------------------------------------------------------------------ User cannot log in with bad password | PASS | ------------------------------------------------------------------------------ User can change password | PASS | ------------------------------------------------------------------------------ Invalid password | PASS | ------------------------------------------------------------------------------ User status is stored in database | PASS | ------------------------------------------------------------------------------ QuickStart | PASS | 5 tests, 5 passed, 0 failed ============================================================================== Output: /home/andrei/robotframework/QuickStartGuide/output.xml Log: /home/andrei/robotframework/QuickStartGuide/log.html Report: /home/andrei/robotframework/QuickStartGuide/report.html

Свои keywords

В разделе Keywords можно объявить свои ключевые слова.

В этом случае Тest Case будет короче и читаться будет легче.

*** Settings *** Documentation Basic Search Functionality Library SeleniumLibrary *** Variables *** *** Test Cases *** Verify basic search functionality for eBay [Documentation] This test case verifies the basic search [Tags] Functional Start TestCase Verify Search Results Finish TestCase *** Keywords *** Start TestCase Open Browser https://www.ebay.com chrome Input Text //*[@id="gh-ac"] mobile Verify Search Results Click Element id:gh-btn Page Should Contain results for mobile Finish TestCase Close Browser

robot -d results Tests/eBay/BasicSearch.robot

Вынести keywords в отдельный файл

Хранить всё в одном файле быстро становится неудобно.

Оставим сами тесты в файле BasicSearch.robot а keywords разделим на две группы - общие и относящиеся к проекту

BasicSearch.robot

*** Settings *** Documentation Basic Search Functionality Resource ../../Resources/CommonFunctionality.robot Resource ../../Resources/eBay_UserDefinedKeywords.robot *** Variables *** *** Test Cases *** Verify basic search functionality for eBay [Documentation] This test case verifies the basic search [Tags] Functional Start TestCase Verify Search Results Finish TestCase *** Keywords ***

Обратите внимание на то, что в этом файле уже не нужно подключать SeleniumLibrary

В файл CommonFunctionality.robot вынесем такие общие действия как открыть браузер, закрыть браузер и так далее

*** Settings *** Library SeleniumLibrary *** Keywords *** Start TestCase Open Browser https://www.ebay.com chrome Maximize Browser Window Finish TestCase Close Browser

Обратите внимание на строку 2. Пользовательские ключи содержат в себе ключи из библиотеки SeleniumLibrary, поэтому её нужно подключить в настройках.

В файл eBayUserDefinedKeywords.robot вынесем всё, что относится именно к этому проекту

*** Settings *** Library SeleniumLibrary *** Keywords *** Verify Search Results Input Text //*[@id="gh-ac"] mobile Click Element id:gh-btn Page Should Contain results for mobile Filter Results By Condition Mouse Over //*[@id="w7"] Sleep 3s Mouse Down //*[@id="w7"]/div/ul/li[2] Click Element //*[@id="w7"]/div/ul/li[2] Verify Filter Results Element Should Contain //*[@id="srp-river-results-query_answer1-w0-x-carous

robot -d results Tests/eBay/BasicSearch.robot

============================================================================== BasicSearch :: Basic Search Functionality ============================================================================== Verify basic search functionality for eBay :: This test case verif... | PASS | ------------------------------------------------------------------------------ BasicSearch :: Basic Search Functionality | PASS | 1 test, 1 passed, 0 failed ==============================================================================

Если вы получили ошибку No keyword with name 'Start TestCase' found

============================================================================== BasicSearch :: Basic Search Functionality ============================================================================== Verify basic search functionality for eBay :: This test case verif... |FAIL | No keyword with name 'Start TestCase' found. ------------------------------------------------------------------------------ BasicSearch :: Basic Search Functionality |FAIL | 1 test, 0 passed, 1 failed ==============================================================================

- убедитесь что в начале BasicSearch.robot вы с помощью Resourse указали правильный путь до файлов CommonFunctionality.robot , eBayUserDefinedKeywords.robot

*** Settings *** Documentation Basic Search Functionality Resource ../../Resources/CommonFunctionality.robot Resource ../../Resources/eBay_UserDefinedKeywords.robot

Test Setup и Test Teardown

Код из предыдущего примера отлично сработает в случае успеха.

Однако, если результатом будет FAIL браузер не закроется автоматически.

Чтобы избавить себя от необходимости подчищать окружение в случае провала - используйте Test Setup и Test Teardown

*** Settings *** Documentation Basic Search Functionality Resource ../../Resources/CommonFunctionality.robot Resource ../../Resources/eBay_UserDefinedKeywords.robot Test Setup Start TestCase Test Teardown Finish TestCase *** Variables *** *** Test Cases *** Verify basic search functionality for eBay [Documentation] This test case verifies the basic search [Tags] Functional Verify Search Results Filter Results By Condition Verify Filter Results *** Keywords ***

Явно указать источник ключевого слова

Если в разных файлах повторяются пользовательские ключи - возможен конфликт.

Чтобы его избежать можно явно указать и какого файла используется keyword

eBay_UserDefinedKeywords.Verify Search Results eBay_UserDefinedKeywords.Filter Results By Condition eBay_UserDefinedKeywords.Verify Filter Results

Теперь в файле BasicSearch.robot не нужно импортировать Selenium Library и писать Keywords

Catenate: объединение строк

Соединить несколько переменных типа string можно с помощью Catenate

Пример: скрипт caten.robot

*** Settings *** *** Test Cases *** Caten ${site}= Set Variable heihei ${proto}= Set Variable https ${url}= Catenate ${proto}://www.${site}.ru Log To Console \n${url}

robot caten.robot

============================================================================== Caten ============================================================================== Caten ... https://www.heihei.ru Caten | PASS | ------------------------------------------------------------------------------ Caten | PASS | 1 test, 1 passed, 0 failed ============================================================================== Output: /opt/robot/src/tests/pam/rbac/output.xml Log: /opt/robot/src/tests/pam/rbac/log.html Report: /opt/robot/src/tests/pam/rbac/report.html

Дата и время

Чтобы получить текущую дату нужно подключить библиотеку DateTime и воспользоваться ключевым словосочетанием Get Current Date

Library DateTime … ${date}= Get Current Date

Формат даты будет выглядеть как

2025-02-19 06:18:23.714

result_format=datetime

Для удобного обращения к атрибутам объекта date можно воспользоваться аргументом result_format=datetime

Формат даты будет выглядеть как

2025-02-19 06:18:23.918613

Чтобы получить месяц или год, достаточно указать атрибут как ${date.month} или ${date.year}

Library DateTime … ${date}= Get Current Date result_format=datetime

Пример из моего бесплатного тренажёра : проверка корректности заголовка страницы, год в которой должен совпадать с текущим.

*** Settings *** Documentation Checking Title Library Browser ... enable_playwright_debug=${True} ... auto_closing_level=TEST ... retry_assertions_for=0:00:03 Library Collections Library DateTime Force Tags ui *** Variables *** *** Keywords *** Test Setup Tasks Start Chromium Browser Test Teardown Tasks Close Browser Start Chromium Browser New Browser browser=chromium headless=True New Context viewport={'width': 1920, 'height': 1080} ignoreHTTPSErrors=True *** Test Cases *** Italy [Tags] italy New Page https://www.urn.su/qa/ui/basic_test/ ${urls}= Get Elements //a[@class="march8"] # depends on Collections lib Log ${urls} ${url0}= Get From List ${urls} 0 Click ${url0} ${date}= Get Current Date result_format=datetime Log To Console "Check dates" Log To Console ${date} Log To Console ${date.year} Get Title == 8 марта в Италии в ${date.year} году Close Browser

robot --include italy src/tests/ui/

============================================================================== Ui ============================================================================== Ui.Ui Test Page :: Checking Title ============================================================================== Italy ......"Check dates" .2023-01-03 09:56:18.065095 .2023 Italy Italy | PASS | ------------------------------------------------------------------------------ Ui.Ui Test Page :: Checking Title | PASS | 1 test, 1 passed, 0 failed ============================================================================== Ui | PASS | 1 test, 1 passed, 0 failed ============================================================================== Output: /opt/tests/robot/output.xml Log: /opt/tests/robot/log.html Report: /opt/tests/robot/report.html

Related Articles
Robot Framework
Basics
RFBrowser
Set Variable
if else: conditionals
in: check if smth belongs to list
Loops
Change Variable Value
New Line
[Tags]
Collections: lists, dicts
JSON
Pass Argument to a Keyword
Evaluate
Robot in PyCharm

Search on this site

Subscribe to @aofeed channel for updates

Visit Channel

@aofeed

Feedbak and Questions in Telegram

@aofeedchat