我有一个字符串变量whichSet
,可以容纳3个值“ prd”,“ stg”和“ int”。在测试中,我想像这样通过dataProvider传递值:
@Test(enabled = true, dataProvider = whichSet, dataProviderClass = TestDataProvider.class)
但是我有以下错误:
The value for annotation attribute Test.dataProvider must be a constant expression
我已经有3个提供者定义为:
@DataProvider(name="stg")
@DataProvider(name="prd")
@DataProvider(name="int")
由于我正在从另一个类(不在测试类中)读取数据提供程序,因此我无法根据某些测试条件将值传递给该类。无论如何,我可以使dataProvider = whichSet
正常工作吗?谢谢
答案 0 :(得分:1)
基本上,您尝试将配置文件添加到DataProvider
,应该有一个外部参数来驱动此配置文件。解决此问题的方法可能是使用JVM选项。
public class Testng {
@DataProvider(name = "data-provider")
public Object[][] dataProviderMethod() {
switch(System.getProperty("env")) {
case "int":
return new Object[][] { { "int data one" }, { "data two" } };
case "stg":
return new Object[][] { { "stage data one" }, { "data two" } };
case "prod":
return new Object[][] { { "production data one" }, { "data two" } };
default:
return new Object[][] { { "int data one" }, { "data two" } };
}
}
@Test(enabled = true, dataProvider = "data-provider", dataProviderClass = Testng.class)
public void test(String data) {
System.out.println(data);
}
}
然后使用JVM系统属性运行测试。
CLI
java -Denv=prod -cp ".:../lib/*" org.testng.TestNG testng.xml