TestNG的不计数据提供程序测试单独
问题描述:
这里是我的dataProviderTestNG的不计数据提供程序测试单独
@DataProvider(name = "arrayBuilder")
public Object[][] parameterTestProvider() {
//Code to obtain retailerIDList
String[] retailerIDArray = retailerIDList.toArray(new String[retailerIDList.size()]);
assertEquals(1295, retailerIDList.size(), "Expected 1295, found " + retailerIDList.size() + " docs");
return new Object[][] {{retailerIDArray}};
}
,这是我的测试
@Test(dataProvider = "arrayBuilder", invocationCount = 1, threadPoolSize = 1)
public void getRetailer(String[] retailerIDList) {
for (String retailer_ID : retailerIDList) {
//Code that uses the retailerID
}
当我执行这个测试,TestNG的输出列表“getRetailer”作为唯一的测试。我有1295记录由dataprovider返回,我想要1295测试报告。我错过了什么?
答
请使用,它应该工作。您需要返回对象数组,其中每行都是您想要用于测试的一行数据。那么只有它会出现在报告中。你在做的是给它发送一个数组,以便将它当作一个单独的测试。
@DataProvider(name="provideData")
public Iterator<Object[]> provideData() throws Exception
{
List<Object[]> data = new ArrayList<Object[]>();
String[] retailerIDArray = retailerIDList.toArray(new String[retailerIDList.size()]);
assertEquals(1295, retailerIDList.size(), "Expected 1295, found " + retailerIDList.size() + " docs");
for(String retailerID : retailerIDArray){
data.add(new Object[]{retailerID});
}
return data.iterator();
}
@Test(dataProvider = "provideData")
public void getRetailer(String retailerIDList) {
for (String retailer_ID : retailerIDList) {
//Code that uses the retailerID
}
}
欲了解更多信息,请访问通过文档here
答
DataProviders单独为每个数据集迭代时,只会产生测试的累积结果,而不是每次迭代的结果。
尝试在DataProvider旁边使用测试工厂为测试的每次迭代的单独结果。
它是否运行的方法1295次,每行数据?如果不是那么你的数据提供者实现是不正确的如果它已经运行了很多次,那么它会为每个使用的测试数据集提供结果。请仔细阅读报告。 – Shamik
我在测试中加入了调试信息,我可以看到每个1295值都打印正确。除了TestNG将其报告为单个测试外,DataProvider运行良好。 – Jai
你在看哪个报告。在测试结果文件夹中的两个报告emailable-report.html和index.html中,我可以看到每行数据提供者的单独行,而没有做任何额外的事情。你能告诉我你在看哪个报告吗? – Shamik