Java Cucumber:从外部源获取@CucumberOptions(如属性文件)

iam*_*nos 4 java bdd cucumber-junit selenium-webdriver cucumber-java

是否可以从java .properties文件中获取黄瓜选项值?

SO帖子中,它表明它是从CLI传递的。

这是我的示例课:

@RunWith(Cucumber.class)
@CucumberOptions(
        features = {"resources/features/"},
        glue = {"classpath:com/"},
        tags = {"@foo, @bar"}
)
public class UITestRunner {

}
Run Code Online (Sandbox Code Playgroud)

我不想在这里对标签进行硬编码,而是从属性文件中获取标签。任何帮助表示赞赏!

Pet*_*mas 6

希望您知道如果从命令行运行,您可以使用系统属性

mvn test -Dcucumber.options="--features resources/features/ --tags ~@ignore" -Dtest=AnimalsTest
Run Code Online (Sandbox Code Playgroud)

这意味着您可以以编程方式设置这些属性:

@RunWith(Cucumber.class)
public class CatsRunner {   

    @BeforeClass
    public static void before() {
        System.setProperty("cucumber.options", "--features resources/features/ --tags ~@ignore");
    }

}
Run Code Online (Sandbox Code Playgroud)

希望能给你一些想法。例如,您可以手动从文件中读取属性,然后实现您想要的。

编辑:显然上述方法不起作用。所以这是我的下一个想法,通过扩展Cucumber类来实现你自己的 JUnit Cucumber runner 。请参阅示例。所以在构造函数中你应该有完全的控制权。


fg7*_*8nc 6

黄瓜将首先查找由cucumber.api.cli.Main或提供的参数@CucumberOptions

但是您可以覆盖它们(按此特定顺序):

  1. 操作系统环境变量 CUCUMBER_OPTIONS
  2. Java系统属性 cucumber.options
  3. cucumber.properties具有cucumber.options属性的Java资源包

找到上述选项之一后,将使用它。覆盖在称为cucumber.options或的变量(或属性)中提供CUCUMBER_OPTIONS。除插件参数外的所有值都将覆盖cucumber.api.cli.Main或提供的值@CucumberOptions。插件选项将加到cucumber.api.cli.Main或指定的插件上@CucumberOptions

  • 您可以在 Cucumber Java Book 中找到。我认为官方文档做得不好(不幸的是)。 (2认同)