一個接口設計用例時有可能會十幾條到幾十條都有可能,多個接口就有很多了,這時候我們可以考慮到自動化測試接口,采用數據驅動方式,把數據寫在excel表格中,代碼做封裝,用數據驅動測試,兩部分相互獨立。python中用ddt模塊來做數據驅動,代碼簡單好維護,調試也方便
一、主要功能及技術棧
1. 主要功能框架:
① 公共模塊(common):存放與業務相關的公共函數,封裝起來放在common文件中,供其他接口實際調用時使用
② 測試用例(testCase):主要存放接口測試用例(腳本命名規則:test_腳本名稱;一個測試類對應一個接口)
③ 測試數據(testData):存放測試用到的數據
④ 測試報告(report):生成測試報告以郵件形式發送(html / text /smtp)
⑤ 全局執行文件main:Python定義的main()函數只有當該Python腳本直接作為執行程序時才會執行;當該python腳本被作為模塊(module)引入(import)時,其中的main()函數將不會被執行
2. 技術棧:python + ddt + unittest + requests + htmltextrunner
3. 接口測試用例編寫步驟
① 導入庫文件 ② 定義類 ③ 為類定義方法,並在該方法內實現接口腳本的編寫 ④ 運行結果 ⑤ 結果校驗
二、接口測試框架實例編寫
本期接口測試框架需求:實現wanandroid網站注冊、登錄、退出登錄三個接口的接口自動化測試腳本的編寫
git地址:https://github.com/annielulu/interfaceTest
1)框架設計:
common:configHttp,readConfig,readExcel,writeExcel,configEmail
testCase:使用unittest / ddt /requests實現接口測試腳本編寫
testData:使用excel表格存放測試數據
report:以郵件形式輸出測試報告
2)實現思路:
1. 通過抓包工具抓到接口數據並存放在excel表格中(urlSheet / paramSheet / assertSheet)
2. 獲取excel數據(定義一個readExcel類)
① 找到excel文件並打開
② 定位sheet頁,定位行和列
③ 讀取excel數據
④ 組裝測試數據,變為一條正確的匹配的接口測試數據
④ return data給testCase模塊
3. 編寫testCase模塊
① 調用readExcel模塊,拿到測試數據
② 根據接口的請求方式來判斷調用什么方法(get請求 / post請求)
③ 校驗get請求 / post請求的數據
④ 保存執行結果
⑤ 寫入excel中(writeExcel模塊)
4. writeExcel模塊
① 找到excel,讀取數據
② 復制excel對象
③ 根據id寫入對應的實際結果和接口測試狀態
5. 發送測試報告
三、ddt及unittest介紹
1. 背景介紹: python的unittest沒有自帶數據驅動功能,所以如果要使用unittest同時又想使用數據驅動,那么就可以使用ddt(Data-Driven Tests)來完成。
2. 使用步驟:① 導入ddt包 ② 用裝飾器裝飾@ddt ③ 傳入參數,執行
3. 代碼實例:
四、python讀寫excel
1. 使用xlrd和xlwt讀寫excel(需要下載安裝xlrd庫和xlwt庫 -- pip install xlrd)
①打開excel
readbook = xlrd.open_workbook(r'\test\canying.xlsx')
② 獲取讀入的文件的sheet
sheet = readbook.sheet_by_index(1) #索引的方式,從0開始
sheet = readbook.sheet_by_name('sheet2') #通過名字定位sheet頁
allsheetnames = readbook.sheet_names() #返回所有sheet頁名字組成的列表
③ 獲取sheet的最大行數和列數
nrows = sheet.nrows #行
ncols = sheet.ncols #列
④ 獲取某個單元格的值
lng = sheet.cell(0,0).value #獲取1行1列的表格值
lat = sheet.cell(1,4).value #獲取2行5列的表格值
獲取某行/某列的值
row_value = sheet.row_values(x) #獲取x行的值,從0開始計數
col_value = sheet.col_values(y) #獲取y列的值,從0開始計數
⑤ 打開將寫的表並添加sheet
writebook = xlwt.Workbook() #打開一個excel
sheet = writebook.add_sheet('test') #在打開的excel中添加一個sheet
⑥ 將數據寫入excel
sheet.write(i,0,result[0]) #寫入excel,i行0列
sheet.write(i,1,result[1])
⑦ 保存
writebook.save('answer.xls') #一定要記得保存