
自動(dòng)化測(cè)試時(shí),經(jīng)常會(huì)提到數(shù)據(jù)驅(qū)動(dòng)的概念。數(shù)據(jù)驅(qū)動(dòng)是以數(shù)據(jù)來驅(qū)動(dòng)整個(gè)測(cè)試用例的執(zhí)行,即測(cè)試數(shù)據(jù)決定測(cè)試結(jié)果。Python中ddt模塊可以實(shí)現(xiàn)。python操作excel主要用到xlrd和xlwt這兩個(gè)庫,即xlrd是讀excel,xlwt是寫excel的庫。
如果測(cè)試數(shù)據(jù)寫入到excel文件中,該如何從中獲取數(shù)據(jù)呢?
● 假設(shè)測(cè)試登錄功能的用例:
● 正常賬號(hào)密碼登錄成功;
● 錯(cuò)誤賬號(hào)登錄失敗;
● 錯(cuò)誤密碼登錄失敗;
● ......
根據(jù)當(dāng)前系統(tǒng)數(shù)據(jù),準(zhǔn)備好三組測(cè)試用例的數(shù)據(jù),寫入到excel表格中:

讀取數(shù)據(jù)使用xlrd(支持xls格式)示例:
# xlrd是第三方模塊需要安裝: pip install xlrd
import xlrd
def get_data_from_excel(filename,sheetname):
# 創(chuàng)建工作簿對(duì)象
workbook = xlrd.open_workbook(filename)
# 獲取sheet對(duì)象
sheet = workbook.sheet_by_name(sheetname)
# 存放讀取到數(shù)據(jù),列表
datas = []
# 獲取每列的列名存放到到keys
keys = [sheet.cell_value(0, col) for col in range(sheet.ncols)]
# 讀取數(shù)據(jù)
# 有幾行則循環(huán)幾次,并忽略第一行表頭的讀取
for row in range(1,sheet.nrows):
# 存放一行中讀取到的所有內(nèi)容,字典格式
line_data = {}
# 循環(huán)遍歷一行中的所有單元格
for col in range(sheet.ncols):
# 獲取到單元格內(nèi)容后,在keys中找到其列名,存放到字典中
line_data[keys[col]] = sheet.cell_value(row, col)
# 把讀取到一行內(nèi)容添加到datas
datas.append(line_data)
# 返回讀取到的數(shù)據(jù)
return datas
附Xlrd常用操作如下:
打開excel:
path = r"d:\xlrd_test.xlsx"
wb = xlrd.open_workbook(path, encoding_override="utf-8")
table = wb.sheets()[0] # 根據(jù)索引獲取工作表
table = wb.sheet_by_index(0) # 根據(jù)索引獲取工作表
table = wb.sheet_by_name(r"三國(guó)演義") # 根據(jù)名程獲取工作表
names = wb.sheet_names() # 獲取所有工作表的名字
num = wb.nsheets # 獲取所有工作表數(shù)量
行[row]操作
total_rows = table.nrows # 獲取總行數(shù)
current_row_strudata = table.row(0) # 獲取該行所有的單元格數(shù)據(jù)類型和數(shù)據(jù)組成的列表
current_row_strudata = table.row_slice(0, startcolx=1, endcolx=4)
# 獲取該行的列控制[切片]的單元格數(shù)據(jù)類型和數(shù)據(jù)組成的列表
current_row_types = table.row_types(3, startcolx=0, endcolx=None)
# 獲取該行的列控制[切片]單元格的數(shù)據(jù)類型組成的列表
current_row_values = table.row_values(4, startcolx=3, endcolx=4) # 獲取該行的列控制[切片]單元格的數(shù)據(jù)組成的列表
current_row_len = table.row_len(0) # 獲取該行單元格個(gè)數(shù)
列[colnum]操作
total_cols = table.ncols # 獲取總列數(shù)
current_col_strudata = table.col(0, start_rowx=0, end_rowx=4)
# 獲取該列的行控制[切片]單元格數(shù)據(jù)類型和數(shù)據(jù)組成的列表
current_col_strudata = table.col_slice(0, startrowx=0, endrowx=4) # 獲取該列的行控制[切片]單元格數(shù)據(jù)類型和數(shù)據(jù)組成的列表
current_col_types = table.col_types(3, startrowx=0, endrowx=None) # 該列的行控制[切片]單元格的數(shù)據(jù)類型組成的列表
current_col_values = table.col_values(2, startrowx=0, endrowx=1)
# 該列的行控制[切片]單元格的數(shù)據(jù)組成的列表
cell = table.cell(0, 0) # 獲取 單元格對(duì)象
cell_type = table.cell_type(2, 3) # 獲取單元格數(shù)據(jù)類型
cell_value = table.cell_value(3, 3) # 獲取指定單元格數(shù)據(jù)
那么這樣就可以讀取到數(shù)據(jù)了。