zoukankan      html  css  js  c++  java
  • 单元测试、自动化测试、接口测试过程中的Excel数据驱动(java实现)

    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import org.testng.Assert;
    import jxl.*;

    /**
    * Excel放在Data文件夹下 Excel命名方式:测试类名.xls Excel的sheet命名方式:测试方法名 Excel第一行为Map的key
    *
    * @ClassName: ExcelDataProvider
    * @Description: TODO(读取Excel数据)
    * 设计思想:一个Excel文本代表一个测试类,一个sheet代表一个测试方法,一个Excel文本中拥有多个sheet(
    * 即一个类中多个测试方法)
    */
    public class ExcelData implements Iterator<Object[]> {

    private Workbook book = null;
    private Sheet sheet = null;
    private int rowNum = 0;
    private int currentRowNo = 0;
    private int columnNum = 0;
    private String[] columnnName;

    /* 构造方法:初始化一个Excel文本对象,并获取key值 */
    public ExcelData(String classname, String methodname) {

    try {

    int dotNum = classname.indexOf(".");

    if (dotNum > 0) {
    classname = classname.substring(classname.lastIndexOf(".") + 1, classname.length());
    }
    // 从/data文件夹下读取以类名命名的excel文件
    String path = "C:/Users/Administrator/Desktop/" + classname + ".xls";
    InputStream inputStream = new FileInputStream(path);

    book = Workbook.getWorkbook(inputStream);
    // 获取单个sheet
    sheet = book.getSheet(methodname);
    // 获取sheet里的所有行
    rowNum = sheet.getRows();
    // 获取第一行(即key)所有的单元格
    Cell[] cell = sheet.getRow(0);
    // 第一行所有单元格的长度
    columnNum = cell.length;
    // 创建一个以第一行所有单元格长度为长度的String类型的数组:columnnName
    columnnName = new String[cell.length];
    // 将第一行所有单元格里的内容(即key)存放到数组:columnnName中
    for (int i = 0; i < cell.length; i++) {
    columnnName[i] = cell[i].getContents().toString();
    }
    // 每一行存放完毕后,自动指向下一行
    this.currentRowNo++;

    } catch (Exception e) {
    e.printStackTrace();
    Assert.fail("unable to read Excel data");
    }
    }

    /* 重写hasNext()方法,用于判断是否存在下一行 */
    public boolean hasNext() {
    // 若当前sheet中没有任何内容,或者当前行号指向的行超出了当前sheet中的最大的行,结束读取数据
    if (this.rowNum == 0 || this.currentRowNo >= this.rowNum) {

    try {
    book.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    return false;
    } else {
    // sheet下一行内容为空判定结束
    if ((sheet.getRow(currentRowNo))[0].getContents().equals(""))
    return false;
    return true;
    }
    }

    /* 重写next()方法,用于获取当前行所有单元格里面的内容 */
    public Object[] next() {
    // 获取当前行所有单元格对象
    Cell[] c = sheet.getRow(this.currentRowNo);
    Map<String, String> data = new HashMap<String, String>();
    // 将单元格中的所有内容存放到map中,并指定key与value的对应关系
    for (int i = 0; i < this.columnNum; i++) {

    String temp = "";

    try {
    temp = c[i].getContents().toString();
    } catch (ArrayIndexOutOfBoundsException ex) {
    temp = "";
    }
    data.put(this.columnnName[i], temp);
    }
    // 创建一个只有一个元素的Object类型的数组,用于存放单次获取的key与value值
    Object object[] = new Object[1];
    object[0] = data;
    this.currentRowNo++;
    return object;
    }

    public void remove() {
    throw new UnsupportedOperationException("remove unsupported.");
    }
    }

  • 相关阅读:
    python开发必备:virtualenv虚拟环境(自用)
    JavaScript经典实例
    javascript事件驱动及事件处理
    在HTML网页中嵌入脚本的方式
    JavaScript数据结构
    JavaScript语言调试技巧
    CSS+DIV布局
    在HTML文档中应用CSS
    CSS常用属性
    定义CSS
  • 原文地址:https://www.cnblogs.com/zw520ly/p/5879694.html
Copyright © 2011-2022 走看看