Robot Framework

Robot Framework — универсальный открытый фреймворк для автоматизации, который применяется как для автоматизированного тестирования, так и для роботизированной автоматизации бизнес-процессов (RPA)[3].

Общие сведения
Robot Framework
Тип тестовое фреймворк
Разработчики Pekka Klärck, Janne Harkonen и др.
Написана на Python
Операционная система мультиплатформенное ПО
Первый выпуск 24 июня 2008[2]
Последняя версия
Репозиторий github.com/robotframewor…
Лицензия Apache License 2.0
Сайт robotframework.org

Описание

Robot Framework — один из самых известных фреймворков для тестирования, основанного на ключевых словах, а также поддерживает поведенческую разработку с помощью Gherkin-нотации (Given/When/Then)[4].

Основан на простой процедурной скриптовой нотации, ориентированной на читаемость и простоту освоения. Язык Robot Framework поддерживается многими IDE и текстовыми редакторами через расширения[5] (подсветка синтаксиса, отладка, рефакторинг, автодополнение).

Реализован на Python, может быть расширен любыми библиотеками для управления тестируемым ПО или процессами автоматизации, в том числе созданными сообществом: открыто опубликованы сотни библиотек[6].

Разработку и финансирование проекта ведёт некоммерческая Robot Framework Foundation[7], которая также владеет правами на товарный знак Robot Framework[8][9].

История

Основная идея Robot Framework появилась в 2004 году и была впервые раскрыта в магистерской работе Пекки Клярка (ранее Пекка Лаукканен) в 2006 году[10]. В 2005 году в компании Nokia Siemens Networks (ныне Nokia Solutions and Networks) началась разработка первой версии. С ростом популярности во внутреннем использовании появилась идея опубликовать Robot Framework под свободной лицензией[11].

Версия 2.0 была выпущена 24 июня 2008 года под лицензией Apache License 2.0[12][13].

undefined

После публикации число пользователей за пределами Nokia в первую очередь росло на финском рынке[14]. В 2015 году с участием семи компаний в Хельсинки был зарегистрирован союз «Robot Framework ry» (сейчас англ. Robot Framework Foundation)[15] для финансирования разработки Robot Framework.

В январе 2018 года в Хельсинки (за исключением 2021 года) прошла первая ежегодная конференция Robot Framework — RoboCon[16]. С началом пандемии COVID-19 мероприятия проводятся и онлайн, с 2021 года — ежегодно. Все доклады RoboCon доступны в открытом доступе.

С 2018 года — роста числа пользователей по всему миру, членов ассоциации и финансирования[7]. С версии 3.0 (2018) проект активно развивается; сейчас Robot Framework входит в число 1 % критически важных проектов PyPI по количеству загрузок (свыше 1,8 млн ежемесячно)[17].

Синтаксис

Тестовые спецификации Robot Framework организованы в виде файлов и каталогов. Типовое расширение файла — *.robot, файл .robot — это тестовая подсистема (suite), включающая множество тест-кейсов. Любая папка, содержащая одну или несколько .robot-файлов, также считается тестовой подсистемой.

Многие концепции заимствованы из Python: вызовы ключевых слов внутри теста определяются, как и блоки в Python, с помощью отступов (нескольких пробелов).

Синтаксис оптимизирован под читаемость: инструкции и их аргументы разделяются несколькими пробелами, реже — вертикальными чертами ("|")[18]. В отличие от Python, параметры не заключаются в скобки и не разделяются запятыми: например, Login User User1 123456 вместо login_user("User1", "123456").

По умолчанию все аргументы — строки, кавычки обязательны только для переменных, которые обозначаются формой ${my_variable}.

Код структурируется на секции, начинающиеся с *** Имя секции ***: Settings (Настройки), Variables (Переменные), Test Cases (Тест-кейсы), Keywords (Ключевые слова) и др.

Пример (test.robot)

В этом примере содержится два тестовых случая, каждый вызывает четыре ключевых слова, получаемых из файла ресурсов keywords.resource.

*** Settings ***
Documentation     A test suite for valid login.
...
...               Keywords are imported from the resource file
Resource          keywords.resource
Default Tags      positive

*** Variables ***
${user}    max0815

*** Test Cases ***
Login User with Password
    Connect To Server
    Login User            ${user}    1234567890
    Verify Valid Login    Max Mustermann
    [Teardown]    Close Server Connection

Denied Login with Wrong Password
    [Tags]    negative
    Connect To Server
    Run Keyword And Expect Error    *Invalid Password    Login User    ${user}    123
    Verify Unauthorised Access
    [Teardown]    Close Server Connection

Пример определения ключевых слов (keywords.resource)

В Robot Framework можно определять составные ключевые слова на собственном скриптовом языке, без необходимости переходить к другому языку программирования. Такие определения могут размещаться как в специальных ресурсных файлах, так и в самих тестовых файлах.

*** Settings ***
Library           MyServerAPI

*** Keywords ***
Login User
    [Arguments]    ${login}    ${password}
    Set Login Name    ${login}
    Set Password    ${password}
    Execute Login

Verify Valid Login
    [Arguments]    ${exp_full_name}
    ${version}=    Get Server Version
    Should Not Be Empty    ${version}
    ${name}=    Get User Name
    Should Be Equal    ${name}    ${exp_full_name}

Аналогичная реализация на Python:

from MyServerAPI import *

def login_user(login, password):
    set_login_name(login, password)
    set_password(password)
    execute_login()

def verify_valid_login(exp_full_name):
    version = get_server_version()
    assert len(version) != 0
    name = get_user_name()
    assert name == exp_full_name

Gherkin-нотация (поведенческий BDD)

Robot Framework поддерживает тестирование по ключевым словам и через Gherkin-нотацию, популярную для поведенческой разработки.

*** Settings ***
Documentation     Feature: Login shall only be granted for authenticated users.
Resource          keywords.resource
Test Teardown     Close Server Connection

*** Test Cases ***
Login User with valid Password
    Given the server is connected
    When the user "max0815" with the password "1234567890" is logged in
    Then the user "Max Mustermann" should be logged in

*** Keywords ***
the server is connected
    Connect To Server

the user "${login}" with the password "${pwd}" is logged in
    Login User    ${login}    ${pwd}

the user "${full_name}" should be logged in
    Verify Valid Login    ${full_name}

Локализация

С версии 6.0 в Robot Framework добавлена поддержка многоязычия[19]. Это связано с высоким интересом к проекту по всему миру и особенно значительной его популярностью на немецком рынке.

В настоящее время поддерживаются следующие языки интерфейса[20]:

— болгарский (bg); — боснийский (bs); — чешский (cs); — немецкий (de); — испанский (es); — финский (fi); — французский (fr); — хинди (hi); — итальянский (it); — нидерландский (nl); — польский (pl); — португальский (pt); — бразильский португальский (pt-BR); — румынский (ro); — русский (ru); — шведский (sv); — тайский (th); — турецкий (tr); — украинский (uk); — китайский (упрощённый) (zh-CN); — китайский (традиционный) (zh-TW).

Пример спецификации на немецком языке:

language:de
*** Einstellungen ***
Dokumentation     Feature: Login soll nur für authentifizierte Benutzer erlaubt sein.
Ressource         keywords.resource
Testnachbereitung     Close Server Connection

*** Testfälle ***
Anmelden eines Benutzers mit validen Benutzerdaten
    Angenommen der Server ist verbunden
    Wenn der Benutzer "max0815" sich mit dem Passwort "1234567890" anmeldet
    Dann soll der Benutzer "Max Mustermann" angemeldet sein

Расширения

Для Robot Framework существует множество библиотек[6], в том числе основанные на Selenium (например, SeleniumLibrary) и Playwright (Browser) для тестирования веб-приложений.

Библиотеки могут быть реализованы на Python — для этого достаточно создать Python-модуль или класс, где каждая функция становится ключевым словом для Robot Framework:

from TestObject import TestObject
from robot.api.logger import info, debug, trace, console

class MyServerAPI:

    def __init__(self) -> None:
        self.session = None
        self.login = ''
        self.password = ''
        self.connection: TestObject = None

    def connect(self, ip):
        self.connection = TestObject(ip)

    def disconnect(self):
        self.connection = None

    def set_login_name(self, login):
        '''Sets the users login name and stores it for authentication.'''
        self.login = login
        info(f'User login set to: {login}')

    def set_password(self, password):
        '''Sets the users login name and stores it for authentication.'''
        self.password = password
        info(f'Password set.')

    def execute_login(self):
        '''Triggers the authentication process at the backend and stores the session token.'''
        self.session = self.connection.authenticate(self.login, self.password)
        if self.session:
            info(f'User session successfully set.')
            debug(f'Session token is: {self.session}')
        self.login = self.password = ''

    def get_username(self, user_id=None):
        '''Returns the users full name of the given user_id or if None the own user data.'''
        return self.connection.get_user_name(self.session, user_id)

    def get_server_version(self):
        return self.connection.get_version(self.session)

Также поддерживаются библиотеки на других языках, если реализован сервер по протоколу RemoteInterface[21] (например, через XML-RPC доступны библиотеки на Java).

В 2020 году на RoboCon была создана организация MarketSquare на Github для совместной работы над библиотеками сообщества[22].

Финансирование и организация

Правообладателем Robot Framework с 2015 года является некоммерческий союз Robot Framework Foundation (Robot Framework ry, Хельсинки), целью которого является развитие фреймворка и его сообщества.

Из Устава ассоциации (перевод, декабрь 2023):

2. Цель и форма деятельности

Цель ассоциации — продвижение использования открытого инструмента Robot Framework, обеспечение и финансирование его поддержки и развития. Ассоциация обеспечивает свободный доступ к инструменту для всех через интернет, гарантирует возможность его использования для автоматизации тестирования и RPA как сейчас, так и в будущем.

Также задачей является поддержка сообщества пользователей и распространение знаний о тестовой и роботизированной автоматизации с помощью Robot Framework.

Для достижения целей ассоциация финансирует разработку, поддержку и экосистемные проекты, поддерживает платформы сообщества и документацию.

В 2018 году организация открыта для международных членов и быстро выросла. Главные источники финансирования — членские взносы (на конец 2023 года — 65 компаний) и ежегодная конференция RoboCon. Средства идут преимущественно на развитие ядра, инфраструктуру (форум, сайт) и административные расходы.

Совет ассоциации избирается ежегодно, состав в 2023—2024 годах включает участников из Финляндии, Германии и Чехии[23].

Такая организационно-правовая структура — редкость среди open source тестовых фреймворков (например, Cucumber принадлежит приватной фирме SmartBear; либо развитие осуществляют независимые фонды — Software Freedom Conservancy, либо проекты полагаются на добровольную поддержку).

Преимущество модели ассоциации — в демократическом распределении финансов и независимости от интересов отдельных фирм. Это гарантирует невозможность прекращения разработки или ограничения доступа по коммерческим причинам. Примеры, когда коммерческие решения приводили к прекращению развития — Gauge[24] и Cucumber[25].

RPA

Хотя изначально Robot Framework проектировался для автоматизации тестирования, он также широко применяется как платформа для роботизированной автоматизации процессов (RPA). С версии 3.1[26] добавлена поддержка специальных сущностей — задач (Tasks), которые реализуются аналогично тест-кейсам:

*** Settings ***
Library    SeleniumLibrary
Task Teardown    Close Browser

*** Tasks ***
Suche 'Robot Framework' mit Google
    Open Browser    https://www.google.de    headlesschrome
    Input Text    lst-ib    Robot Framework
    Click Button    Google-Suche
    Capture Screenshot

Благодаря близости RPA и тестовой автоматизации, командам, работающим с Robot Framework, легко интегрировать RPA-функциональность в уже существующую инфраструктуру[27].

Примечания

  1. Release 7.3.2 — 2025.
  2. https://code.google.com/p/robotframework/downloads/list
  3. Robot Framework Homepage (англ.). robotframework.org. Дата обращения: 30 июня 2024.
  4. Keyword-Driven Testing jenseits des Hypes: Eine kritische Bestandsaufnahme (нем.), heise.de, heise online (18 September 2015). Архивировано 12 декабря 2024 года. Дата обращения: 30 июня 2024.
  5. Robot Framework Tools (англ.). robotframework.org. Дата обращения: 30 июня 2024. Архивировано 8 сентября 2025 года.
  6. 1 2 Robot Framework Libraries on PyPI.org (англ.). pypi.org. Дата обращения: 30 июня 2024. Архивировано 12 декабря 2024 года.
  7. 1 2 Robot Framework Foundation (англ.). robotframework.org (12 апреля 2016). Дата обращения: 30 июня 2024. Архивировано 15 апреля 2016 года.
  8. EU Wortmarke - Robot Framework (англ.). European Union Intellectual Property Office (29 мая 2020). Дата обращения: 30 июня 2024. Архивировано 11 октября 2025 года.
  9. US Trademark - Robot Framework (англ.). United States Patent and Trademark Office (USPTO) (15 июня 2021). Дата обращения: 30 июня 2024. Архивировано 12 октября 2025 года.
  10. Laukkanen, Pekka: "Data-Driven and Keyword-Driven Test Automation Frameworks", 2006 (англ.). Дата обращения: 30 июня 2024. Архивировано 26 декабря 2024 года.
  11. Robot Framework: Past, Present and Future. eficode.com. Дата обращения: 30 июня 2024. Архивировано 21 июня 2020 года.
  12. Google Code Archive of Robot Framework (англ.). Дата обращения: 30 июня 2024.
  13. Robot Framework Versionen auf PyPI.org (англ.). pypi.org (26 июня 2008). Дата обращения: 30 июня 2024. Архивировано 30 июля 2025 года.
  14. What is Robot Framework? The Story Behind a Robotic Testing Ecosystem. copado.com. Дата обращения: 30 июня 2024. Архивировано 16 июня 2025 года.
  15. Внесение в реестр объединения Robot Framework ry (фин.). Patentti- ja rekisterihallitus (Финляндия) (17 июля 2015). Дата обращения: 30 июня 2024. Архивировано 12 декабря 2024 года.
  16. Robocon (англ.). Robot Framework Foundation. Дата обращения: 30 июня 2024.
  17. PyPI 2FA Security Key Giveaway (нем.). pypi.org. Дата обращения: 30 июня 2024. Архивировано 21 августа 2025 года.
  18. Robot Framework User Guide — Test Data Syntax. robotframework.org. Дата обращения: 30 июня 2024. Архивировано 29 сентября 2025 года.
  19. robotframework/doc/releasenotes/rf-6.0.rst at master · robotframework/robotframework (англ.). github.com. Дата обращения: 30 июня 2024. Архивировано 6 июня 2025 года.
  20. Pekka Klärck. Localization in RF 6.0 (англ.). github.com (8 января 2023). Дата обращения: 30 июня 2024. Архивировано 6 июня 2025 года.
  21. RemoteInterface (англ.). github.com. Дата обращения: 30 июня 2024. Архивировано 19 июня 2025 года.
  22. Robot Framework Community's shared code repositories (англ.). github.com. Дата обращения: 30 июня 2024. Архивировано 7 августа 2025 года.
  23. Your Robot Framework News November 2023! Дата обращения: 30 июня 2024. Архивировано 10 декабря 2023 года.
  24. Gauge and Taiko in 2021 · Issue #1732 · getgauge/gauge (англ.). Дата обращения: 30 июня 2024. Архивировано 12 декабря 2024 года.
  25. Matt Wynne. Every ending is a new beginning (англ.) (23 февраля 2023). Дата обращения: 30 июня 2024. Архивировано 3 августа 2025 года.
  26. Pekka Klärck. Robot Framework 3.1 - Release Notes (англ.). Дата обращения: 30 июня 2024. Архивировано 6 июня 2025 года.
  27. André Rist, Markus Stahl. Qualität komplexer Systeme mit Open-Source-Tools verifizieren. (нем.). German Testing Magazin. SIGS DATACOM GmbH (май 2019). Дата обращения: 30 июня 2024. Архивировано 12 декабря 2024 года.

Литература

  • André Rist, Markus Stahl (Deutsche Post Adress): Проверка качества сложных систем с помощью open source-инструментов
  • Dmytro Borysov: Robot Framework vs Pytest
  • Lisa Crispin: Team Commitment to Quality
  • Heise Online: Автоматизированное тестирование с Robot Framework
  • Christian Müller (Noser Engineering): Простая автоматизация тестирования с Robot Framework
  • Joe Colantonio: Robot Framework Creator Pekka Klärck
  • Paul Laihonen (Eficode): Robot Framework: Past, Present and Future
  • Katri Ordning (KONE): Robot Framework в KONE