xlrd實(shí)現(xiàn)從excel文件讀取數(shù)據(jù)

自動(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ù)了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容