#spring #junit #cucumber #junit5 #cucumber-jvm
Вопрос:
Я не понимаю конфигурацию огурца и не могу найти ни одного примера по этому поводу.
Структура папок:
src/
|-test/
|-resources/
| |-cucumber/
| |-auth/
| | |-Login.feature
| |-contributions/
| |-ClearanceCertificates.feature
|-java/
|-de/
|-vbg/
|-other/
|-again/
|-important/
|-cucumber/
| |-auth/
| | |-LoginStepDefinitions.java
| |-contributions/
| |-ClearanceCertificatesStepDefinitions.java
|-CucumberBase.java
|-SeleniumApplicationTests.java
CucumberBase.java:
@RunWith(Cucumber.class)
@CucumberOptions(
features = "src/test/resources",
plugin = {"pretty", "html:build/reports/tests/test/cucumber.html"})
public class CucumberBase {}
SeleniumApplicationTests.java:
@CucumberContextConfiguration
@SpringBootTest
class SeleniumApplicationTests {}
Оба *StepDefinitions.java
имеют @Before
и @After
определены. Мое предположение состояло в том, что StepDefinitions
они соответствуют *feature
-файлам на основе местоположения/пакета.
Однако в моих тестах Login.feature
выполняется то, @After
что определено в ClearanceCertificatesStepDefinitions.java
.
Как это должно быть правильно настроено?
Ответ №1:
Все определения шагов и крючки на пути к клею являются глобальными. Таким образом, все сценарии могут получить доступ ко всем определениям шагов на пути клея, и все крючки на пути клея выполняются до/после каждого сценария.
Если у вас есть крючки, которые должны выполняться только для определенного сценария, вы можете использовать условные крючки. Чтобы запустить определенный крючок только для определенных сценариев, вы можете связать крючок до или после с выражением тега.
Feature: Example
@browser
Scenario: Open a browser window
...
@headless
Scenario: Make a http call
...
@After("@browser and not @headless")
public void doSomethingAfter(Scenario scenario){
// only executed after "Open a browser window"
}
https://cucumber.io/docs/cucumber/api/#conditional-hooks
В качестве альтернативы вы можете изменить организацию своего кода.
|- src/test/java/com/example/one/RunCucumberTest1.java
|- src/test/resources/com/example/one/example-1.feature
|- src/test/java/com/example/two/RunCucumberTest2.java
|- src/test/resources/com/example/two/example-2.feature
|- src/test/java/com/example/common/AbstractCucumberTest.java
|- src/test/java/com/example/common/SeleniumApplicationTests.java
@RunWith(Cucumber.class)
@CucumberOptions(extraGlue = "com.example.common")
public abstract class AbstractCucumberTest {}
public class RunCucumberTest1 extends AbstractCucumberTest {}
public class RunCucumberTest2 extends AbstractCucumberTest {}
Cucumber просканирует упаковку бегунка на наличие клея и элементов, чтобы можно было указать путь к клею и элементам. Установив extraGlue
свойство, общую конфигурацию не нужно дублировать.
Комментарии:
1. Большое спасибо! Работает очень хорошо. Теперь использую теги.