【发布时间】:2019-04-23 10:11:27
【问题描述】:
我正在尝试在不同的浏览器下运行我的黄瓜测试,所以我有test.xml(是的,目前只有一个浏览器)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="SelfCare" verbose="1" thread-count="1" parallel="tests" configfailurepolicy="continue">
<parameter name="environment" value="TEST" />
<test name="Chrome">
<parameter name="browser" value="chrome" />
<parameter name="width" value="1024" />
<parameter name="height" value="768" />
<classes>
<class name="TestNGRunner">
<methods>
<include name="scenario"/>
</methods>
</class>
</classes>
</test>
</suite>
这个 TestNG 运行器类,我可以从这个运行器类访问参数browser,但我需要将此变量传递给 Cucumber,在 Cucumber 中基于传递的变量创建浏览器实例。到目前为止,我在没有 TestNG 的情况下使用它,并且通过环境变量传递这些变量,但是我认为如果我在不同的浏览器上并行运行测试,这将不起作用。
import cucumber.api.CucumberOptions;
import cucumber.api.testng.CucumberFeatureWrapper;
import cucumber.api.testng.PickleEventWrapper;
import cucumber.api.testng.TestNGCucumberRunner;
import org.testng.annotations.*;
@CucumberOptions(
plugin = {"html:target/cucumber-html-report",
"json:target/cucumber.json",
"pretty:target/cucumber-pretty.txt",
"junit:target/cucumber-results.xml"},
strict = true,
extraGlue = {"src/test/resources/Hooks.java"},
features = {"src/test/resources/Header.feature"}
)
public class TestNGRunner {
private TestNGCucumberRunner testNGCucumberRunner;
private String browser;
@BeforeClass(alwaysRun = true)
public void setUpClass() throws Exception {
testNGCucumberRunner = new TestNGCucumberRunner(this.getClass());
}
@Parameters("browser")
@BeforeTest
public void beforeSuite(String browser) {
System.out.println("Browser for this test set is " + browser);
this.browser = browser;
}
@Test(groups = "Cucumber", description = "Runs Cucumber Feature", dataProvider = "scenarios")
public void scenario(PickleEventWrapper pickleEvent, CucumberFeatureWrapper cucumberFeature) throws Throwable {
testNGCucumberRunner.runScenario(pickleEvent.getPickleEvent());
}
@DataProvider
public Object[][] scenarios() {
return testNGCucumberRunner.provideScenarios();
}
@AfterClass(alwaysRun = true)
public void tearDownClass() throws Exception {
testNGCucumberRunner.finish();
}
}
有什么想法可以实现吗?
【问题讨论】:
标签: java cucumber testng parameter-passing cucumber-java