Data Driver Robot Framework
Введение
Библиотека DataDriver — это расширение для Robot Framework.
DataDriver создает новые тест кейсы на основе файла с данными. Можно использовать .csv, .xls или .xlsx файлы.
Документация
Установка
python -m pip install robotframework-datadriver
Пример
Разберём пример с официальной страницы.
Нам предлагается следующий код
*** Settings *** Library DataDriver Test Template Login With User And Password *** Test Cases *** Login with user ${username} and password ${password} Default UserData *** Keywords *** Login With User And Password [Arguments] ${username} ${password} Log Many ${username} ${password}
И содержимое для .csv файла.
*** Test Cases ***;${username};${password};[Tags];[Documentation] Right user empty pass;demo;${EMPTY};1;This is a test case documentation of the first one. Right user wrong pass;demo;FooBar;2,3,foo;This test case has the Tags 2,3 and foo ;${EMPTY};mode;1,2,3,4;This test case has a generated name based on template name. ;${EMPTY};${EMPTY};; ;${EMPTY};FooBar;; ;FooBar;mode;foo,1; ;FooBar;${EMPTY};foo; ;FooBar;FooBar;foo,2;
Авторы забыли написать, что для запуска в таком виде .csv файл нужно назвать так же как и .robot
файл. Поговорим об этом в главе
«Разделитель и название файла»
Назовём файлы demo.robot
и demo.csv
robot/ ├── demo.csv └── demo.robot
Также ничего не сказано про аргументы Default и UserData.
Их можно просто удалить
*** Settings *** Library DataDriver Test Template Login With User And Password *** Test Cases *** Login with user ${username} and password ${password} *** Keywords *** Login With User And Password [Arguments] ${username} ${password} Log Many ${username} ${password}
Из директории robot_data_driver_demo выполним
python -m robot .\demo.robot
============================================================================== Datadriver Demo ============================================================================== Right user empty pass :: This is a test case documentation of the ... | PASS | ------------------------------------------------------------------------------ Right user wrong pass :: This test case has the Tags 2,3 and foo | PASS | ------------------------------------------------------------------------------ Login with user and password mode :: This test case has a generat... | PASS | ------------------------------------------------------------------------------ Login with user and password | PASS | ------------------------------------------------------------------------------ Login with user and password FooBar | PASS | ------------------------------------------------------------------------------ Login with user FooBar and password mode | PASS | ------------------------------------------------------------------------------ Login with user FooBar and password | PASS | ------------------------------------------------------------------------------ Login with user FooBar and password FooBar | PASS | ------------------------------------------------------------------------------ Datadriver Demo | PASS | 8 tests, 8 passed, 0 failed ==============================================================================
Название тест кейса
Следующий интересный момент - название тест кейса. Если его заменить например на Some Test, все тесты по-прежнему будут выполняться.
Единственной разницей будет появление предупреждения об идентичных названиях тестов.
*** Settings *** Library DataDriver Test Template Login With User And Password *** Test Cases *** Some Test *** Keywords *** Login With User And Password [Arguments] ${username} ${password} Log Many ${username} ${password}
python -m robot .\demo.robot
============================================================================== Datadriver Demo ============================================================================== Right user empty pass :: This is a test case documentation of the ... | PASS | ------------------------------------------------------------------------------ Right user wrong pass :: This test case has the Tags 2,3 and foo | PASS | ------------------------------------------------------------------------------ Some Test :: This test case has a generated name based on template... | PASS | ------------------------------------------------------------------------------ [ WARN ] Multiple tests with name 'Some Test' executed in suite 'Datadriver Demo'. Some Test | PASS | ------------------------------------------------------------------------------ [ WARN ] Multiple tests with name 'Some Test' executed in suite 'Datadriver Demo'. Some Test | PASS | ------------------------------------------------------------------------------ [ WARN ] Multiple tests with name 'Some Test' executed in suite 'Datadriver Demo'. Some Test | PASS | ------------------------------------------------------------------------------ [ WARN ] Multiple tests with name 'Some Test' executed in suite 'Datadriver Demo'. Some Test | PASS | ------------------------------------------------------------------------------ [ WARN ] Multiple tests with name 'Some Test' executed in suite 'Datadriver Demo'. Some Test | PASS | ------------------------------------------------------------------------------ Datadriver Demo | PASS | 8 tests, 8 passed, 0 failed ==============================================================================
Из логов видно, что название тест кейса из .csv файла имеет приоритет над базовым названием в .robot файл.
Работа с .xlsx
Рассмотрим сетап в котором вместо .csv файла используется .xlsx
robot_data_driver_demo/ ├── demo.robot └── demo.xlsx
Чтобы работать с .xlsx файлами нужно установить pandas и openpyxl .
python -m pip install pandas, openpyxl
Collecting pandas Downloading pandas-3.0.2-cp312-cp312-win_amd64.whl.metadata (19 kB) Collecting openpyxl Downloading openpyxl-3.1.5-py2.py3-none-any.whl.metadata (2.5 kB) Collecting numpy>=1.26.0 (from pandas) Downloading numpy-2.4.4-cp312-cp312-win_amd64.whl.metadata (6.6 kB) Collecting python-dateutil>=2.8.2 (from pandas) Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB) Collecting tzdata (from pandas) Downloading tzdata-2026.1-py2.py3-none-any.whl.metadata (1.4 kB) Collecting et-xmlfile (from openpyxl) Downloading et_xmlfile-2.0.0-py3-none-any.whl.metadata (2.7 kB) Collecting six>=1.5 (from python-dateutil>=2.8.2->pandas) Downloading six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB) Downloading pandas-3.0.2-cp312-cp312-win_amd64.whl (9.7 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7/9.7 MB 19.0 MB/s eta 0:00:00 Downloading openpyxl-3.1.5-py2.py3-none-any.whl (250 kB) Downloading numpy-2.4.4-cp312-cp312-win_amd64.whl (12.3 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.3/12.3 MB 18.4 MB/s eta 0:00:00 Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB) Downloading et_xmlfile-2.0.0-py3-none-any.whl (18 kB) Downloading tzdata-2026.1-py2.py3-none-any.whl (348 kB) Downloading six-1.17.0-py2.py3-none-any.whl (11 kB) Installing collected packages: tzdata, six, numpy, et-xmlfile, python-dateutil, openpyxl, pandas Successfully installed et-xmlfile-2.0.0 numpy-2.4.4 openpyxl-3.1.5 pandas-3.0.2 python-dateutil-2.9.0.post0 six-1.17.0 tzdata-2026.1
Затем нужно явно задать имя файла. Можно задать dialect=Excel, но это не обязательно.
*** Settings *** Library DataDriver file=demo.xlsx # dialect=Excel Test Template Login With User And Password *** Test Cases *** Login with user ${username} and password ${password} *** Keywords *** Login With User And Password [Arguments] ${username} ${password} Log Many ${username} ${password}
В самом .xlsx файле нужно проверить, чтобы названия столбцов были в самой первой строке. Иногда при импорте они могут попасть на вторую строку.
В нашем примере я заменил FooBar из .csv файла на Excel
Теперь можно запустить тест и убедиться, что всё работает именно из demo.xlsx
============================================================================== Datadriver Demo ============================================================================== Right user empty pass :: This is a test case documentation of the ... | PASS | ------------------------------------------------------------------------------ Right user wrong pass :: This test case has the Tags 2,3 and foo | PASS | ------------------------------------------------------------------------------ Login with user and password mode :: This test case has a generat... | PASS | ------------------------------------------------------------------------------ Login with user and password | PASS | ------------------------------------------------------------------------------ Login with user and password Excel | PASS | ------------------------------------------------------------------------------ Login with user Excel and password mode | PASS | ------------------------------------------------------------------------------ Login with user Excel and password | PASS | ------------------------------------------------------------------------------ Login with user Excel and password Excel | PASS | ------------------------------------------------------------------------------ Datadriver Demo | PASS | 8 tests, 8 passed, 0 failed ==============================================================================
Разделитель и название файла
Если не указывать явно название файла то DataDriver будет искать отталкиваясь от названия скрипта.
То есть, если ваш скрипт назвается
demo.robot
то нужный файл это
demo.csv
Даже если рядом есть
demo.xlsx
его DataDriver искать не будет и выдаст ошибку
[ ERROR ] [ DataDriver ] Error in robot file: File "C:\robot\demo.robot", line 0 [ ERROR ] Calling method '_start_suite' of listener 'DataDriver' failed: FileNotFoundError: File attribute was empty. Tried to find C:\robot\demo.csv but file does not exist. If no file validation is required, set file_search_strategy=None.
Вернёмся к нашему изначальному сетапу.
robot/ ├── demo.csv └── demo.robot
*** Test Cases ***;${username};${password};[Tags];[Documentation] Right user empty pass;demo;${EMPTY};1;This is a test case documentation of the first one. Right user wrong pass;demo;FooBar;2,3,foo;This test case has the Tags 2,3 and foo ;${EMPTY};mode;1,2,3,4;This test case has a generated name based on template name. …
В этом случае мы можем написать
*** Settings *** Library DataDriver …
*** Settings *** Library DataDriver file=demo.csv dialect=Excel-EU …
*** Settings *** Library DataDriver file=demo.csv dialect=Excel-EU delimiter=; …
*** Settings *** Library DataDriver dialect=Excel-EU delimiter=; …
И все эти варианты будут работать
Если теперь изменить demo.csv таким образом, что разделителем станет запятая а не точка с запятой - потребуется явное указание диалекта
*** Settings *** Library DataDriver dialect=UserDefined delimiter=, …
Если в добавок к этом изменить название файла, например на creds.csv то нужно будет явно указать и его.
*** Settings *** Library DataDriver file=creds.csv dialect=UserDefined delimiter=, …
Автор статьи: Андрей Олегович
| Collections | |
| DataDriver | |
| Operating System | |
| RequestsLibrary | |
| RFBrowser | |
| Selenium | |
| XML | |
| Библиотеки |