我是使用命令行界面的新手。所以我只想问一下如何使用CLI技术调用黄瓜的跑步者类。
我有一个包含main方法的Java程序。当测试人员传递参数是测试用例时,它将获取特征文件。 java程序调用自定义API,它将获取正确的功能文件。
接下来我必须调用Cucumber runner类来执行测试用例。我需要传递这个特殊的功能文件作为参数。两个问题,我们可以从不同的main方法调用runner类。我做了一些研究,但我找不到具体的答案。 两个问题,
cucumber.api.cli.Main.main(参数);那么我如何指定我的跑步者类的jar位置。
`FeatureFileCreation.main("为XXXXX&#34); - 获取正确的功能文件的API String [] arguments = {" - ",""}; cucumber.api.cli.Main.main(参数);
我应该在跑步者类中创建一个main方法,这样的话吗?为了使用CLI,我需要创建一个可运行的jar。我应该在我的跑步者课程中有一个主要方法。
`
@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。具有步骤定义和方法的运行器类是diff java程序。
答案 0 :(得分:2)
不幸的是接受答案是不正确的。如果您查看Main.main()
的{{3}},您会注意到它包含: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);
答案 1 :(得分:1)
如果有效,请尝试此操作。您不需要任何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依赖项。