如何从不同的主要方法调用 Cucumber runner class

How to invoke the Cucumber runner class from a different main method

我是命令行界面的新手。所以我只是有一个关于如何使用 CLI 技术调用黄瓜的 runner class 的问题。

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

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

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

    `FeatureFileCreation.main("xxxxx"); - API 获取正确的特征文件 字符串 [] 参数 = {"-", ""}; cucumber.api.cli.Main.main(参数);

    • 如何指定我的 jar 所在的位置?如何传递我的功能文件?`
  2. 我应该在运行器中创建一个 main 方法 class,像这样吗?为了使用 CLI,因为我需要创建一个可运行的 jar。我的 runner class 中应该有一个 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。具有步骤定义和方法的运行程序 class 是一个 diff java 程序。

如果可行,试试这个。您不需要任何 Runner class。只需从 cli.

中调用对应于 运行 cucumber 的 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 依赖项。

很遗憾,接受的答案不正确。如果您查看 Main.main()source,您会注意到它包含: 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);