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