多个@前/@后与 cucumber 和Spring?

zzoitvuj  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(382)

我不了解cucumber的配置,也找不到任何关于这个的例子。
文件夹结构:

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 .
如何正确配置?

bqjvbblv

bqjvbblv1#

粘合路径上的所有步骤定义和钩子都是全局的。因此,所有场景都可以访问粘合路径上的所有步骤定义,并且在每个场景之前/之后执行粘合路径上的所有钩子。
如果您有只能针对特定场景执行的钩子,那么可以使用条件钩子。要仅在某些场景中运行特定的钩子,可以将before或after钩子与标记表达式相关联。

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-钩子
或者,您可以更改代码的组织。

|- 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 属性公共配置不必重复。

相关问题