TestNG-如何将变量的值作为dataProvider名称传递?

时间:2019-11-07 20:46:05

标签: java testng testng-dataprovider

我有一个字符串变量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正常工作吗?谢谢

1 个答案:

答案 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系统属性运行测试。

Eclipse: enter image description here

CLI

java -Denv=prod -cp ".:../lib/*" org.testng.TestNG testng.xml