我是使用命令行界面的新手。所以我只有一个关于如何使用 CLI 技术调用黄瓜的运行器类的问题。
我有一个包含main方法的Java程序。当测试人员传递作为测试用例的参数时,它将获取功能文件。java 程序调用一个定制的 API,该 API 将获取正确的功能文件。
接下来,我必须调用 Cucumber runner 类来执行测试用例。我需要将此特定功能文件作为参数传递。两个问题,我们可以从不同的主方法调用运行器类吗?我做了一些研究,但无法找到具体的答案。 两个问题,
-
cucumber.api.cli.Main.main(arguments);那么如何指定我的运行器类的 jar 位置。
'FeatureFileCreation.main("xxxxx"); - 获取正确功能文件的 API 字符串[] 参数 = {"-", "}; cucumber.api.cli.Main.main(arguments);
- 如何指定我的罐子的位置?如何传递我的功能文件?
-
我应该在 runner 类中创建一个 main 方法,像这样吗?为了使用CLI,因为我需要创建一个可运行的jar。我的跑步器类中应该有一个 main 方法。
'
@RunWith(Cucumber.class)
@Cucumber.Options(features="C:/Users/IBM_ADMIN/Desktop/CRAutomation/CR Regression1/src/My.feature",glue={"bell.canada.step.definition"})
public class AutomationRunnerAction {
public void main(){
}
}`
请注意,获取正确的功能文件是 1 个 java API。我将从一个 java 程序的一个主要方法调用该 API。带有步骤定义和方法的运行器类是一个差异Java程序。
不幸的是,接受答案不正确。如果您查看Main.main()
的来源,您会注意到它包含:终止系统的System.exit(exitstatus)
。
以编程方式运行命令行的正确方法是使用如下Main.run()
:
String [] argv = new String[]{ "-g","","./src/main/java/featureDetails/Testing.feature"};
ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
byte exitstatus = Main.run(argv, contextClassLoader);
如果这有效,请尝试此操作。您不需要任何Runner class
.只需调用对应于从 cli 运行黄瓜的Main class
的静态 main 方法。
public static void main(String[] args) throws Throwable {
//Your code to get feature file full path
Main.main(new String[]{"-g", "classpath to step definition file", "Full path to feature file"});
// My stepdefinition is inside java package at cucumber.sample.test
// My feature file is inside src/test/resources/features/samplethree.feature
}
对于标签或插件等其他参数,请使用"-t","@Tags"
.重要提示:功能文件路径必须是最后一个选项。
我正在为 Eclipse 运行这个,Maven 设置类路径和 jar 依赖项。