标记的挂钩在每次测试时都在运行

时间:2019-07-09 15:08:41

标签: maven selenium cucumber cucumber-java cucumber-junit

我的Hooks类如下:

@Before("@Firefox")
public void setUpFirefox() {}

@Before("@Chrome")
public void setUpChrome() {}

@After
public void tearDown(){}

当我运行以下命令mvn test -Dcucumber.options="--tags @Chrome"时,两个@Before函数都在调用。

如何根据maven命令运行特定的@Before方法?

我的Runner类(我已经尝试过tags选项,它也对我不起作用):

@RunWith(Cucumber.class)
@CucumberOptions(
        plugin = {"pretty", "json:target/cucumber-reports/Cucumber.json",
                "junit:target/cucumber-reports/Cucumber.xml",
                "html:target/cucumber-reports"},
        features = {"src/test/features/"},
        glue = {"steps"})


public class RunCukesTest {
}

我的功能文件:

Feature: Storybook
  @Test @Widgets @Smoke @Chrome @Firefox
  Scenario: Storybook example
    Given The user clicks on "storybook" index on the homepage
    And Storybook HomePage should be displayed

1 个答案:

答案 0 :(得分:2)

这似乎是因为您具有该场景的两个标签,before挂钩似乎是根据正在运行的场景执行的。例如

-tag命令行--tags @Chrome等指定要运行的方案

-现在基于该方案,使用附加到该方案的标签(测试,小部件,Smoke,Chrome,Firefox)执行before函数

如果您有一个用于Smoke的Before钩子,我想那也会运行。

例如:

(在Scala中)

Before("@test1") { _ =>
    println("test1 before actioned")
  }

  Before("@test2") { _ =>
    println("test2 before actioned")
  }

带有功能文件:

[...]
  @test1
  Scenario: Test scenario 1
    Given Some precondition occurs

  @test2
  Scenario: Test scenario 2
    Given Some precondition occurs

当我运行这些标签中的任何一个时,我都会得到输出

test1 before actionedtest2 before actioned

但是,在一个场景中同时使用两个标签,然后打印两行。

这些setupChome,setupFirefox功能正在做什么,仅设置驱动程序即可?例如,您可以创建新的系统属性,例如browser,匹配值并执行一些设置,然后输入:

-Dbrowser=chrome,它将以这种方式进行设置。