Очистка ресурсов после каждого теста

#robotframework

#robotframework

Вопрос:

Я использую robot framework для тестирования REST API, и поэтому мне приходится создавать много временных ресурсов (тестовый пользователь или любой другой ресурс). Они абстрагируются в ключевом слове, но мне нужно очищать их после каждого теста. Но я бы хотел не беспокоиться об очистке этого явно в каждом тесте, поскольку для этого потребуется, чтобы наш тестовый пример «воспроизводился» на разных уровнях абстракции.

Было бы здорово, если бы ключевое слово teardown выполнялось после завершения testcase, а не непосредственно после завершения ключевого слова.

Я провел некоторое исследование, но не нашел хорошего способа справиться с этим.

Есть ли какое-либо решение для очистки ресурсов, созданных в ключевом слове в конце тестового примера, без явного выполнения этого в тестовом примере?

вот пример кода, иллюстрирующий ситуацию:

помощник.робот

 *** Keywords ***
    a user exists
       create a user

    Delete user
       actually remove the user
 

test.robot
Помощник по ресурсам.робот

 *** Test Cases ***
test user can login
    Given a user exists
    When user login
    Then it succeeds

    [Teardown]    Delete user
 

Я хочу переместить удаление из тестового примера каким-либо другим способом, который удаляет пользователя после каждого тестового примера, но без указания if в каждом тестовом примере. Я не хочу настраивать это точное удаление на уровне настроек, поскольку мы не всегда используем один и тот же ресурс для всех тестовых случаев.

Комментарии:

1. Так в чем же на самом деле ваш вопрос? Вы упомянули демонтаж, так что вы, очевидно, знакомы с концепцией; вам интересно — как это используется в RobotFramework? Или где его установить, в отдельных тестах или в описании пакета? Или как это должно охватывать все ваши ресурсы? 🙂 Трудно вычесть, то, что вы поставили до сих пор, — это утверждение, а не вопрос 🙂

2. Я ищу решение проблемы, объясненное, а затем предложенное решение, которое я попробовал. Что я хочу, так это способ очистки ресурсов, которые создаются внутри ключевого слова an, таким образом, абстрагируемого в тестовом примере, без необходимости управлять этой очисткой с уровня тестового примера. Решение для демонтажа не работает, поскольку оно либо выполняется рано (если в ключевом слове), либо на неправильном уровне абстракции (в тестовом примере)

3. демонтаж выполняется после каждого теста или после каждого набора . Не после каждого ключевого слова. С какой проблемой вы столкнулись?

4. @PDHide это понятнее с примером?

5. Позвольте мне еще раз взглянуть на мое понимание вашей проблемы — читая комментарии, я думаю, что вы пытаетесь выполнить это — универсальный демонтаж / очистка, определенный один раз, который удалит только объекты, созданные в конкретном случае (а не другие, которые не созданы здесь, но могут быть в некоторыхдругой случай)?

Ответ №1:

https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#test-setup-and-teardown

На момент написания единственными специальными тегами являются robot: exit, которые автоматически добавляются в тесты при корректной остановке выполнения теста, и robot:no-dry-run, которые можно использовать для отключения режима пробного запуска. В будущем, вероятно, будет добавлено больше вариантов использования. 2.2.6 Настройка и демонтаж теста

Платформа Robot Framework имеет аналогичные функции настройки и демонтажа тестов, как и многие другие платформы автоматизации тестирования. Короче говоря, настройка теста — это то, что выполняется перед тестовым примером, а разборка теста выполняется после тестового примера. В Robot Framework настройки и разборки — это просто обычные ключевые слова с возможными аргументами.

Настройка и демонтаж всегда являются одним ключевым словом. Если им нужно позаботиться о нескольких отдельных задачах, для этой цели можно создать пользовательские ключевые слова более высокого уровня. Альтернативным решением является выполнение нескольких ключевых слов с использованием встроенного ключевого слова Run Keywords .

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

Самый простой способ указать настройку или демонтаж для тестовых случаев в файле тестового примера — использовать настройки настройки и демонтажа тестов в таблице настроек. Отдельные тестовые примеры также могут иметь свою собственную настройку или демонтаж. Они определяются с помощью настроек [Setup] или [Демонтаж] в таблице тестовых примеров и переопределяют возможные настройки настройки и демонтажа тестов. Отсутствие ключевого слова после настройки [Setup] или [Демонтаж] означает отсутствие установки или демонтажа. Также можно использовать значение NONE, чтобы указать, что тест не имеет настройки / демонтажа.

 *** Settings ***
Test Setup       Open Application    App A
Test Teardown    Close Application

*** Test Cases ***
Default values
    [Documentation]    Setup and teardown from setting table
    Do Something

Overridden setup
    [Documentation]    Own setup, teardown from setting table
    [Setup]    Open Application    App B
    Do Something

No teardown
    [Documentation]    Default setup, no teardown at all
    Do Something
    [Teardown]

No teardown 2
    [Documentation]    Setup and teardown can be disabled also with special value NONE
    Do Something
    [Teardown]    NONE

Using variables
    [Documentation]    Setup and teardown specified using variables
    [Setup]    ${SETUP}
    Do Something
    [Teardown]    ${TEARDOWN}
 

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

Комментарии:

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

2. @JonatanCloutier создайте ключевое слово, которое выполняет taht, и вызовите его при демонтаже

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

4. @Jonatan robotframewrk — это просто абстракция python, поэтому, если вы не хотите выполнять демонтаж, сделайте это в классе слушателя

5. Возможно, что-то связано с классом слушателя, но это не так просто, как я надеюсь. Спасибо за предложение