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 {

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 data = new HashMap();

// 将单元格中的所有内容存放到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.");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值