Robot Framework Основы

Введение

Robot Framework — фреймворк для разработки приемочных автотестов (ATDD).

Это keyword-driven testing фреймворк, который предоставляет табличное форматирование

Основные идеи для создания Robot Framework были отражены в магистерской диссертации Пекки Клярка (Pekka Klärck) в 2005 году.

Первая версия была разработана Nokia Siemens Networks в том же году. Версия 2.0 была издана под открытой лицензией Apache License 24 июня 2008 года. Фреймворк написан на языке Python.

О том, что фреймворк финский можно догадаться по некоторым пасхалкам, например в библиотеке OperatingSystem можно найти текст Hyv\xe4 esimerkki, что в переводе с финского языка означает хороший пример

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

RobotFramework состоит из нескольких библиотек, поэтому документация разбита на части:

Пример

Небольшой пример работы с настроенным фреймворком. Про установку RobotFramework читайте здесь

Зайдите в директорию с тестами

cd /soft/src/tests/robot

В этой директории могут лежать Makefile , Dockerfile различные файлы из которых берутся данные для создания тестовых окружений и так далее.

Это обычно настраивает DevOps или 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

В данном примере чтобы создать тестовое окружение нужно выполнить

make dev

Подробнее про make читайте в статье «Работа с GNUmakefile»

Когда окружение активно можно начать пользоваться роботом.

Для вызова справки выполните

robot --help

seleniumlibrary

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

python -m pip install robotframework-seleniumlibrary

Collecting robotframework-seleniumlibrary Downloading robotframework_seleniumlibrary-5.1.3-py2.py3-none-any.whl (94 kB) |████████████████████████████████| 94 kB 1.6 MB/s Collecting selenium>=3.141.0 Downloading selenium-3.141.0-py2.py3-none-any.whl (904 kB) |████████████████████████████████| 904 kB 51.5 MB/s Collecting robotframework-pythonlibcore>=2.1.0 Downloading robotframework_pythonlibcore-2.2.1-py2.py3-none-any.whl (10 kB) Requirement already satisfied: robotframework>=3.1.2 in /home/andrei/robotframework/myvenv/lib/python3.9/site-packages (from robotframework-seleniumlibrary) (4.0.1) Collecting urllib3 Using cached urllib3-1.26.4-py2.py3-none-any.whl (153 kB) Installing collected packages: urllib3, selenium, robotframework-pythonlibcore, robotframework-seleniumlibrary Successfully installed robotframework-pythonlibcore-2.2.1 robotframework-seleniumlibrary-5.1.3 selenium-3.141.0 urllib3-1.26.4

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

Пример теста с Selenium WebDriver

*** Settings *** # make at least two spaces beetween Documentation Simple example using SeleniumLibrary. Library SeleniumLibrary *** Variables *** *** Test Cases *** This is sample test case [documentation] Google test [tags] regression Open Browser http://www.google.com chrome Close Browser *** Keywords ***

robot -d results Tests/Google/FunctionalTestSuite/GoogleSearch.robot

============================================================================== GoogleSearch :: Simple example using SeleniumLibrary. ============================================================================== This is sample test case :: Google test | PASS | ------------------------------------------------------------------------------ GoogleSearch :: Simple example using SeleniumLibrary. | PASS | 1 test, 1 passed, 0 failed ============================================================================== Output: /home/andrei/robotframework/RobotFWTutorial/results/output.xml Log: /home/andrei/robotframework/RobotFWTutorial/results/log.html Report: /home/andrei/robotframework/RobotFWTutorial/results/report.html

firefox Results/report.html

Результат работы robotframework report.html изображение с сайта www.aredel.com

Более детальный отчёт находится в log.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

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

2024-04-17 01:05:53.714

result_format=datetime

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

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

2024-04-17 01:05:53.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
Основы
RFBrowser
Объявить переменную
if else: Условные операторы
in: Оператор принадлежности к списку
Циклы
Изменить значение переменной
Перенос на новую строку
[Tags]: тэги
Collections: списки, словари
JSON
Передача аргументов в кейворд
Evaluate
Поддержка Robot в PyCharm

Search on this site

Subscribe to @aofeed channel for updates

Visit Channel

@aofeed

Feedbak and Questions in Telegram

@aofeedchat