如何使用参数从我的Test方法调用Dataprovider

时间:2015-10-12 12:04:45

标签: java testng testng-dataprovider

{{1}}

我的问题: 我想要一些逻辑,所以当执行@Test时,我应该动态传递数据文件路径,SheetName,TableName,这样就可以使用相同的数据提供者,这将为我提供不同的数据集。

注意:数据提供程序将以表格格式的表格格式以excel中指定的数据的哈希表形式返回。因此,如果将工作表路径,工作表名称和表名称传递给数据提供者,那么我的DP将读取该表并以哈希表的形式返回整个数据表。

3 个答案:

答案 0 :(得分:0)

我建议您通过XML提供参数,如Parameters from testng.xml

中的解释

答案 1 :(得分:0)

如果您只想重用获取测试数据的复杂逻辑,为什么不将它移动到辅助函数并将参数传递给不同的数据提供程序?

public class ReusableDataprovider {
    @Test(dataProvider = "data_from_table1")
    public void test1(Hashtable<String, String> data) {
        Assert.assertEquals(data.get("Username"), "user_table1", "Wrong username");
        Assert.assertEquals(data.get("Password"), "pass_table1", "Wrong password");
    }

    @Test(dataProvider = "data_from_table2")
    public void test2(Hashtable<String, String> data) {
        Assert.assertEquals(data.get("Username"), "user_table2", "Wrong username");
        Assert.assertEquals(data.get("Password"), "pass_table2", "Wrong password");
    }

    @DataProvider
    protected Object[][] data_from_table1() {
        return fetchData("file1", "sheet1", "table1");
    }

    @DataProvider
    protected Object[][] data_from_table2() {
        return fetchData("file2", "sheet2", "table2");
    }

    protected Object[][] fetchData(String filePath, String sheetName, String tableName) {

        final Hashtable<String, String> data = new Hashtable<String, String>();
        // Do all the complex excel logic here
        data.put("Username", "user_" + tableName);
        data.put("Password", "pass_" + tableName);

        return new Object[][] {{data}};
    }

}

答案 2 :(得分:0)

您可以使用以下方式:

方法1: 1.为Path,SheetName,TableName创建类变量。 2.使用构造函数初始化这些变量 3.直接将这些变量调用到数据提供程序函数中。

方法2: 1.使用System类在系统属性env中设置Path,SheetName,TableName,或者您可以使用maven,gradle构建工具。 2.使用System getProperty方法在数据提供程序类中获取这些属性值。