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