Выполнить все шаги Cucumber Given до шагов Then

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

Feature: A
Scenario: A1 Given I load data A2 Then output is for A1 is output_A1
Scenario A2 Given I load data A2 Then output is for A2 is output_A2

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

Given I load data A2 Given I load data A2
Then output is for A1 is output_A1 Then output is for A2 is output_A2

Есть ли способ сделать это за кулисами и представить отчеты, как в первом случае?

Я думал о том, как заставить огурец запускать сначала все сценарии Given, а затем все сценарии Then.


person Pablo    schedule 16.12.2014    source источник


Ответы (3)


Cucumber на самом деле не различает ключевые слова Given и Then, поэтому вы не можете сказать Cucumber, чтобы сначала запускались все Givens.

Вы можете настроить сценарий для запуска перед всеми остальными:

Scenario: Load data
  Given the Data Exists
  Then I load all the Data

В котором вы загружаете все данные для следующих сценариев

Scenario: A1
  Given the A1 data is loaded
  Then the output for A1 is output_A1

где данный шаг просто проверяет, загружались ли данные

person Kyle    schedule 16.12.2014
comment
Спасибо за ответ, Кайл, но я хотел явно отобразить отчет, как в первой функции. - person Pablo; 18.12.2014

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

Feature: A

Backgroud:
  Given I load data A

Scenario: A1
  When whatever A1
  Then output is for A1 is output_A1

Scenario: A2
  When whatever A2
  Then output is for A2 is output_A2

Хотя поведение, которое вы описываете, может быть выполнено в хуке @Before (аннотация Cucumber), если вы хотите загрузить данные перед каждым сценарием, или в вашем классе Runner, в @BeforeClass (аннотация JUnit), чтобы загрузить его перед всеми тестами .

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

@RunWith(Cucumber.class)
@CucumberOptions(format = "pretty")
public class RunCukesTest {

  @BeforeClass
  public void setUp(){
    // Load data A2
  }
}

Надеюсь это поможет.

person Pedro Lopez    schedule 19.12.2014

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

Поскольку модульные тесты реализованы на языке программирования, легко предварительно загрузить все данные, запустить что-то в определенном порядке и т. д.

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

Scenario: Run the A tests
  When I run the A tests
  Then I should get no errors

Теперь вы можете выполнять загрузку данных и зацикливание на шаге «Когда» и запрашивать сохраненные результаты на шаге «Тогда».

person diabolist    schedule 24.12.2014