Python自动化测试之自动化测试值—Excel数据驱动

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.");
}
}

推荐好文:

软件性能测试见解与总结

软件测试自学到什么程度就可以去面试了?

10年软件测试工程师感悟——写给还在迷茫中的朋友

什么样的人适合从事软件测试工作?

见识了解python自动化测试(3)

Python 和Java 哪个更适合做自动化测试?

软件测试人员的每天工作日常

10分钟玩转Python+Selenium自动化测试,教你快速入门!

最后: 欢迎关注小编领取一份300页pdf文档的Python自动化测试工程师核心知识点总结!软件测试技术交流群:(313782132) 这些资料的内容都是面试时面试官必问的知识点,篇章包括了很多知识点,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

猜你喜欢

转载自blog.csdn.net/weixin_50271247/article/details/108500886