Template в Robot Framework

Содержание
Введение
Test Template Setting
Data-driven Style
Именованные столбцы
Аргументы встроенные в имя ключевого слова
Похожие статьи

Введение

Шаблоны тестов преобразуют обычные тестовые наборы, управляемые ключевыми словами, в тесты, управляемые данными.

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

Вместо многократного повторения одного и того же ключевого слова для каждого теста и/или для всех тестов в файле можно использовать его только для каждого теста или только один раз для каждого файла.

Ключевые слова, используемые в качестве шаблона, могут принимать как обычные позиционные, так и именованные аргументы, а также аргументы, встроенные в название ключевого слова .

В отличие от других настроек, невозможно определить шаблон с помощью переменной.

Основное использование

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

То, что тест-кейс использует шаблон можно указать с помощью настройки тест кейса [Template] после объявления имени тест-кейса.

*** Test Cases *** Normal test case Example keyword first argument second argument Templated test case [Template] Example keyword first argument second argument Another templated test case [Template] Example keyword first argument second argument

Test Template

Если все тест-кейсы в тестовом наборе (Test Suite) используют один и тот же шаблон, можно указать его в разделе
*** Settings ***
с помощью Test Template

*** Settings *** Test Template Example keyword *** Test Cases *** Templated test case first round 1 first round 2 second round 1 second round 2 third round 1 third round 2 Another templated test case first round 1 first round 2 second round 1 second round 2 third round 1 third round 2

В этом примере не пришлось два раза писать [Template]. Использовать или не использовать Test Template обычно решают на основе конкретной архитектуры тестов.

Пример, совмещающий в себе применение Test Template и встроенные в имя ключа аргументы (Embedded Arguments), вы можете изучить здесь

Подходы к написанию тестов

Шаблоны - это инструмент для Data-driven тестирования. Чтобы понять суть этого подхода обычно объясняют его отличия от Keyword-driven тестирования.

Keyword-driven Style

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

Их обычная структура заключается в следующем:

Data-driven Style

Другим стилем написания тест-кейсов является подход, основанный на данных, при котором в тест-кейсах используется только одно ключевое слово более высокого уровня, часто создаваемое как пользовательское ключевое слово, которое скрывает фактический рабочий процесс тестирования.

Эти тесты очень полезны, когда необходимо протестировать один и тот же сценарий с разными входными и/или выходными данными.

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

официальная документация

Пример

Пример с использованием шести отдельных тестов, разница между которыми только в названии и аргументах, которые передаются в шаблон. В этом примере используется Test Template и именованные столбцы. Для имитации незаполненного поля используем специальную переменную ${EMPTY}

*** Settings *** Test Template Login with invalid credentials should fail *** Test Cases *** USERNAME PASSWORD Invalid User Name invalid ${VALID PASSWORD} Invalid Password ${VALID USER} invalid Invalid User Name and Password invalid invalid Empty User Name ${EMPTY} ${VALID PASSWORD} Empty Password ${VALID USER} ${EMPTY} Empty User Name and Password ${EMPTY} ${EMPTY}

Присвоение столбцам имен, как в примере выше, облегчает понимание тестов.

Это возможно потому, что в строке заголовка игнорируются все ячейки, кроме первой.

Приведенный выше пример содержит шесть отдельных тестов, по одному для каждой недопустимой комбинации пользователя и пароля.

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

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

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

Какой стиль использовать, зависит от контекста и личных предпочтений.

*** Test Cases *** Invalid Password [Template] Login with invalid credentials should fail invalid ${VALID PASSWORD} ${VALID USER} invalid invalid whatever ${EMPTY} ${VALID PASSWORD} ${VALID USER} ${EMPTY} ${EMPTY} ${EMPTY}

Именованные столбцы

Применим подход с именованными столбцами к тесту из моего демо проекта

*** Settings *** Documentation Flasky App Login DD Test Resource users/users.resource Suite Setup Setup Suite Force Tags ui login Test Template Submiting credentials should forward to page with title *** Variables *** *** Keywords *** Create Unique User &{unique_user}= Generate Unique User Set Suite Variable ${unique_user} Setup Suite Create Unique User Register User user=${unique_user} # To reduce variable names two new # variables are created here ${VALID USER}= Set Variable ${unique_user.username} Set Suite Variable ${VALID USER} ${VALID PASSWD}= Set Variable ${unique_user.password} Set Suite Variable ${VALID PASSWD} Test Setup Tasks Start Chromium Browser Test Teardown Tasks Close Browser Submiting credentials should forward to page with title [Arguments] ${username} ${password} ${expected_title} Open Browser To Login Page Log ${username} Log ${password} Input Username ${username} Input Password ${password} Submit Credentials ${title}= Get Title Log ${title} Should Be Equal ${title} ${expected_title} *** Test Cases *** USERNAME PASSWORD EXPECTED TITLE Valid Credentials ${VALID USER} ${VALID PASSWD} User Information - Demo App Invalid User Name invalid ${VALID PASSWD} Login Failure - Demo App Invalid Password ${VALID USER} invalid Login Failure - Demo App Invalid User Name and Password invalid invalid Login Failure - Demo App Empty User Name ${EMPTY} ${VALID PASSWD} Log In - Demo App Empty Password ${VALID USER} ${EMPTY} Log In - Demo App Empty User Name and Password ${EMPTY} ${EMPTY} Log In - Demo App Empty User Name Invalid Password ${EMPTY} invalid Log In - Demo App Invalid User Name Empty Password invalid ${EMPTY} Log In - Demo App

Аргументы встроенные в имя ключевого слова

Рассмотрим пример шаблона, в котором аргументы встроены в само название ключевого слова.

Из официальной документации можно узнать, что шаблоны поддерживают вариацию синтаксиса встроенных аргументов .

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

Результирующее ключевое слово затем используется без позиционных аргументов.

Лучше всего это проиллюстрировать на примере:

*** Keywords *** The result of ${calculation} should be ${expected} ${result} = Calculate ${calculation} Should Be Equal ${result} ${expected} *** Test Cases *** Normal test case with embedded arguments The result of 1 + 1 should be 2 The result of 1 + 2 should be 3 Template with embedded arguments [Template] The result of ${calculation} should be ${expected} 1 + 1 2 1 + 2 3

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

Однако имена аргументов не обязательно должны совпадать с аргументами исходного ключевого слова, и также возможно использовать совершенно разные аргументы:

*** Test Cases *** Different argument names [Template] The result of ${foo} should be ${bar} 1 + 1 2 1 + 2 3 Only some arguments [Template] The result of ${calculation} should be 3 1 + 2 4 - 1 New arguments [Template] The ${meaning} of ${life} should be 42 result 21 * 2

Основное преимущество использования встроенных аргументов с шаблонами заключается в том, что имена аргументов указываются явно.

При использовании обычных аргументов похожего эффекта можно достичь, присвоив имена столбцам, содержащим аргументы.

Это проиллюстрировано в разделе Data-driven Style , более того можно совместить именованные столбцы и встроенные аргументы.

*** Settings *** Documentation Flasky App Login DD Test Resource users/users.resource Suite Setup Setup Suite Force Tags ui login *** Variables *** *** Keywords *** Create Unique User &{unique_user}= Generate Unique User Set Suite Variable ${unique_user} Setup Suite Create Unique User Register User user=${unique_user} Test Setup Tasks Start Chromium Browser Test Teardown Tasks Close Browser Providing ${username} and ${password} Title Should Be ${expected} Open Browser To Login Page Log ${username} Log ${password} Input Username ${username} Input Password ${password} Submit Credentials ${title}= Get Title Log ${title} Should Be Equal ${title} ${expected} *** Test Cases *** Login With Credentials [Documentation] A test case that covers both ... valid, invalid and missing ... credentials entry [Template] Providing ${username} and ${password} Title Should Be ${expected} ${unique_user.username} ${unique_user.password} User Information - Demo App WRONG WRONG Login Failure - Demo App ${unique_user.username} WRONG Login Failure - Demo App WRONG ${unique_user.password} Login Failure - Demo App ${EMPTY} ${EMPTY} Log In - Demo App ${unique_user.username} ${EMPTY} Log In - Demo App ${EMPTY} ${unique_user.password} Log In - Demo App WRONG ${EMPTY} Log In - Demo App ${EMPTY} WRONG Log In - Demo App

Такой набор тестов считается одним текст кейсом

robot login.robot

============================================================================== Login :: Flasky App Login DD Test ============================================================================== Login With Credentials | PASS | ------------------------------------------------------------------------------ Login :: Flasky App Login DD Test | PASS | 1 test, 1 passed, 0 failed ============================================================================== Output: /robot/src/tests/ui/output.xml Log: /robot/src/tests/ui/log.html Report: /robot/src/tests/ui/report.html

Внутри этого тест кейса кейворд Providing ${username} and ${password} Title Should Be ${expected} будет выполнен восемь раз, причём в логе будут видны уже подставленные значения аргументов, например:

Providing WRONG and WRONG Title Should Be Login Failure - Demo App

Robot www.testsetup.ru

Если решение с одним тест кейсом на все варианты введённых данных не подходит - можно разбить тест кейс на несколько.

Так как везде будет использоваться один и тот же шаблон - уместно применить Test Template и не писать везде [Template]

В следующем примере используется код из предыдущего с тем отличием, что в *** Settings *** добавлен Test Template а тест кейс разбит на три части по типу введённых учётных данных.

*** Settings ***Test Template Providing ${username} and ${password} Title Should Be ${expected}*** Test Cases *** With Valid Credentials ${unique_user.username} ${unique_user.password} User Information - Demo App With Invalid Credentials WRONG WRONG Login Failure - Demo App ${unique_user.username} WRONG Login Failure - Demo App WRONG ${unique_user.password} Login Failure - Demo App With Missing Credentials ${EMPTY} ${EMPTY} Log In - Demo App ${unique_user.username} ${EMPTY} Log In - Demo App ${EMPTY} ${unique_user.password} Log In - Demo App WRONG ${EMPTY} Log In - Demo App ${EMPTY} WRONG Log In - Demo App

Robot www.testsetup.ru
Test Template

Совместим встроенные аргументы, Test Template и именованные столбцы

*** Settings *** Documentation Flasky App Login DD Test Resource users/users.resource Suite Setup Setup Suite Force Tags ui login Test Template Providing ${username} and ${password} Title Should Be ${expected} *** Variables *** *** Keywords *** Create Unique User &{unique_user}= Generate Unique User Set Suite Variable ${unique_user} Setup Suite Create Unique User Register User user=${unique_user} # To reduce variable names two new # variables are created here ${VALID USER}= Set Variable ${unique_user.username} Set Suite Variable ${VALID USER} ${VALID PASSWD}= Set Variable ${unique_user.password} Set Suite Variable ${VALID PASSWD} Test Setup Tasks Start Chromium Browser Test Teardown Tasks Close Browser Providing ${username} and ${password} Title Should Be ${expected} Open Browser To Login Page Log ${username} Log ${password} Input Username ${username} Input Password ${password} Submit Credentials ${title}= Get Title Log ${title} Should Be Equal ${title} ${expected} *** Test Cases *** USERNAME PASSWORD EXPECTED TITLE Valid Credentials ${VALID USER} ${VALID PASSWD} User Information - Demo App Invalid User Name invalid ${VALID PASSWD} Login Failure - Demo App Invalid Password ${VALID USER} invalid Login Failure - Demo App Invalid User Name and Password invalid invalid Login Failure - Demo App Empty User Name ${EMPTY} ${VALID PASSWD} Log In - Demo App Empty Password ${VALID USER} ${EMPTY} Log In - Demo App Empty User Name and Password ${EMPTY} ${EMPTY} Log In - Demo App Empty User Name Invalid Password ${EMPTY} invalid Log In - Demo App Invalid User Name Empty Password invalid ${EMPTY} Log In - Demo App

Такой тест-кейс трактуется как девять отдельных тестов.

Robot www.testsetup.ru
Test Template
Похожие статьи
Robot Framework
Основы
Тест входа в систему
Переменные
Передача аргументов в кейворд

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

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

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

@aofeed

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

@aofeedchat

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