使用 System.getProperty() 获取 @CucumberOptions 标签 属性
Get @CucumberOptions tag property using System.getProperty()
我是 运行 Eclipse 中的一个 Maven 项目,用于我的 Cucumber 测试。我的测试运行器 class 看起来像这样:
@RunWith(Cucumber.class)
@CucumberOptions(
tags = { "@Now" },
// tags = { "@Ready" },
// tags = { "@Draft" },
features = { "src/test/java/com/myCompany/FaultReporting/Features" },
glue = { "com.myCompany.myApp.StepDefinitions" }
)
public class RunnerTest {
}
我不想将标签硬编码到测试运行程序中,而是热衷于使用 .command 文件传递它们。 (即使用 System.getProperty("cucumber.tag")
但是,当我将代码行添加到上面的测试运行程序时出现错误:
@RunWith(Cucumber.class)
@CucumberOptions(
tags = { System.getProperty("cucumber.tag") }
// tags = { "@Now" },
// tags = { "@Ready" },
// tags = { "@Draft" },
features = { "src/test/java/com/myCompany/FaultReporting/Features" },
glue = { "com.myCompany.myApp.StepDefinitions" }
)
public class RunnerTest {
}
我得到的错误是:
"The value for annotation attribute CucumberOptions.tags must be a constant expression".
看来它只需要常量而不是参数化值。有人知道解决这个问题的巧妙方法吗?
您可以使用cucumber.options
环境变量在运行时指定标签
mvn -D"cucumber.options=--tags @Other,@Now" test
这将取代测试代码中已包含的标签。
我是这样做的:-
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 Class: 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是我的黄瓜class
@
RunWith(Cucumber.class)
@CucumberOptions(
monochrome = true,
tags = {"@passed"},
glue = "cucumberTest.steps")
public class RunGwMLCompareTests {
public RunGwMLCompareTests(){
}
}
所以基本上现在您可以通过属性文件和其他选项(如粘合定义)设置输出报告和功能文件夹 java class。对于 运行 测试用例只是 运行 你的主要 class.
此致,
维克拉姆帕塔尼亚
我是 运行 Eclipse 中的一个 Maven 项目,用于我的 Cucumber 测试。我的测试运行器 class 看起来像这样:
@RunWith(Cucumber.class)
@CucumberOptions(
tags = { "@Now" },
// tags = { "@Ready" },
// tags = { "@Draft" },
features = { "src/test/java/com/myCompany/FaultReporting/Features" },
glue = { "com.myCompany.myApp.StepDefinitions" }
)
public class RunnerTest {
}
我不想将标签硬编码到测试运行程序中,而是热衷于使用 .command 文件传递它们。 (即使用 System.getProperty("cucumber.tag")
但是,当我将代码行添加到上面的测试运行程序时出现错误:
@RunWith(Cucumber.class)
@CucumberOptions(
tags = { System.getProperty("cucumber.tag") }
// tags = { "@Now" },
// tags = { "@Ready" },
// tags = { "@Draft" },
features = { "src/test/java/com/myCompany/FaultReporting/Features" },
glue = { "com.myCompany.myApp.StepDefinitions" }
)
public class RunnerTest {
}
我得到的错误是: "The value for annotation attribute CucumberOptions.tags must be a constant expression".
看来它只需要常量而不是参数化值。有人知道解决这个问题的巧妙方法吗?
您可以使用cucumber.options
环境变量在运行时指定标签
mvn -D"cucumber.options=--tags @Other,@Now" test
这将取代测试代码中已包含的标签。
我是这样做的:-
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 Class: 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是我的黄瓜class
@
RunWith(Cucumber.class)
@CucumberOptions(
monochrome = true,
tags = {"@passed"},
glue = "cucumberTest.steps")
public class RunGwMLCompareTests {
public RunGwMLCompareTests(){
}
}
所以基本上现在您可以通过属性文件和其他选项(如粘合定义)设置输出报告和功能文件夹 java class。对于 运行 测试用例只是 运行 你的主要 class.
此致,
维克拉姆帕塔尼亚