Поместите шаг, для которого требуются разные данные на секнарио, в фон корнишона

#cucumber #gherkin

Вопрос:

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

В идеале я хотел бы поместить «создать полет» в фоновом режиме, потому что каждый сценарий требует полета. Моя проблема в том, что для этого фонового шага потребуется использовать разные данные для каждого сценария, и я не уверен, поддерживает ли это cucumber.

Упрощенно говоря, я хотел бы сделать что-то подобное:

 Feature: Arrival flights

Background:
    Given I am logged in to the application
    And a flight is created with the following data
    | Scenario  | Origin     | ETA    | Flightno | Airline
    | 1         | AMS        | 12:00  | 1111     | KM
    | 2         | LIS        | 13:00  | 2222     | TS

Scenario: User is able to open a flight
    When the user opens flight 'Flightno'
    Then flight 'Flightno' is opened

Scenario: User is able to open the open a flight
    When the user opens flight 'Flightno'
    And the user clicks the 'edit flight' button
    Then the edit flight interface is opened for flight 'Flightno'
 

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

Может ли кто-нибудь посоветовать хороший способ сделать это без необходимости включать шаг «создать рейс» в каждый сценарий?

Если это невозможно сделать, и «создать рейс» должен быть в каждом сценарии, может ли кто-нибудь посоветовать, какое ключевое слово я должен использовать для начала этого шага? Поскольку создание полета на самом деле не то, что я хочу проверить, я бы сказал, что это «Данность». Но поскольку мой фон уже начинается с «Данного», это приведет к 2 «Данным» шагам.

Я мог бы поставить » И «перед ним, но это заставило бы сам сценарий начинаться с «И», что, на мой взгляд, выглядит немного странно. Я знаю, что технически это не имеет никакого значения, но я хотел бы знать, каков общепринятый способ сделать это.

Заранее спасибо!

Ответ №1:

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

Не теряя ничего, вы могли бы написать свой сценарий так:

 Feature: Arrival flights

  Scenario: User is able to open a flight
    Given there is flight
    When the user opens the flight
    Then flight is opened

  Scenario: User is able to open the open a flight
    Given there is flight
    When the user opens the flight
    Then user clicks the 'edit flight' button
    And the edit flight interface is opened for the flight
 

На этом there is flight этапе вы создадите рейс со случайными, но уникальными данными и где-нибудь сохраните ссылку на этот рейс. На следующих шагах, которые ссылаются на «рейс», вы затем используете созданный вами рейс.

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

https://cucumber.io/blog/bdd/understanding-screenplay-(часть 1)/

Также обратите внимание, что вам не нужно каждый раз упоминать, что вы вошли в систему. Это совершенно нормально-делать это как часть user opens the flight шага.

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

1. Спасибо за эти идеи, это, несомненно, поможет мне справиться с этим сценарием