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

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

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