在自動化測試過程中,對測試數據的管理和維護是一個不可忽視的點。一般來說,如果測試用例數據不是太多的話,使用excel管理測試數據是個相對來說不錯的選擇。
這篇博客,介紹下如何利用python的xlrd模塊來讀取excel的數據。。。
一、下載安裝
直接cmd進入命令行,然后輸入 pip install xlrd 命令進行安裝;或者輸入 pip show xlrd 命令來查看是否安裝有xlrd。
安裝方法不重要,通過安裝包安裝也可以,只要達到目的即可。
二、用法介紹
xlrd是python語言中讀取excel的擴展工具包,可以實現指定表單、指定單元格的讀取(如果要寫入數據,需要使用另一個擴展庫:xlwt)。
官方文檔:http://xlrd.readthedocs.io/en/latest/index.html
基本用法介紹如下(來自百度百科):
# 示例: # 導入擴展包
import xlrd # 打開Excel文件讀取數據
data = xlrd.open_workbook('excelFile.xls') [1] # 獲取一個工作表
table = data.sheets()[0] #通過索引順序獲取
table = data.sheet_by_index(0) #通過索引順序獲取
table = data.sheet_by_name(u'Sheet1') #通過名稱獲取 # 獲取整行和整列的值(數組)
table.row_values(i) table.col_values(i) # 獲取行數和列數
nrows = table.nrows ncols = table.ncols # 循環行列表數據
for i in range(nrows ): print table.row_values(i) # 單元格
table.cell(rowx,colx) cell_A1 = table.cell(0,0).value cell_C4 = table.cell(3,2).value # 使用行列索引
cell_A1 = table.row(0)[0].value cell_A2 = table.col(1)[0].value # 簡單的寫入
row = 0 col = 0 # 常用單元格中的類型
0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error, 6 blank ctype = 1 value = '單元格的值'
# 擴展的格式化
xf = 0 table.put_cell(row, col, ctype, value, xf) table.cell(0,0) #單元格的值'
table.cell(0,0).value #單元格的值'
三、示例Demo
簡單的讀取excel文件的demo代碼如下:
1 # coding-utf-8
2 import xlrd 3 from readConfig import Signup_data,Login_data 4
5 def SignUp(): 6 filepath = Signup_data 7 file = xlrd.open_workbook(filepath) 8 table = file.sheets()[0] 9 nrows = table.nrows 10 Susername = [] 11 Smobile = [] 12 Stxtcode = [] 13 Smobilecode = [] 14 Spassword = [] 15 # 定義對應的用例條件list
16 for i in range(1,nrows): 17 # 循環行列表數據
18 Susername.append(table.cell(i,0).value) 19 Smobile.append(table.cell(i,1).value) 20 Stxtcode.append(table.cell(i,2).value) 21 Smobilecode.append(table.cell(i,3).value) 22 Spassword.append(table.cell(i,4).value) 23 # 返回list結果
24 return Susername,Smobile,Stxtcode,Sobilecode,Spassword 25
26 def Login(): 27 filepath = Login_data 28 file = xlrd.open_workbook(filepath) 29 table = file.sheet()[0] 30 nrows = table.nrows 31 Lusername = [] 32 Lpassword = [] 33
34 for i in range(1,nrows): 35 Lusername.append(table.cell(i,0).value) 36 Lpassword.append(table.cell(i,1).value) 37 # 返回list結果
38 return Lusername,Lpassword
腳本解析:
①、剛開始導入的自定義模塊 from readConfig import Signup_data,Login_data ,這里我將測試數據的文件路徑放在了配置文件里,然后簡單封裝了讀取配置文件的一個readConfig方法,
這樣做的好處是降低了維護成本(即使后期相對的有變動,只需要改變配置文件和這個封裝的方法,而不用去修改測試腳本),提高了腳本可維護性,重用性和服務遷移的成本。
讀取配置文件鏈接:python:利用configparser模塊讀取配置文件
可放入配置文件的信息這里舉一些例子:數據庫連接信息、文件路徑、用戶名、密碼、后台接口等。。。
PS:如果使用GIT做版本控制,文件上傳遠程倉庫后,敏感信息不做管理,這樣風險比較大(如何降低這種風險,后續的博客會介紹)。。。
②、如上面的代碼所示,我只是簡單的寫了注冊和登錄的2個方法,但如果測試數據比較多(存在很多不同excel中)或者測試點比較多,這樣就比較臃腫了,可以繼續對其進行優化,比如寫一個類,
初始化一些共用的信息,每個功能點對應的不同方法只需要幾行代碼就搞定,還可以從業務角度進行拆分等(后續會不斷更新優化后的內容)。。。
四、測試數據管理
1、使用excel管理測試數據的局限性
博客開頭就提到了,excel只適用於測試用例數據不太多的情況,如果測試數據較多,那么excel的瓶頸也很明顯,原因如下:
①、excel單表只能支持65535行,如果測試用例有很多,那么excel就是制約測試用例和測試數據管理的最大問題;
②、數據量大,excel的增刪改查不好做,不能做成服務,因為有IO鎖,不支持事務,無法多人共用,對后續的自動化集成平台開發帶來影響;
2、優化方案
①、測試數據存儲在專門的測試DB,封裝讀寫數據的方法;
②、多人共用的問題,可以用docker部署高可用的測試環境,每個人都擁有獨立的測試環境,做好版本管理;
如上所示,就是xlrd讀取excel數據的簡單使用方法以及測試用例數據管理相關的一些思路,僅供參考,具體做法和優化請自行實踐。。。