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のどちらが自動テストに適していますか?

ソフトウェアテスターの日常業務

Python + Selenium自動テストを10分でプレイして、すぐに始めましょう!

最後に:エディターをフォローして、300ページのPDFドキュメントでPython自動テストエンジニアのコア知識の概要を受け取ることを歓迎します!ソフトウェアテスト技術交換グループ:(313782132)これらの資料の内容は、インタビュアーが面接中に尋ねる必要があるすべての知識ポイントです。この章には、基本的な知識、Linuxの基本、シェル、インターネットプログラムの原則、Mysqlを含む多くの知識ポイントが含まれますデータベース、パッケージキャプチャツールのトピック、インターフェイステストツール、高度なテスト-Pythonプログラミング、Web自動化テスト、APP自動化テスト、インターフェイス自動化テスト、高度な継続的統合テスト、テストアーキテクチャ開発テストフレームワーク、パフォーマンステスト、セキュリティテストなど。

おすすめ

転載: blog.csdn.net/weixin_50271247/article/details/108500886