zoukankan      html  css  js  c++  java
  • Java接口自动化测试(四) — 使用Excel做数据驱动

    一、说明

    1. 数据驱动测试的核心:是测试数据与测试脚本分离,实现测试脚本的参数化,例如:在使用工具测试时,常常会使用到参数化设置;
    2. 使用数据驱动测试方便后期维护,提高脚本的可重用性;
    3. 做数据驱动的方式有多种例如:Excel、CSV、MySQL等

    二、使用Excel实现数据驱动

    1、在pom文件添加POI依赖

           <!--操作Excel数据-->
            <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.17</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.17</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml-schemas</artifactId>
                <version>3.17</version>
            </dependency>

    2、新建一个Class命名为ExcelUtils

    package com.test.excel;
    
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import java.io.FileInputStream;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * @author lh
     * @date 2020/7/3
     * @description
     */
    public class ExcelUtils {
        /**
         * 读取Excel数据
         * @return List
         * @throws Exception
         */
        public static List<Map<String ,Object>> readExcle() throws Exception{
            //用流的方式读取Excel文件
            FileInputStream fis = new FileInputStream("C:\Users\Think\Desktop\test.xlsx");
            //获取Excel工作簿
            XSSFWorkbook xf = new XSSFWorkbook(fis);
            //获取第一个sheet
            XSSFSheet sheet = xf.getSheetAt(0);
            //获取第一行
            int firstRow = sheet.getFirstRowNum();
            //获取最后一行
            int lastRow = sheet.getLastRowNum();
          //  System.out.println(lastRow);
            //用于map设置key值,自定义
            String columns[] = {"username", "password"};
            List< Map<String ,Object>> list = new ArrayList<>();
    
            for (int i = 0;i<=lastRow;i++){
                XSSFRow row = sheet.getRow(i);
                if (row!=null){
                    //获取第一行,第一列
                    int firstcell =  row.getFirstCellNum();
                    //获取最后一行,最后一列
                    int lastcell = row.getLastCellNum();
                    Map<String ,Object> map = new HashMap<>();
                    for (int j = 0;j<columns.length;j++){
                        XSSFCell cell = row.getCell(j);
                        if (cell == null){
                            continue;
                        }
                        //封装成map
                        map.put(columns[j], getCellFormatValue(cell));
                    }
                    //System.out.println(map);
                    //将map放入List
                    list.add(map);
                }
                fis.close();
                xf.close();
            }
            return list;
        }
        //格式化数值类型
        public static Object getCellFormatValue(Cell cell){
            Object cellValue = null;
            /**
             * getCellTypeEnum()方法是枚举类型,用于判断单元格值类型,有以下五种格式:
             *     _NONE(-1),
             *     NUMERIC(0),
             *     STRING(1),
             *     FORMULA(2),
             *     BLANK(3),
             *     BOOLEAN(4),
             *     ERROR(5);
             */
            switch(cell.getCellTypeEnum()){
                case STRING:
                    cellValue = cell.getStringCellValue();
                    break;
                case NUMERIC:
                    /**如果是数字类型转换成数字类型,但是初始化数字加的.0,因此可以转换成int类型去掉.0
                     * cell.getNumericCellValue()
                     */
                    cellValue = new Double(cell.getNumericCellValue()).intValue();
                    break;
                case BOOLEAN:
                    break;
                case FORMULA:
                    break;
            }
            return cellValue;
        }
        //测试
        public  static void main(String[] arg) throws Exception{
            ExcelUtils excelTest = new ExcelUtils();
            excelTest.readExcle();
        }
    }

    三、在测试用例中使用

    1. 在testng中使用需要新创建一个方法getDataMethod(),返回Object[][]类型
    2. 使用注解@DataProvider,为测试方法提供数据
    3. 在测试方法上使用@Test(dataProvider = "getDataMethod")接收数据
    4. 使用数据驱动有一个好处,测试方法可以写一个,根据参数频繁调用一个方法(和上一篇对比https://www.cnblogs.com/liho/p/13225137.html
    package com.test.httpclient;
    
    import com.alibaba.fastjson.JSONObject;
    import com.test.excel.ExcelUtils;
    import org.testng.Assert;
    import org.testng.annotations.AfterTest;
    import org.testng.annotations.BeforeTest;
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Test;
    import java.util.List;
    import java.util.Map;
    
    /**
     * @author lh
     * @date 2020/6/8
     * @description
     */
    @Test
    public class LoginCase {
        HttpClientPost httpClientPost = new HttpClientPost();
        @DataProvider
        public Object[][] getDataMethod() throws Exception{
         //读取Excel中的数据 List
    <Map<String,Object>> result = ExcelUtils.readExcle(); Object[][] params = new Object[result.size()][]; for (int i = 0; i < result.size(); i++) { params[i] = new Object[]{result.get(i)}; } return params; } @BeforeTest public void setup(){ System.out.println("用例执行前执行"); }    //一个测试方法 @Test(dataProvider = "getDataMethod") public void test1(Map<String, Object> param) throws Exception { JSONObject result = httpClientPost.LoginPost(param); Assert.assertEquals(result.get("code"),200); } @AfterTest public void teardown(){ System.out.println("用例执行完后执行"); } }

    四、查看运行结果

  • 相关阅读:
    Pagination 分页类
    FckEditorAPI未定义错误分析
    提取DataSet数据集中前N条记录
    JS操作JSON[转]
    JS运行textarea内的HTML代码 [转]
    使用Global.asax文件统计网站总访问量
    文章点击数简单实现周、月、年排行
    asp.net文件下载[转]
    三大策略保证论坛不受垃圾信息影响![转]
    图片以二进制形式写入数据库并显示
  • 原文地址:https://www.cnblogs.com/liho/p/13260638.html
Copyright © 2011-2022 走看看