我知道@CucumberOptions
用于传递Cucumber选项。但是,由于Java注释仅允许内联常量的限制,使用@CucumberOptions
非常麻烦。那么,使用cucumber-junit时是否有一种动态的方式来传递Cucumber选项?非常感谢你。
答案 0 :(得分:3)
这个问题现在很老了,但答案是肯定的,你可以。
如果您正在使用maven,例如只需像这样添加它。
mvn test -Dcucumber.options="--tags @your_tag"
您可以在运行时以这种方式过滤场景。
希望这有帮助。
答案 1 :(得分:2)
如上所述here,请尝试使用通用的通用代码,并尝试根据您的要求创建最佳优势,而不是依赖于TestNG和jUnit。 根据需要添加更多选项。
private void defaultRun() {
List<String> arguments = new ArrayList<String>();
rguments.add("featureFiles");
String[] tags = tagsToExecute;
for (String tag : tags) {
arguments.add("--tags");
arguments.add(tag);
}
arguments.add("--plugin");
arguments.add(html);
arguments.add("--plugin");
arguments.add(json);
arguments.add("--plugin");
arguments.add(rerun);
String[] gluepackages = gluePackage.split(",");
for (String packages : gluepackages) {
if (!packages.contains("none")) {
arguments.add("--glue");
arguments.add(packages);
}
}
final String[] argv = arguments.toArray(new String[0]);
try {
executetests(argv);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public byte executetests(final String[] argv) throws InterruptedException, IOException {
RuntimeOptions runtimeOptions = new RuntimeOptions(new ArrayList(Arrays.asList(argv)));
MultiLoader resourceLoader = new MultiLoader(this.getClass().getClassLoader());
ResourceLoaderClassFinder classFinder = new ResourceLoaderClassFinder(resourceLoader, this.getClass().getClassLoader());
Runtime runtime = new Runtime(resourceLoader, classFinder, this.getClass().getClassLoader(), runtimeOptions);
runtime.run();
System.out.println(runtime.exitStatus());
return runtime.exitStatus();
}
答案 2 :(得分:0)
您可以有多个Junit Before和After方法,每个方法都由您想要的特定标记(@mytag)执行。在每种方法中,您都可以设置所需的条件。
答案 3 :(得分:0)
这是一个受Sugat Mankar优美线索启发的解决方案,但具有完整的代码,并且已修复错误(尽管对您有用,但对于Gherkin功能文件,您必须具有与我相同的软件包结构和位置)做):
package mypack.cukes;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import cucumber.runtime.RuntimeOptions;
import cucumber.runtime.io.MultiLoader;
import cucumber.runtime.io.ResourceLoaderClassFinder;
import cucumber.runtime.Runtime;
public class MyRunnerTest {
public String[] tagsToExecute = {"@SmokeUtilizationData, @SmokeSummaryData, @SmokeCompliance"};
public String html = "com.cucumber.listener.ExtentCucumberFormatter:target/cucumber-reports/report.html";
public String gluePackage = "mypack.cukes.stepDefinitions";
public String[] argv = null;
public void defaultRun() {
List<String> arguments = new ArrayList<String>();
arguments.add("src/main/java/mypack/cukes/features");
String[] tags = tagsToExecute;
for (String tag : tags) {
arguments.add("--tags");
arguments.add(tag);
}
arguments.add("--plugin");
arguments.add(html);
arguments.add("--glue");
arguments.add(gluePackage);
argv = arguments.toArray(new String[arguments.size()]);
try {
executeTests(argv);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IOException ioex) {
ioex.printStackTrace();
}
}
public byte executeTests(final String[] argv) throws InterruptedException, IOException {
RuntimeOptions runtimeOptions = new RuntimeOptions(new ArrayList(Arrays.asList(argv)));
MultiLoader resourceLoader = new MultiLoader(this.getClass().getClassLoader());
ResourceLoaderClassFinder classFinder = new ResourceLoaderClassFinder(resourceLoader, this.getClass().getClassLoader());
Runtime runtime = new Runtime(resourceLoader, classFinder, this.getClass().getClassLoader(), runtimeOptions);
runtime.run();
System.out.println(runtime.exitStatus());
return runtime.exitStatus();
}
public static void main(String[] args) {
System.out.println("Testing MyRunnerTest");
MyRunnerTest myRun = new MyRunnerTest();
myRun.defaultRun();
}
}
顺便说一句,我的pom文件说: