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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从不同的main方法调用Cucumber runner类相关的知识,希望对你有一定的参考价值。

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

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

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

  1. cucumber.api.cli.Main.main(参数);那么我如何指定我的跑步者类的jar位置。 `FeatureFileCreation.main( “XXXXX”); - 获取正确特征文件的API String [] arguments = {“ - ”,“”}; cucumber.api.cli.Main.main(参数); 如何指定我的罐子所在的位置?我怎样才能传递我的功能文件?`
  2. 我应该在跑步者类中创建一个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程序。

答案

如果有效,请尝试此操作。你不需要任何Runner class。只需调用Main class的静态main方法,该方法对应于从cli运行黄瓜。

    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设置了classpath和jar依赖项。

另一答案

不幸的是,接受答案是不正确的。如果你看看sourceMain.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);

以上是关于如何从不同的main方法调用Cucumber runner类的主要内容,如果未能解决你的问题,请参考以下文章

如何将场景绑定到cucumber java中的特定步骤类

Java:在方法 main 中调用方法

从不同的类调用主变量

如何将参数传递给 Cucumber 中的@before 方法?

从同一个类中的另一个方法调用 main 方法

从 iframe 调用父窗口方法(不同)