[英]How to feed dataprovider from multiple files in testng
我需要在一个文件夹中维护多个文件,并且我的dataprovider方法将读取文件集并构造最终的对象数组以返回。 我的方法如下所示,尽管我遍历所有文件,但它仅读取一个文件。 谁能告诉我该如何解决?
public Object[][] getTestCaseInformationFromFile() throws Exception{
String testDataFile=mdfUtil.readFileAsString("TestDataFilesConfiguration.xml");
//retrieving directory path
String directoryPath=mdfUtil.getPostId("testData/directoryPath", testDataFile);
//retrieving file names
ArrayList al=mdfUtil.getAssociatedIDs("testData/file", testDataFile);
Object[][] data = null;
for(int i=0;i<al.size();i++){
csvFile=directoryPath+al.get(i);
System.out.println("csvFile-===="+csvFile);
log.info("Loading data provider TestCaseInformation...");
ArrayList<ArrayList<String>> lines=readCSVFile(csvFile);
int testSize = lines.size();
log.info("Test file has {} tests contained within it." ,testSize);
data = new Object[testSize][3];
for ( int k=0;k<lines.size();k++ ) {
ArrayList line=lines.get(k);
System.out.println("K values is "+k);
List testData=new ArrayList();
List validationData=new ArrayList();
testData=line.subList(line.indexOf("IDS")+1,line.indexOf("IDE"));
validationData=line.subList(line.indexOf("VDS")+1,line.indexOf("VDE"));
System.out.println("testData is==="+testData);
String testCaseName=(String)testData.get(4);
data[k][0]=testCaseName;
data[k][1]=testData;
data[k][2]=validationData;
}
}
System.out.println("data lenght is="+data.length);
return data;
}
data
需要移出循环。 当您在循环内声明它时,将无法在循环外访问它。 您将需要先弄清楚如何设置阵列大小。 编写方式时,您只会得到最后一个CSV文件的结果,对吗? 如果要使用Object,则可以通过以下方式声明它:
data = new Object[<some value>][3];
for(int i = 0; i < al.size(); i++){
csvFile = directoryPath + al.get(i);
System.out.println("csvFile-===="+csvFile);
log.info("Loading data provider TestCaseInformation...");
ArrayList<ArrayList<String>> lines=readCSVFile(csvFile);
int testSize = lines.size();
log.info("Test file has {} tests contained within it." ,testSize);
for ( int k=0;k<lines.size();k++ ) {
ArrayList line=lines.get(k);
System.out.println("K values is "+k);
List testData=new ArrayList();
List validationData=new ArrayList();
testData=line.subList(line.indexOf("IDS")+1,line.indexOf("IDE"));
validationData=line.subList(line.indexOf("VDS") + 1,line.indexOf("VDE"));
System.out.println("testData is==="+testData);
String testCaseName=(String)testData.get(4);
data[k][0]=testCaseName;
data[k][1]=testData;
data[k][2]=validationData;
}
}
如果是我,我将改为将data
声明为arraylist,将结果填充到arraylist中,然后转换为Object,然后返回Object。 这是将数组列表转换为对象的方式,因此可以在dataprovider中将其返回:
// Now that we know the size of the list, we can define the array size
Object[][] retObj = new Object[list1.size()][2];
for (int i = 0; i < list1.size(); i++) {
retObj[i][1] = list1.get(i);
}
return retObj;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.