Как запустить один файл объектов в качестве инициализации (т.е. перед всеми другими файлами объектов) в cucumber-jvm?

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

Это похоже на @before hook, как в http://zsoltfabok.com/blog/2012/09/cucumber-jvm-hooks/. Однако, это не работает, потому что мои файлы объектов 'A' содержат сотни шагов огурца, и это не так просто, как:

@Before
public void beforeScenario() {
    tomcat.start();
    tomcat.deploy("munger");
    browser = new FirefoxDriver();
}

вместо этого лучше иметь возможность запускать "A" как файл объектов в целом.

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

Самым близким, что я нашел, является "фон". Но это означает, что у меня может быть только один огромный функциональный файл с содержимым "A" в качестве "фона" вверху, а остальная часть моего теста - в том же файле. Я действительно не хочу этого делать.

Какие-либо предложения?

2 ответа

По умолчанию функции Cucumber запускаются в одном потоке в следующем порядке:

  1. В алфавитном порядке по каталогу файлов объектов
  2. В алфавитном порядке по имени файла объекта в каталоге

Выполнение сценария выполняется по порядку в файле объектов.

Так что имейте свою функцию инициализации в первом каталоге (по алфавиту) с именем файла, который сортирует первым (по алфавиту) в этом каталоге.

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

У меня также есть проект, где у нас есть один файл функций, который содержит очень длинный сценарий Scenario: Test data с большим количеством очень длинных сценариев, как это:

Given the system knows about the following employees
|uuid|user-key|name|nickname|
|1|0101140000|Anna|annie|
... hundreds of lines like this follow ... 

Мы рассматриваем эти длинные сценарии SystemKnows как весьма ценные, так что наши тестировщики, владелец продукта и разработчики имеют представление о том, какие данные находятся в системе. Наш домен довольно сложный, и нам нужны эти базовые справочные данные, чтобы каждый мог понять тесты. (Эти справочные данные становятся похожими на хорошо известные персоны и являются общим метафором команды)

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

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

  • Добавить фон одной строкой Given(~'^I set test data for all feature files$')

  • В определении шага создайте фабрику для создания тестовых данных и убедитесь, что внутри метода factore он создается только один раз, например testFactory.createTestData()

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

Надеюсь, что это полезно! Agata

Другие вопросы по тегам