Robot Framework
Introduction
Robot Framework — фреймворк для разработки приемочных автотестов (ATDD).
Это keyword-driven testing фреймворк, который предоставляет табличное форматирование
Основные идеи для создания Robot Framework были отражены в магистерской диссертации Пекки Клярка (Pekka Klärck) в 2005 году.
Первая версия была разработана Nokia Siemens Networks в том же году. Версия 2.0 была издана под открытой лицензией Apache License 24 июня 2008 года.
Фреймворк написан на языке
Python.
Документация
Установка
С помощью pip
python -m pip install robotframework
Collecting robotframework Downloading robotframework-3.2.2-py2.py3-none-any.whl (623 kB) |████████████████████████████████| 623 kB 4.3 MB/s Installing collected packages: robotframework Successfully installed robotframework-3.2.2
python -m pip list
Package Version -------------- ------- pip 21.0.1 robotframework 4.0.1 setuptools 49.2.1
robot --version
Robot Framework 4.0.1 (Python 3.9.1 on linux)
Пример
Небольшой пример работы с настроенным фреймворком
Зайдите в директорию с тестами
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
To создать тестовое окружение нужно выполнить
make dev
Когда окружение активно можно начать пользоваться роботом.
Для вызова
справки execute
robot --help
seleniumlibrary
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

Более детальный отчёт находится в 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 браузер не закроется автоматически.
To избавить себя от необходимости подчищать окружение в случае провала - используйте
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 ***
Явно указать источник ключевого слова
Если в разных файлах повторяются пользовательские ключи - возможен конфликт.
To его избежать можно явно указать и какого файла используется keyword
eBay_UserDefinedKeywords.Verify Search Results
eBay_UserDefinedKeywords.Filter Results By Condition
eBay_UserDefinedKeywords.Verify Filter Results
Теперь в файле BasicSearch.robot не нужно импортировать Selenium Library и писать Keywords