[英]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.