我的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
答案 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 actioned
或test2 before actioned
但是,在一个场景中同时使用两个标签,然后打印两行。
这些setupChome,setupFirefox功能正在做什么,仅设置驱动程序即可?例如,您可以创建新的系统属性,例如browser
,匹配值并执行一些设置,然后输入:
-Dbrowser=chrome
,它将以这种方式进行设置。