Устаревшие кейворды и приёмы в Robot Framework

Содержание
Введение
Run Keyword Unless
[Return]
Default Tags
Похожие статьи

Введение

Run Keyword Unless

Run Keyword Unless использовался до появления новых IF ELSE IF ELSE в четвёртой версии робота: Issue 4174

Ниже вы можете изучить пример его применения в Robot Framework версии 3 совместно с Run Keyword If, который тоже потерял свою актуальность, но на момент написания статьи ещё не причислен к устаревшим из-за гораздо более частого использования.

*** Settings *** Documentation IF / ELSE IF / ELSE example using Robot Framework 3. ... Generate a random number. ... Do if-else logic based on the generated number. ... Stop (pass) when the condition is met. *** Variables *** ${MAX_TRIES}= ${50} ${NUMBER_TO_PASS_ON}= 7 *** Test Cases *** IF ELSE Demo In Robot Framework 3 FOR ${i} IN RANGE ${MAX_TRIES} ${random}= Evaluate random.randint(0, 10) ${is_expected}= Evaluate ${random} == ${NUMBER_TO_PASS_ON} Run Keyword Unless ... ${is_expected} ... Log To Console Condition not met. Run Keyword If ... ${is_expected} ... Pass Execution "${random} == ${NUMBER_TO_PASS_ON}" ... ELSE IF ... ${random} > ${NUMBER_TO_PASS_ON} ... Log To Console Too high. ... ELSE ... Log To Console Too low. END

Небольшой пример для Robot Framework версии 4 и выше

*** Settings *** Documentation IF / ELSE IF / ELSE example using Robot Framework 4+. ... Generate a random number. ... Do if-else logic based on the generated number. ... Stop (pass) when the condition is met. *** Variables *** ${MAX_TRIES}= ${50} ${NUMBER_TO_PASS_ON}= 7 *** Test Cases *** IF ELSE Demo FOR ${i} IN RANGE ${MAX_TRIES} ${random}= Evaluate random.randint(0, 10) IF ${random} == ${NUMBER_TO_PASS_ON} Pass Execution "${random} == ${NUMBER_TO_PASS_ON}" ELSE IF ${random} > ${NUMBER_TO_PASS_ON} Log To Console Too high. ELSE Log To Console Too low. END END

python -m robot .\demo.robot

============================================================================== Demo :: IF / ELSE IF / ELSE example using Robot Framework 4+. Generate a ra... ============================================================================== IF ELSE Demo Too high. Too high. Too low. Too high. Too low. Too low. IF ELSE Demo | PASS | "7 == 7" ------------------------------------------------------------------------------ Demo :: IF / ELSE IF / ELSE example using Robot Framework 4+. Gene... | PASS | 1 test, 1 passed, 0 failed ==============================================================================

[Return]

До пятой версии робота использовался [Return], который нельзя было вставить в IF ELSE Issue 4078

В различных случаях использовались Return From Keyword, Return From Keyword If, Run Keyword And Return, Run Keyword And Return If.

Не буду подробно описывать, что я думаю об уровне шизофрении в таком подходе, так как это уже в прошлом.

На смену этому зоопарку в пятом роботе пришёл RETURN

Рассмотрим как выглядел бы пример из статьи про IF ELSE в старом роботе.

*** Settings *** Documentation Tests passing int and float as arguments *** Test Cases *** Adding Integers ${sum1}= Add 1 2 Should Be Equal As Integers ${sum1} 3 *** Keywords *** Add [Arguments] ${addend1} ${addend2} ${result}= Evaluate ${addend1} + ${addend2} [Return] ${result}

То же самое с современным подходом

*** Settings *** Documentation Tests passing int and float as arguments *** Test Cases *** Adding Integers ${sum1}= Add 1 2 Should Be Equal As Integers ${sum1} 3 *** Keywords *** Add [Arguments] ${addend1} ${addend2} ${result}= Evaluate ${addend1} + ${addend2} RETURN ${result}

Разница не выглядит существенной, поэтому нужно изучить различие в подходе в целом.

Пример использования старого [Return] в обычном для робота тех лет ветвлении

*** Settings *** *** Test Cases *** Try Zero ${value}= Describe Number 0 Log To Console ${\n}${value} *** Keywords *** Describe Number [Arguments] ${n} Run Keyword If ${n} < 0 Return From Keyword negative Run Keyword If ${n} == 0 Return From Keyword zero [Return] positive

Более подходящий для этого примера Return From Keyword If

*** Keywords *** Describe Number [Arguments] ${n} Return From Keyword If ${n} < 0 negative Return From Keyword If ${n} == 0 zero [Return] positive

Сравним с современным RETURN, который можно использовать в каждой ветке IF ELSE IF ELSE

*** Settings *** *** Test Cases *** Try Zero ${value}= Describe Number 0 Log To Console ${\n}${value} *** Keywords *** Describe Number [Arguments] ${n} IF ${n} < 0 RETURN negative ELSE IF ${n} == 0 RETURN zero ELSE RETURN positive END

Default Tags

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

Автор статьи: Андрей Олегович

Похожие статьи
Основы
Архитектура
Библиотеки
Переменные: set, reassign…
if else: Условные операторы
in: Оператор принадлежности к списку
Циклы
Перенос на новую строку
[Tags]: теги
JSON
Передача аргументов в кейворд
Evaluate
Поддержка Robot в PyCharm
Ошибки

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: