單元測試、自動化測試、接口測試過程中的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.");
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM