使用 TestNG 横向读取 Excel

Read Excel horizontally with TestNG

我可以垂直读取 Excel sheet 并将值传递给 TestNG dataprovide。 这使得 TestNG 执行每一行。

public Object[][] getData(ITestContext context) throws IOException {
        Object[][] obj = null;
        try {
            File file = new File(context.getCurrentXmlTest().getParameter("resource"));
            FileInputStream fis = new FileInputStream(file);
            XSSFWorkbook wb = new XSSFWorkbook(fis);
            XSSFSheet sheet = wb.getSheetAt(0);
            wb.close();

            int rowCount= sheet.getLastRowNum();
            int colCount = sheet.getRow(0).getLastCellNum();

            obj = new Object[rowCount][1];
            DataFormatter df = new DataFormatter();
            for (int i = 0; i < rowCount; i++) {
                Map<String, String> datamap= new HashMap<String, String>();
                for (int j = 0; j < colCount; j++) {
                    String a = df.formatCellValue(sheet.getRow(0).getCell(j));
                    String b = df.formatCellValue(sheet.getRow(i+1).getCell(j));

                    if(!b.equals(""))
                        datamap.put(a, b);  

                    if(b.equals("[PWD]")) {
                        b=PropertiesFile.getProperty("psw");
                        byte[] byteArray = Base64.decodeBase64(b.getBytes());   
                        String decodedString = new String(byteArray);
                        b=decodedString;
                        datamap.put(a, b);                      
                    }
                }
                obj[i][0] =datamap;
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        return obj;
    }

我想横向阅读,让TestNG执行每一列(第一列是键列),我该怎么做?

谢谢

您可以转置 sheet 并使用以前的列,现在是行:How to transpose sheet with POI SS/XSSF?

或者只是更改循环嵌套,以便在外循环中按列进行。不是按行。

我想我解决了

public Object[][] getData(ITestContext context) throws IOException {
        Object[][] obj = null;
        try {
            File file = new File(context.getCurrentXmlTest().getParameter("resource"));
            FileInputStream fis = new FileInputStream(file);
            XSSFWorkbook wb = new XSSFWorkbook(fis);
            XSSFSheet sheet = wb.getSheetAt(0);
            wb.close();

            int rowCount= sheet.getLastRowNum();
            int colCount = sheet.getRow(0).getLastCellNum();

            obj = new Object[colCount-1][1];
            DataFormatter df = new DataFormatter();
            for (int i = 0; i < colCount-1; i++) {
                Map<String, String> datamap= new HashMap<String, String>();
                for (int j = 0; j < rowCount+1; j++) {
                    String a = df.formatCellValue(sheet.getRow(j).getCell(0));
                    String b = df.formatCellValue(sheet.getRow(j).getCell(i+1));
                    System.out.println(a+ " "+b);
                    if(!b.equals(""))
                        datamap.put(a, b);  

                    if(b.equals("[PWD]")) {
                        b=PropertiesFile.getProperty("psw");
                        byte[] byteArray = Base64.decodeBase64(b.getBytes());   
                        String decodedString = new String(byteArray);
                        b=decodedString;
                        datamap.put(a, b);                      
                    }
                }
                obj[i][0] =datamap;
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        return obj;
    }