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

问题描述 投票:0回答:1

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

java testng testng-dataprovider
1个回答
0
投票

基本上,您正在尝试将配置文件添加到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

© www.soinside.com 2019 - 2024. All rights reserved.