TestNG - 如何将变量的值作为数据提供者名称传递?
TestNG - How to pass variable's value as dataProvider name?
我有一个字符串变量 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")
因为我正在从另一个 class 读取数据提供者(不在测试 class 中),所以我无法将值传递给 class 基于在一些测试条件下。无论如何,我可以让 dataProvider = whichSet
工作吗?谢谢
基本上您正在尝试将配置文件添加到 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
我有一个字符串变量 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")
因为我正在从另一个 class 读取数据提供者(不在测试 class 中),所以我无法将值传递给 class 基于在一些测试条件下。无论如何,我可以让 dataProvider = whichSet
工作吗?谢谢
基本上您正在尝试将配置文件添加到 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