是否可以从java .properties文件中获取黄瓜选项值?
在this SO帖子中,它显示它是从CLI传递的。
这是我的示例类:
@RunWith(Cucumber.class)
@CucumberOptions(
features = {"resources/features/"},
glue = {"classpath:com/"},
tags = {"@foo, @bar"}
)
public class UITestRunner {
}
我不想在这里硬编码标签,而是想从属性文件中取出它。 任何帮助表示赞赏!
答案 0 :(得分:4)
Cucumber最初会查找由cucumber.api.cli.Main
或@CucumberOptions
但你可以覆盖它们(按照这个特定的顺序):
CUCUMBER_OPTIONS
cucumber.options
cucumber.properties
属性cucumber.options
醇>
一旦找到上述选项中的一个,就会使用它。覆盖在名为cucumber.options
或CUCUMBER_OPTIONS
的变量(或属性)中提供。除插件参数外的所有值都将覆盖cucumber.api.cli.Main
或@CucumberOptions
提供的值。插件选项将累加到cucumber.api.cli.Main
或@CucumberOptions
指定的插件。
答案 1 :(得分:2)
希望您知道如果从命令行运行,您可以使用系统属性
mvn test -Dcucumber.options="--features resources/features/ --tags ~@ignore" -Dtest=AnimalsTest
这意味着您可以通过编程方式设置这些属性:
@RunWith(Cucumber.class)
public class CatsRunner {
@BeforeClass
public static void before() {
System.setProperty("cucumber.options", "--features resources/features/ --tags ~@ignore");
}
}
希望能给你一些想法。例如,您可以手动从文件中读取属性,然后实现所需。
编辑:显然以上不起作用。所以这是我的下一个想法,通过扩展Cucumber
类来实现自己的JUnit Cucumber运行器。有关示例,请参阅this。所以在构造函数中你应该完全控制。
答案 2 :(得分:1)
我通过扩展黄瓜转轮解决了这个问题。您可以在此处找到示例:
对于cucumber-jvm 4.0.0:https://github.com/martinschneider/yasew/blob/master/src/main/java/io/github/martinschneider/yasew/junit/YasewRunner.java
对于cucumber-jvm 2.4.0:https://github.com/martinschneider/yasew/blob/db8cd74281139c14603e9ae05548530a7aebbade/src/main/java/io/github/martinschneider/yasew/junit/YasewRunner.java
一些答复和评论中讨论的关键部分是设置cucumber.options
系统属性:
String cucumberOptions =
"--tags @"
+ getProperty(PLATFORM_KEY, DEFAULT_PLATFORM)
+ " --glue io.github.martinschneider.yasew.steps --glue "
+ getProperty(STEPS_PACKAGE_KEY)
+ " --plugin pretty --plugin html:report --plugin json:"
+ getProperty(CUCUMBER_REPORT_DIRECTORY_KEY,
DEFAULT_CUCUMBER_REPORT_DIRECTORY)
+ "/cucumber.json"
+ " "
+ getProperty(FEATURES_DIRECTORY_KEY);
LOG.info("Setting cucumber options ({}) to {}", CUCUMBER_OPTIONS_KEY, cucumberOptions);
System.setProperty(CUCUMBER_OPTIONS_KEY, cucumberOptions);
我正在使用带有Spring和JUnit的设置,但不确定是否有放置此代码的更好的地方。
改写跑步者不是很优雅,但它就像一个魅力!
答案 3 :(得分:0)
项目树中cumulant.properties文件中的替代要素源行的示例是:
cucumber.options=-g StepDefs src\\test\\resources\\Testfeature.feature
Java Book的黄瓜很酷。阅读这篇文章后,我明白了。 我尝试了一段时间,以查看CucumberOptions属性接受的路径...因此,以上是快速解决方案。 ;)
StepDefs是我的步骤定义在项目树中的文件夹。
我更喜欢这种方式将所有内容都放在一个地方。也许是为了将测试套件移植到另一个系统,更常见的是在目标系统中设置一个System变量,这样可能的客户总是在一个目录中放置特征文件。
答案 4 :(得分:0)
我正在寻找一个解决方案,该方法如何在 Dcucumber 选项中的命令行中传递(覆盖)特征文件路径粘合(步骤)路径。这非常具有挑战性,我无法在许多论坛中找到确切的解决方案。终于找到了可行的解决方案
只需在此处发布它就可以帮助任何人。
gradle -Dcucumber.options="-g XX.XXX.XXX.steps --tags @xxxxxx featurefilepath/features/" test
您必须遵循以-g作为第一个选项的顺序。 Thaanks
答案 5 :(得分:-1)
我这样做: -
cucmberOption.properties
#cucumber.options=--plugin html:output/cucumber-html-report
#src/test/resources
cucumber.options.feature =src/test/resources
cucumber.options.report.html=--plugin html:output/cucumber-html-report
Java类:CreateCucumberOptions.java
加载属性文件的方法: -
private static void loadPropertiesFile(){
InputStream input = null;
try{
String filename = "cucumberOptions.properties";
input = CreateCucumberOptions.class.getClassLoader().getResourceAsStream(filename);
if(input==null){
LOGGER.error("Sorry, unable to find " + filename);
return;
}
prop.load(input);
}catch(IOException e){
e.printStackTrace();
}finally{
if(input!=null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
获取和设置CucumberOptions的方法
private String createAndGetCucumberOption(){
StringBuilder sb = new StringBuilder();
String featureFilesPath =
prop.getProperty("cucumber.options.feature");
LOGGER.info(" featureFilesPath: " +featureFilesPath);
String htmlOutputReport =
prop.getProperty("cucumber.options.report.html");
LOGGER.info(" htmlOutputReport: " +htmlOutputReport);
sb.append(htmlOutputReport);
sb.append(" ");
sb.append(featureFilesPath);
return sb.toString();
}
private void setOptions(){
String value = createAndGetCucumberOption();
LOGGER.info(" Value: " +value);
System.setProperty(KEY, value);
}
运行此方法的主要方法: -
public static void main(String[] args) {
CreateCucumberOptions cucumberOptions = new CreateCucumberOptions();
JUnitCore junitRunner = new JUnitCore();
loadPropertiesFile();
cucumberOptions.setOptions();
junitRunner.run(cucumberTest.runners.RunGwMLCompareTests.class);
}
RunGwMLCompareTests.class是我的Cucumber类
@RunWith(Cucumber.class)
@CucumberOptions(
monochrome = true,
tags = {"@passed"},
glue = "cucumberTest.steps")
public class RunGwMLCompareTests {
public RunGwMLCompareTests(){
}
}
所以基本上nopw你可以通过属性文件和其他选项来设置输出报告和功能文件夹,比如胶水定义java类。运行测试用例只需运行主类。
此致 维克拉姆帕坦尼亚