我正在尝试使用带有哈希映射的数据提供程序从excel表中获取值。现在我可以从excel表中读取整行.excel表有3列“TestcaseId”,“Testdata”,“scriptname” 。我需要将脚本名称作为参数传递给数据提供者的测试方法。请帮我解决如何实现这一点.Below是使用hashmap的数据提供者代码
@DataProvider(name="cbndataprovider")
public static Iterator<Object[]> cbntestdata() throws IOException
{
List <Object[]> alist = new ArrayList<Object[]>();
OriginalExcelRW Excel = new OriginalExcelRW("F:\\anand_acer\\selenium\\cbnindia1\\Test_Data_Sheet.xlsx");
XSSFSheet s = Excel.Setsheet("Test_Data");
int rowcount = s.getLastRowNum();
for(int i =1;i<=rowcount;i++)
{
Object[] obj = new Object[1];
Map<String,String>hm=new HashMap<String,String>();
hm.put(Excel.Readvalue(s, 0, 0), Excel.Readvalue(s, i, 0));
hm.put(Excel.Readvalue(s, 0, 1), Excel.Readvalue(s, i, 1));
hm.put(Excel.Readvalue(s, 0, 2), Excel.Readvalue(s, i, 2));
hm.put(Excel.Readvalue(s, 0, 3), Excel.Readvalue(s, i, 3));
System.out.println(Excel.Readvalue(s, 0, 0)+"...."+ Excel.Readvalue(s, i, 0));
System.out.println(Excel.Readvalue(s, 0, 1)+"...."+ Excel.Readvalue(s, i, 1));
System.out.println(Excel.Readvalue(s, 0, 2)+"...."+ Excel.Readvalue(s, i, 2));
System.out.println(Excel.Readvalue(s, 0, 3)+"...."+ Excel.Readvalue(s, i, 3));
obj[0]=hm;
alist.add(obj);
}
return alist.iterator();
}
}
答案 0 :(得分:0)
您可以将测试上下文传递给数据提供程序方法。这将由TestNG在内部完成。从测试上下文中,您可以查询调用它的测试名称。
将数据提供者的签名更改为
public static Iterator<Object[]> cbntestdata(ITestNGMethod testContext) throws IOException
{
String testName = testContext.getMethodName();
//your regular logic
}
使用从testContext获取的名称从excel获取数据。
答案 1 :(得分:0)
如果我理解正确,您的Excel有一个与Script / ClassName相对应的数据,您需要一些机制,您的测试可以通过该机制直接识别正在运行的测试并获取与其对应的数据。 您可以通过一个简单的机制实现此目的: 假设您的ClassName是ABC.java。 根据您的Excel工作表,在列名称&#34;脚本名称&#34;下,您可以添加一行:ABC 现在,在您的班级ABC.java中,在做任何事情之前调用函数
getClass().getSimpleName()
并链接此内容以阅读您的Excel。 这反过来将读取&#34; Testdata&#34;存储对应于&#34; Scriptname&#34;具有匹配类名的行。