Selenium 取出 excel 数据然后通过 testNG 的 @DataProvider 注释来进行参数化

domains90 for BlackTest · 2018年08月20日 · 2387 次阅读

因为之前做了一个参数化的取 excel 的项目用的是 for 循环一直感觉到不是很完美(不可控的因素很多),这次想利用 testNG 框架来传 excel 的参数
给大家的是一篇关于 java 的教程
废话少说直接上正文:
一,首先整理一个 excel 如图(以下是海尔项目的真实数据打码):

然后理清楚逻辑:TestNG 框架的@DataProvide注释所传输的数据根据下图官方翻译过来的 api 可以判断是 object 的一个二维数组;
那么我们就要把 excel 的数据取到这个二维数组里面就可以通过@DataProvide传递了

二.创建 ExcelTest 类取出 excel 的数据并赋值给二维数组,然后再 return 方便调用
1.excel 取出 excel 的数据需要用到一个 jxl 的 jar 包(jar 包自行百度),然后使用 Workbook api


public class ExcelTest {
    int cols;                   //--定义excel的列
    int rows;               //定义excel的行
    Sheet sheet;
    Object[][] obj;     //定义一个object的二维数组
    int excelIndex;     //定义一个int值,这个值是为了去掉excel的列名(第一行的数据不取)
//String ExcelPath
    @Test
    public Object[][] readUsernamethrows()throws IOException, Exception {

                  //先得到excel在本地的路径
        String ExcelPath = "C://Users//Administrator//Desktop//自动化格式.xls";

        //--在获取excel中sheet为“明细”的表
        sheet = Workbook.getWorkbook(new FileInputStream(ExcelPath)).getSheet("明细");

        // 获取文件的行数
        rows = sheet.getRows();
        // 获取文件的列数
        cols = sheet.getColumns();
        excelIndex = rows-1;

                //给obj二维数组定义长度
        obj = new Object[excelIndex][cols];

                //然后通过for循环取出excel表的数据并且给obj赋值******这个取法是因为有列明去掉第一行,如果没有列明的话请自行定义二维数组的长度
        for (int y = 0; y < excelIndex; y++) {
            for (int x = 0; x < cols; x++) {
            obj[y][x] = sheet.getCell(x,y+1).getContents().trim();
            System.out.println(obj[y][x]);
            }
        }
            return obj;
}

//就这样 excel 的数据就成功的取出来切赋值给了 obj 二维数组,那么就来实行第二步

三.创建 RunExcel 来调用 ExcelTest 取的数据并传参

public class RunExcel {
        //new出来
    ExcelTest runtest = new ExcelTest();
    @Test(dataProvider = "dataName")
    public void runExcel(String a, String b, String c, String d, String e) throws IOException, Exception {
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println(e);
    }

    @DataProvider(name = "dataName")
    public Object[][] Data() throws IOException, Exception {
                //调用
        return runtest.readUsernamethrows();
    }

}

四.输出结果

共收到 0 条回复 时间 点赞
domains90 Httpclient 接口自动化 中提及了此贴 05月25日 15:26
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册