Robot Framework — open-source фреймворк автоматизации на базе Python, который популяризировал тестирование на основе ключевых слов, делая автоматизацию тестирования доступной благодаря удобочитаемому синтаксису. По данным ежегодного опроса Robot Framework Foundation, Robot Framework имеет более 1,5 миллиона загрузок в месяц и используется в 100+ странах с 34% ростом год к году. По данным исследования Sauce Labs, команды, использующие Robot Framework, сообщают о 50% более высокой скорости создания тестов. Этот туториал охватывает Robot Framework от установки до интеграции CI/CD.

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’s keyword-driven approach is the best bridge between business and engineering. Non-technical stakeholders can read test cases while developers extend functionality in Python — everyone works in their language.” — Yuri Kan, Senior QA Lead

Установка

Инсталляция

# Установка 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-ответы и валидировать данные.

Подходит ли Robot Framework для начинающих?

Да. Keyword-driven синтаксис читается как обычный английский, поэтому ручные тестировщики и бизнес-аналитики могут писать и понимать тесты без навыков программирования. Кривая обучения значительно ниже, чем у pytest или JUnit. Начни со встроенных keywords, затем постепенно создавай кастомные. Большинство команд становятся продуктивными за неделю.

Как Robot Framework сравнивается с Playwright и Cypress?

Robot Framework — это универсальный фреймворк, поддерживающий веб, API, мобильное и десктопное тестирование через подключаемые библиотеки. Playwright и Cypress — специализированные браузерные инструменты с более быстрым выполнением и лучшим developer experience для веб-тестирования. Выбирай Robot Framework когда нужно мультиплатформенное тестирование, нетехнические участники команды пишут тесты, или приёмочное тестирование с бизнес-читаемыми отчётами. Выбирай Playwright/Cypress когда фокус исключительно на веб-UI тестировании и команда ориентирована на разработчиков.

Официальные ресурсы

Смотрите также