Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Cucumber JVM ак выполнить pre-condition один раз на весь feature file


(Inessa) #1

:blush:
При использование Cucumber JVM :

  1. как указать порядок выполнения сценариев?
    Пример: Feature1 has Scenario1, Scenario2
    Еxpected: сначала должен быть выполнен Scenario2, затем Scenario1
  2. как выполнить pre-condition один раз на весь feature file?
    Пример: Feature1 has Scenario1, Scenario2. There is pre-condition for both scenarios
    Expected: cначала должен быть выполнен pre-condition затем сценарии. Порядок выполнения сценариев не важен

#2

По первому вопросу - идей нет.
По второму вопросу - такой фичи в Cucumber JVM нет и не планируется. Не могу найти тред, но в какой-то дискуссии разработчик кукумбера прямо заявил, что считает это излишним, хотя много людей присоединились к просьбе.

Есть вариант - организовать всё самостоятельно, т.е. прописать шаг в Background и запоминать состояние: выполнялся или нет. Другая проблема - что выполненный в одной фиче, этот шаг будет считаться выполненным и в следующей. В этом случае, можно в Background передавать уникальный параметр - имя фичи.

То есть, получится примерно так:

Feature: Feature AAA

    Background: # выполняется перед каждым сценарием
        Given Precondition is executed for "Feature AAA"
# далее сценарии

И в шагах:

static Set<String> preconditionsExecuted = new HashSet<>();

@Given("^Precondition is executed for \"([^\"]*)\"$")
public void executePrecondition(String key) {
    if (!preconditionsExecuted.contains(key)) {
        runMyPreconditionForFeature(key);
        preconditionsExecuted.add(key);
    }
}

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


(Василий Чернов) #3

По 1. можно посмотреть тут https://jkotests.wordpress.com/2013/08/22/specify-execution-order-of-cucumber-features/ но лучше придерживаться парадигмы атомарности тестов(независимости друг от друга). Ну или тогда для каждого делать прекондишн.

По 2. хорошо было бы использовать jBehave, но это уже потребует глобальных переделок http://jbehave.org


Do different tests instead of repeating the same tests