簡體   English   中英

如何從Testng中的多個文件中饋送數據提供者

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM