如何从不同的main方法调用Cucumber runner类

时间:2017-04-20 11:21:19

标签: java cucumber command-line-interface main cucumber-jvm

我是使用命令行界面的新手。所以我只想问一下如何使用CLI技术调用黄瓜的跑步者类。

我有一个包含main方法的Java程序。当测试人员传递参数是测试用例时,它将获取特征文件。 java程序调用自定义API,它将获取正确的功能文件。

接下来我必须调用Cucumber runner类来执行测试用例。我需要传递这个特殊的功能文件作为参数。两个问题,我们可以从不同的main方法调用runner类。我做了一些研究,但我找不到具体的答案。 两个问题,

  1. cucumber.api.cli.Main.main(参数);那么我如何指定我的跑步者类的jar位置。

    `FeatureFileCreation.main("为XXXXX&#34); - 获取正确的功能文件的API String [] arguments = {" - ",""}; cucumber.api.cli.Main.main(参数);

    • 如何指定我的jar位置?我怎样才能传递我的功能文件?`
  2. 我应该在跑步者类中创建一个main方法,这样的话吗?为了使用CLI,我需要创建一个可运行的jar。我应该在我的跑步者课程中有一个主要方法。

  3. `

    @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程序。

2 个答案:

答案 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依赖项。