我正在考虑用TestNG运行黄瓜测试。然而,我遇到了一个问题,我的所有方案都作为一个TestNG @Test会话运行。有没有办法将每个场景作为单独的@Test会话运行?
下面是我的TestNG xml:
<suite name="cucumber Suites">
<test name="cucumber-testing">
<classes>
<class name="runners.Run2" />
</classes>
</test>
</suite>这将调用run以下Test类:
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import cucumber.api.CucumberOptions;
import cucumber.api.testng.AbstractTestNGCucumberTests;
import cucumber.api.testng.CucumberFeatureWrapper;
import cucumber.api.testng.TestNGCucumberRunner;
@CucumberOptions( features="cucumber/features/example.feature",
glue="steps",
format={"pretty"}
)
public class Run2 extends AbstractTestNGCucumberTests{
private TestNGCucumberRunner tcr;
@BeforeClass(alwaysRun=true)
public void beforeClass() throws Exception{
tcr = new TestNGCucumberRunner(this.getClass());
}
@Test(groups="cucumber", description="Runs CucumberFeature", dataProvider="features")
public void feature(CucumberFeatureWrapper cucumberFeature){
tcr.runCucumber(cucumberFeature.getCucumberFeature());
}
@DataProvider
public Object[][] features(){
return tcr.provideFeatures();
}
@AfterClass (alwaysRun=true)
public void afterClass(){
tcr.finish();
}
}我想知道是否有一种方法可以让@DataProviderto提供场景和@Test来运行场景而不是特性?
这样做的原因是我对侦听器进行了其他TestNG测试,并且我希望使用相同的侦听器来报告黄瓜测试。
谢谢
发布于 2017-02-02 16:46:17
您可以尝试为每个功能提供一个特定的测试名称:
@CucumberOptions( features="cucumber/features/example.feature",
glue="steps",
format={"pretty"}
)
public class Run2 extends AbstractTestNGCucumberTests implements ITest {
private TestNGCucumberRunner tcr;
private String featureName;
@BeforeClass(alwaysRun = true)
public void beforeClass() throws Exception {
tcr = new TestNGCucumberRunner(this.getClass());
}
@BeforeMethod
public void beforeMethod(Object[] params) {
CucumberFeatureWrapper cucumberFeature = (CucumberFeatureWrapper) params[0];
featureName = cucumberFeature.getCucumberFeature().getGherkinFeature().getName();
}
@Test(groups = "cucumber", description = "Runs CucumberFeature", dataProvider = "features")
public void feature(CucumberFeatureWrapper cucumberFeature) {
tcr.runCucumber(cucumberFeature.getCucumberFeature());
}
@Override
public String getTestName() {
return featureName;
}
@DataProvider
public Object[][] features() {
return tcr.provideFeatures();
}
@AfterClass(alwaysRun = true)
public void afterClass() {
tcr.finish();
}
}如果这是你想要的方式,请告诉我。
发布于 2017-02-01 23:41:20
你有没有试过:
@CucumberOptions( features="cucumber/features/example.feature",
glue="steps",
format={"pretty"}
)
public class Run2 extends AbstractTestNGCucumberTests{
private TestNGCucumberRunner tcr;
@BeforeClass(alwaysRun=true)
public void beforeClass() throws Exception{
tcr = new TestNGCucumberRunner(this.getClass());
}
@Test(groups="cucumber", description="Runs CucumberFeature")
public void scenario(){
for (CucumberFeatureWrapper cucumberFeature : tcr.provideFeatures()) {
tcr.runCucumber(cucumberFeature.getCucumberFeature());
}
}
@AfterClass (alwaysRun=true)
public void afterClass(){
tcr.finish();
}
}发布于 2018-04-10 17:03:20
答案是“是的”,您可以使用TestNG将cucumber中的每个场景作为测试运行。
多么?具体解释如下:
首先,将您的dependencies
@DataProvider公共对象功能(){ return tcr.provideFeatures();}
在@DataProvider中使用"provideScenarios()“方法。
以下Cucumber Runner Class中的Java代码非常适合我在功能文件中将每个场景作为TestNG测试运行:
public class TestRunner {
private TestNGCucumberRunner testNGCucumberRunner;
@BeforeClass(alwaysRun = true)
public void setUpClass() throws Exception {
testNGCucumberRunner = new TestNGCucumberRunner(this.getClass());
}
@Test(groups = "cucumber scenarios", description = "Runs Cucumber
Scenarios", 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();
}
}我很高兴看到你的问题得到解决。
参考:https://github.com/cucumber/cucumber-jvm/blob/master/testng/README.md
https://stackoverflow.com/questions/41983175
复制相似问题