0

У меня есть файл описания огурца 'A', который служит в качестве среды настройки (очистка данных и инициализация). Я хочу, чтобы он выполнялся до того, как все другие файлы функций могут запускаться.Как запустить один файл функций в качестве инициализации (т. Е. Перед всеми другими файлами функций) в огурце-jvm?

Это как-то вроде @ перед крючком, как в http://zsoltfabok.com/blog/2012/09/cucumber-jvm-hooks/. Тем не менее, это не работает, потому что моя особенность файлы «A» содержит сотни шагов огурца, и это не так просто, как:

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

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

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

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

Любые предложения?

+0

Если его инициализация, то поместите его в отдельный метод и вызовите этот метод в setup(). Или для вашего сценария, вы хотите, чтобы он был только отдельным файлом функции? –

ответ

0

По умолчанию функции Огурцы выполняются один поток в порядке:

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

выполнение сценария затем по заказу в файле свойств.

Итак, у вас есть функция инициализации в первом каталоге (в альпате) с именем файла, которое сначала сортируется (в алфавитном порядке) в этом каталоге.

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

+0

@ user1559625 Этот ответ работал на вас? – MikeJRamsey56

+0

Это частично делает. Однако это не является гибким, особенно если мне нужно это «A» несколько раз (то есть каждый раз, когда я запускаю некоторые другие функции проверки) – user1559625

0

У меня есть также проект, где мы имеем один файл функции, который содержит очень длинный сценарий под названием 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

+0

Это точная проблема, с которой я столкнулся сейчас. Но как вы можете написать фабрику для создания тестовых данных, которые вы сделали с ОЧЕНЬ ДЛИННЫМ СЦЕНАРИЕМ, КОТОРЫЙ МОЖЕТ СОДЕРЖАТЬ СОТНИ ЛИНИЙ? Этот длинный сценарий создает все данные и причина, по которой я поднимаю этот вопрос в стеке, - спросить, как повторно использовать этот длинный сценарий. – user1559625

+0

Скажите, что этот длинный сценарий выглядит так: Учитывая, что я создаю тестовые данные '1'; И я создаю тестовые данные «2». Учитывая, что я создаю тестовые данные «1000». Каждый шаг похож на вызов функции шага java с разными «1» «2» ... «1000». Как можно достичь этого с помощью одного фабричного класса или метода ?! – user1559625

+0

с использованием параметризованной функции? –