{{1}}
我的问题: 我想要一些逻辑,所以当执行@Test时,我应该动态传递数据文件路径,SheetName,TableName,这样就可以使用相同的数据提供者,这将为我提供不同的数据集。
注意:数据提供程序将以表格格式的表格格式以excel中指定的数据的哈希表形式返回。因此,如果将工作表路径,工作表名称和表名称传递给数据提供者,那么我的DP将读取该表并以哈希表的形式返回整个数据表。
答案 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方法在数据提供程序类中获取这些属性值。