Теги в Robot Framework
Введение | |
Применения тегов для включения/исключения тестов | |
Test Tags | |
Force Tags | |
Default Tags | |
Зарезервированные теги: skip и т.д. | |
Похожие статьи |
Введение
Теги нужны для того чтобы можно было запускать только определённую часть тестов.
Простейший пример: критические тесты выполняются каждый день, менее важные имеют свой тег и выполняются раз в неделю.
Наряду с
[Documentation], [Setup], [Teardown],
[Template]
и [Timeout],
[Tags] являются настройками тест кейса (Settings in the Test Case section)
Официальная документация:
settings-in-the-test-case-section
tagging-test-cases
Применения тегов для включения/исключения тестов
Рассмотрим тест в файле
tags_demo.robot
Он состоит из трёх тест кейсов, один с тегом
critical, второй с тегом weekly а третий без тегов.
Обратите внимание, между Tags и названием тега четыре пробела.
Минимум должно быть два, но четыре сложнее перепутать с одиночным пробелом.
Если запустить этот тест без опций никакого эффекта от тегов не будет.
*** Settings *** *** Test Cases *** Critical Test [Tags] critical Do Something Important Weekly Test [Tags] weekly Do Weekly Checkup Regular Test Log To Console Test Without Tags *** Keywords *** Do Something Important Log To Console Doing Something Important Do Weekly Checkup Log To Console Doing Weekly Checkup
robot tags_demo.robot
==================================================================== Tags Demo ==================================================================== Critical Test Doing Something Important Critical Test | PASS | -------------------------------------------------------------------- Weekly Test Doing Weekly Checkup Weekly Test | PASS | -------------------------------------------------------------------- Regular Test Test Without Tags Regular Test | PASS | -------------------------------------------------------------------- Tags Demo | PASS | 3 tests, 3 passed, 0 failed ==================================================================== Output: C:\Users\Andrei\robot\output.xml Log: C:\Users\Andrei\robot\log.html Report: C:\Users\Andrei\robot\report.html
Из логов видно, что запустились все три тест кейса.
Чтобы выполнить только тесты с тегом critical
robot --include critical tags_demo.robot
==================================================================== Tags Demo ==================================================================== Critical Test Doing Something Important Critical Test | PASS | -------------------------------------------------------------------- Tags Demo | PASS | 1 test, 1 passed, 0 failed ==================================================================== Output: C:\Users\Andrei\robot\output.xml Log: C:\Users\Andrei\robot\log.html Report: C:\Users\Andrei\robot\report.html
Чтобы выполнить все тесты кроме critical
robot --exclude critical tags_demo.robot
==================================================================== Tags Demo ==================================================================== Weekly Test Doing Weekly Checkup Weekly Test | PASS | -------------------------------------------------------------------- Regular Test Test Without Tags Regular Test | PASS | -------------------------------------------------------------------- Tags Demo | PASS | 2 tests, 2 passed, 0 failed ==================================================================== Output: C:\Users\Andrei\robot\output.xml Log: C:\Users\Andrei\robot\log.html Report: C:\Users\Andrei\robot\report.html
Test Tags
То, что раньше назвалось Force Tags. Применяется ко всем тест кейсам, не важно есть них настройки [Tags] или нет.
Добавим в Settings из предыдущего примера раздел Test Tags, в котором будут теги all и default и не будем производить никаких других изменений
*** Settings *** Test Tags all default …
robot tags_demo.robot
и
robot --include all .\demo\Tests\tags_demo.robot
и
robot --include default .\demo\Tests\tags_demo.robot
Дадут одинаковый результат такой же как в предыдущем примере . Выполнятся все три теста.
Если попробовать ислючить один из этих тегов будет ошибка
robot --exclude all tags_demo.robot
[ ERROR ] Suite 'Tags Demo' contains no tests not matching tag 'all'. Try --help for usage information.
robot --exclude default tags_demo.robot
[ ERROR ] Suite 'Tags Demo' contains no tests not matching tag 'default'. Try --help for usage information.
Исключение общего тега
Чтобы исключить общий тег из тест кейса нужно указать его в настройках [Tags] со знаком минус.
Удалим тег default из тест кейса Weekly Test
*** Settings *** Test Tags all default *** Test Cases *** Critical Test [Tags] critical Do Something Important Weekly Test [Documentation] Test has no 'default' tag. [Tags] weekly -default Do Weekly Checkup Regular Test Log To Console Test Without Tags *** Keywords *** Do Something Important Log To Console Doing Something Important Do Weekly Checkup Log To Console Doing Weekly Checkup
robot --include default tags_demo.robot
В данном тест сьюте даст результат аналогичный
robot --exclude weekly tags_demo.robot
==================================================================== Tags Demo ==================================================================== Critical Test Doing Something Important Critical Test | PASS | -------------------------------------------------------------------- Regular Test Test Without Tags Regular Test | PASS | -------------------------------------------------------------------- Tags Demo | PASS | 2 tests, 2 passed, 0 failed ==================================================================== Output: C:\Users\Andrei\robot\output.xml Log: C:\Users\Andrei\robot\log.html Report: C:\Users\Andrei\robot\report.html
Выполнилось два теста.
Теперь, когда есть тест кейс, который не использует тег default можно исключить его и не получить ошибку.
robot --exclude default tags_demo.robot
==================================================================== Tags Demo ==================================================================== Weekly Test :: Test has no 'default' tag. Doing Weekly Checkup Weekly Test :: Test has no 'default' tag. | PASS | -------------------------------------------------------------------- Tags Demo | PASS | 1 test, 1 passed, 0 failed ==================================================================== Output: C:\Users\Andrei\robot\output.xml Log: C:\Users\Andrei\robot\log.html Report: C:\Users\Andrei\robot\report.html
Ислючить тег all по-прежнему нельзя.
robot --exclude all tags_demo.robot
[ ERROR ] Suite 'Tags Demo' contains no tests not matching tag 'all'. Try --help for usage information.
Force Tags
Force Tags это устаревшее название
Test Tags.
Применяется ко всем тест кейсам, не важно есть них настройки [Tags] или нет.
Для соответствия будущим версиям достаточно просто заменить Force на Test.
Так как ничего нового по сравнению с главой
Test Tags
не добавить - можно переходить к следующей главе -
Default Tags
Default Tags
Force Tags это устаревшее название Test Tags. Применяется ко всем тест кейсам, не важно есть них настройки [Tags] или нет.
Для соответствия будущим версиям достаточно просто заменить Force на Test
Default Tags применяются ко всем тестам, у которых нет настройки [Tags]. Для соответсвия будущим версиям робота нужно перенести название
тега в Test Tags. Там где тег должен был применяться ничего менять не нужно, он по-прежнему применится. Если есть случае где дефолтные теги
не применялись нужно будет дополнительно использовать
знак минус перед названием соответствующего бывшего дефолтного тега.
Вот что сообщает нам официальная документация:
Устаревание тегов Force и тегов Default
До Robot Framework 6.0 теги можно было указать для тестов в разделе настроек с помощью двух разных настроек:
Force Tags
Все тесты безоговорочно получают эти теги. Это то же самое, что и Test Tags в настоящее время.
Default Tags
Все тесты получают эти теги по умолчанию. Если у теста есть [Tags], он не получит эти теги.
Обе эти настройки по-прежнему работают, но они считаются устаревшими. В будущем будет добавлено видимое предупреждение об устаревании, скорее всего, в Robot Framework 8.0, и в конечном итоге эти настройки будут удалены. Для упрощения перехода можно использовать такие инструменты, как Tidy.
Обновление Force Tags требует только переименования в Test Tags. Настройка Default Tags будет полностью удалена, но функциональность -tag,
представленная в Robot Framework 7.0, обеспечивает ту же базовую функциональность. Следующие примеры демонстрируют необходимые изменения.
Из
комментариев
автора робота на
GitHub
понятно, что замена Force Tags на Test Tags была сделана для упрощения локализации (т.е. перевода на другие языки).
Отмена Default Tags была сдалана для уменьшения числа доступных настроек с тегами. Это похоже на пример измнений
из разряда потому что могу.
Старый синтаксис
Обратите внимание на тест No default. В нём чтобы отвязаться от тега default
проставлена пустая настройка [Tags].
Так как Default Tags не применяются там где стоит
[Tags] не важно пустой или нет - такой метод работает.
Тест Own and no default тажке отвязан от тега default благодаря наличию [Tags]
*** Settings *** Force Tags all Default Tags default *** Test Cases *** Common only [Documentation] Test has tags 'all' and 'default'. No Operation No default [Documentation] Test has only tag 'all'. [Tags] No Operation Own and no default [Documentation] Test has tags 'all' and 'own'. [Tags] own No Operation
Новый синтаксис
Снова обратите внимание на тест No default.
Теперь чтобы отвязаться от тега default нужно в настройках
[Tags] указать -default
Тест Own and no default уже не может быть отвязан от тега default только благодаря наличию [Tags]
в нём тоже нужно явно указать -default
*** Settings *** Test Tags all default *** Test Cases *** Common only [Documentation] Test has tags 'all' and 'default'. No Operation No default [Documentation] Test has only tag 'all'. [Tags] -default No Operation Own and no default [Documentation] Test has tags 'all' and 'own'. [Tags] own -default No Operation
Reserved tags
Пользователи, как правило, могут свободно использовать любые теги, которые работают в их контексте.
Однако существуют определенные теги, которые имеют предопределенное значение для самого Robot Framework, и использование их для других
целей может иметь неожиданные результаты.
Все специальные теги, которые Robot Framework имеет и будет иметь в будущем, имеют префикс robot:.
Чтобы избежать проблем, пользователи не должны использовать теги с этими префиксами, если только они фактически не активируют специальную
функциональность.
Текущие зарезервированные теги перечислены ниже, но в будущем, вероятно, будет добавлено больше таких тегов.
-
robot:continue-on-failure и robot:recursive-continue-on-failure
Используется для включения режима continue-on-failure.
-
robot:stop-on-failure и robot:recursive-stop-on-failure
Используется для отключения режима continue-on-failure.
-
robot:exit-on-failure
Остановить все выполнение, если тест с этим тегом завершается неудачей.
-
robot:skip-on-failure
Пометить тест для пропуска, если он завершается неудачей.
-
robot:skip
Пометить тест для безусловного исключения.
-
robot:exclude
Пометить тест для безусловного пропуска.
-
robot:private
Пометить ключевое слово как закрытое.
-
robot:no-dry-run
Пометить ключевое слово, которое не будет выполняться в режиме холостого хода.
-
robot:exit
Добавляется в тесты автоматически при корректной остановке выполнения.
-
robot:flatten
Включить ключевое слово выравнивания во время выполнения.
robot:skip
Пометим тегом robot:skip тест кейс Critical Test из предыдущего примера
*** Settings *** Test Tags all default *** Test Cases *** Critical Test [Tags] critical robot:skip Do Something Important Weekly Test [Documentation] Test has no 'default' tag. [Tags] weekly -default Do Weekly Checkup Regular Test Log To Console Test Without Tags *** Keywords *** Do Something Important Log To Console Doing Something Important Do Weekly Checkup Log To Console Doing Weekly Checkup
Теперь при обычном запуске тест кейс будет пропускаться
robot tags_demo.robot
======================================================================== Tags Demo ======================================================================== Critical Test | SKIP | Test skipped using 'robot:skip' tag. ------------------------------------------------------------------------ Weekly Test :: Test has no 'default' tag. Doing Weekly Checkup Weekly Test :: Test has no 'default' tag. | PASS | ------------------------------------------------------------------------ Regular Test Test Without Tags Regular Test | PASS | ------------------------------------------------------------------------ Tags Demo | PASS | 3 tests, 2 passed, 0 failed, 1 skipped ======================================================================== Output: C:\Users\Andrei\robot\output.xml Log: C:\Users\Andrei\robot\log.html Report: C:\Users\Andrei\robot\report.html
Если явно указать, что нужно включить тег robot:skip, то тест будет выбран и сразу же пропущен.
robot --include robot:skip tags_demo.robot
============================================================================== Tags Demo ============================================================================== Critical Test | SKIP | Test skipped using 'robot:skip' tag. ------------------------------------------------------------------------------ Tags Demo | SKIP | 1 test, 0 passed, 0 failed, 1 skipped ============================================================================== Output: C:\Users\Andrei\robot\output.xml Log: C:\Users\Andrei\robot\log.html Report: C:\Users\Andrei\robot\report.html