TL;DR
- Robot Framework использует keyword-driven подход — читаемые тесты без программирования
- Тесты пишутся в табличном формате (plain text, .robot файлы)
- SeleniumLibrary для веб-тестирования, RequestsLibrary для API
- Создавай кастомные keywords для инкапсуляции сложной логики
- Встроенная отчётность и интеграция с CI/CD
Идеально для: Команд со смешанными техническими навыками, приёмочного тестирования, RPA Пропусти, если: Нужна максимальная гибкость (используй Python/pytest напрямую) Время чтения: 15 минут
Твоя команда включает ручных тестировщиков, которые не программируют. Менеджменту нужны читаемые отчёты о тестах. Тесты должны поддерживаться не-разработчиками.
Robot Framework решает эту задачу. Тесты пишутся на простом английском с keywords. Любой может их прочитать. Разработчики могут их расширять. Отчёты генерируются автоматически.
Этот туториал покрывает Robot Framework от установки до интеграции с CI/CD — всё для keyword-driven автоматизации тестирования.
Что такое Robot Framework?
Robot Framework — это универсальный open-source фреймворк для автоматизации приёмочного тестирования, acceptance test-driven development (ATDD) и robotic process automation (RPA). Он использует keyword-driven подход, где тесты пишутся в человекочитаемом табличном формате.
Почему Robot Framework:
- Читаемый синтаксис — тесты выглядят как естественный язык
- Легко изучить — непрограммисты могут писать тесты
- Расширяемый — Python/Java библиотеки расширяют функциональность
- Встроенная отчётность — HTML-отчёты генерируются автоматически
- Большая экосистема — библиотеки для веб, API, мобильных, десктопных приложений
Установка
Инсталляция
# Установка Robot Framework
pip install robotframework
# Установка SeleniumLibrary для веб-тестирования
pip install robotframework-seleniumlibrary
# Установка RequestsLibrary для API-тестирования
pip install robotframework-requests
# Установка Browser Library (Playwright-based альтернатива)
pip install robotframework-browser
rfbrowser init
# Проверка установки
robot --version
Структура проекта
project/
├── tests/
│ ├── login_tests.robot
│ ├── api_tests.robot
│ └── __init__.robot
├── resources/
│ ├── keywords.robot
│ ├── variables.robot
│ └── pages/
│ └── login_page.robot
├── results/
└── requirements.txt
Базовый синтаксис
Первый тест
*** Settings ***
Library SeleniumLibrary
*** Variables ***
${BROWSER} chrome
${URL} https://example.com
*** Test Cases ***
User Can Open Homepage
Open Browser ${URL} ${BROWSER}
Title Should Be Example Domain
Close Browser
User Can Search For Products
Open Browser ${URL} ${BROWSER}
Input Text id=search robot framework
Click Button id=search-btn
Page Should Contain Results
Close Browser
Объяснение секций
| Секция | Назначение |
|---|---|
*** Settings *** | Библиотеки, ресурсы, setup/teardown |
*** Variables *** | Тестовые данные и конфигурация |
*** Test Cases *** | Фактические тестовые сценарии |
*** Keywords *** | Кастомные переиспользуемые keywords |
SeleniumLibrary для веб-тестирования
Распространённые Keywords
*** Settings ***
Library SeleniumLibrary
*** Test Cases ***
Web Interaction Examples
# Навигация
Open Browser https://example.com chrome
Go To https://example.com/login
# Ввод
Input Text id=username testuser
Input Password id=password secret123
# Клики
Click Button id=submit
Click Element xpath=//a[@class='link']
Click Link Home
# Проверки
Page Should Contain Welcome
Page Should Contain Element id=dashboard
Element Should Be Visible class=success-message
Element Text Should Be id=greeting Hello User
# Ожидания
Wait Until Element Is Visible id=loading timeout=10s
Wait Until Page Contains Dashboard
# Получение значений
${text}= Get Text id=message
${value}= Get Value id=input-field
${attr}= Get Element Attribute id=link href
Close Browser
Setup и Teardown
*** Settings ***
Library SeleniumLibrary
Suite Setup Open Browser ${URL} ${BROWSER}
Suite Teardown Close All Browsers
Test Setup Go To ${URL}
Test Teardown Capture Page Screenshot
*** Variables ***
${URL} https://example.com
${BROWSER} chrome
*** Test Cases ***
Test One
# Браузер уже открыт из Suite Setup
Page Should Contain Welcome
Test Two
# Свежая загрузка страницы из Test Setup
Click Link About
Page Should Contain About Us
Кастомные Keywords
Создание Keywords
*** Settings ***
Library SeleniumLibrary
*** Keywords ***
Login With Credentials
[Arguments] ${username} ${password}
Input Text id=username ${username}
Input Password id=password ${password}
Click Button id=login-btn
Wait Until Page Contains Element id=dashboard
Logout
Click Element id=user-menu
Click Link Logout
Wait Until Page Contains Login
Verify Dashboard Loaded
Page Should Contain Element id=dashboard
Element Should Be Visible id=welcome-message
Page Should Not Contain Error
*** Test Cases ***
Successful Login
Open Browser https://example.com/login chrome
Login With Credentials user@example.com password123
Verify Dashboard Loaded
Logout
Close Browser
Keywords с возвратом значений
*** Keywords ***
Get User Name From Dashboard
${name}= Get Text id=user-name
[Return] ${name}
Create User And Get ID
[Arguments] ${name} ${email}
Input Text id=name ${name}
Input Text id=email ${email}
Click Button id=create
Wait Until Page Contains Element id=user-id
${id}= Get Text id=user-id
[Return] ${id}
*** Test Cases ***
Verify User Creation
Open Browser ${URL} chrome
${user_id}= Create User And Get ID John Doe john@example.com
Should Not Be Empty ${user_id}
Log Created user with ID: ${user_id}
Close Browser
Паттерн Page Object
Page Resource File
# resources/pages/login_page.robot
*** Settings ***
Library SeleniumLibrary
*** Variables ***
${LOGIN_URL} https://example.com/login
${USERNAME_FIELD} id=username
${PASSWORD_FIELD} id=password
${LOGIN_BUTTON} id=login-btn
${ERROR_MESSAGE} class=error-msg
${DASHBOARD} id=dashboard
*** Keywords ***
Navigate To Login Page
Go To ${LOGIN_URL}
Enter Username
[Arguments] ${username}
Input Text ${USERNAME_FIELD} ${username}
Enter Password
[Arguments] ${password}
Input Password ${PASSWORD_FIELD} ${password}
Click Login Button
Click Button ${LOGIN_BUTTON}
Login Should Succeed
Wait Until Page Contains Element ${DASHBOARD} timeout=10s
Login Should Fail With Message
[Arguments] ${expected_message}
Element Should Be Visible ${ERROR_MESSAGE}
Element Text Should Be ${ERROR_MESSAGE} ${expected_message}
Login As User
[Arguments] ${username} ${password}
Navigate To Login Page
Enter Username ${username}
Enter Password ${password}
Click Login Button
Использование Page Objects
*** Settings ***
Library SeleniumLibrary
Resource resources/pages/login_page.robot
Suite Setup Open Browser ${URL} ${BROWSER}
Suite Teardown Close All Browsers
*** Variables ***
${URL} https://example.com
${BROWSER} chrome
*** Test Cases ***
Valid Login
Login As User user@example.com password123
Login Should Succeed
Invalid Password
Login As User user@example.com wrongpassword
Login Should Fail With Message Invalid credentials
Data-Driven Testing
Test Templates
*** Settings ***
Library SeleniumLibrary
Test Template Login Should Fail For Invalid Credentials
*** Test Cases *** USERNAME PASSWORD ERROR
Empty Username ${EMPTY} password123 Username required
Empty Password user@example.com ${EMPTY} Password required
Invalid Email Format invalid-email password123 Invalid email format
Wrong Password user@example.com wrongpass Invalid credentials
*** Keywords ***
Login Should Fail For Invalid Credentials
[Arguments] ${username} ${password} ${expected_error}
Open Browser https://example.com/login chrome
Input Text id=username ${username}
Input Password id=password ${password}
Click Button id=login
Element Text Should Be class=error ${expected_error}
Close Browser
API-тестирование
*** Settings ***
Library RequestsLibrary
Library Collections
*** Variables ***
${BASE_URL} https://jsonplaceholder.typicode.com
*** Test Cases ***
Get All Users
Create Session api ${BASE_URL}
${response}= GET On Session api /users
Status Should Be 200 ${response}
${users}= Set Variable ${response.json()}
Length Should Be ${users} 10
Create New Post
Create Session api ${BASE_URL}
${body}= Create Dictionary title=Test Post body=Content userId=1
${response}= POST On Session api /posts json=${body}
Status Should Be 201 ${response}
${post}= Set Variable ${response.json()}
Should Be Equal ${post['title']} Test Post
Delete Post
Create Session api ${BASE_URL}
${response}= DELETE On Session api /posts/1
Status Should Be 200 ${response}
Интеграция с CI/CD
GitHub Actions
name: Robot Framework Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
pip install robotframework robotframework-seleniumlibrary
- name: Run tests
run: |
robot --outputdir results tests/
- name: Upload results
uses: actions/upload-artifact@v4
if: always()
with:
name: robot-results
path: results/
Запуск тестов
# Запуск всех тестов
robot tests/
# Запуск конкретного файла
robot tests/login_tests.robot
# Запуск с тегами
robot --include smoke tests/
robot --exclude slow tests/
# Запуск с переменными
robot --variable BROWSER:firefox --variable URL:https://staging.example.com tests/
# Вывод в конкретную директорию
robot --outputdir results tests/
Robot Framework с помощью ИИ
ИИ-инструменты могут помочь писать и поддерживать Robot Framework тесты.
Что ИИ делает хорошо:
- Генерация keywords из user stories
- Создание вариаций тестовых данных
- Конвертация ручных тест-кейсов в Robot-синтаксис
- Предложение library keywords
Что всё ещё требует людей:
- Понимание бизнес-требований
- Проектирование тестовой архитектуры
- Отладка сложных падений
- Поддержка page objects
FAQ
Что такое Robot Framework?
Robot Framework — это Python-based open-source фреймворк для автоматизации, использующий keyword-driven подход. Тесты пишутся в читаемом табличном формате, который выглядит как естественный язык, делая их доступными для непрограммистов. Он поддерживает веб, API, мобильное и десктопное тестирование через различные библиотеки.
Robot Framework бесплатный?
Да, Robot Framework полностью бесплатен и open-source под лицензией Apache 2.0. Все стандартные библиотеки (SeleniumLibrary, RequestsLibrary и т.д.) тоже бесплатны. Нет платных версий или enterprise-функций — всё доступно бесплатно.
Robot Framework vs Selenium — в чём разница?
Robot Framework — это фреймворк для автоматизации тестирования, предоставляющий структуру и синтаксис для написания тестов. Selenium — это библиотека для браузерной автоматизации. Robot Framework использует SeleniumLibrary (обёртку вокруг Selenium) для выполнения автоматизации веб-браузера. Думай о Robot Framework как о тестовом фреймворке, а о Selenium как о браузерном драйвере.
Может ли Robot Framework тестировать API?
Да, Robot Framework может тестировать REST API с помощью RequestsLibrary. Ты можешь делать HTTP-запросы (GET, POST, PUT, DELETE), проверять статус-коды ответов, парсить JSON-ответы и валидировать данные.
Официальные ресурсы
Смотрите также
- Selenium Tutorial - Основы браузерной автоматизации
- API Testing Guide - Тестирование REST API
- Cucumber BDD Tutorial - Behavior-driven development
- Python Testing Guide - Python автоматизация тестирования
