python接口自動化框架實戰
python接口測試的原理,就不解釋瞭,百度一大堆。
先看目錄,可能這個框架比較簡單,但是麻雀雖小五臟俱全。
各個文件夾下的文件如下:
一.理清思路
我這個自動化框架要實現什麼
1.從excel裡面提取測試用例
2.測試報告的輸出,並且測試報告得包括執行的測試用例的數量、成功的數量、失敗的數量以及哪條成功瞭,失敗的是哪一個,失敗的原因是什麼;測試結果的總體情況通過圖表來表示。
3.測試報告用什麼形式輸出,excel,還是html,還是其他的,這裡我選擇瞭excel
4.配置文件需要配置什麼東西
5.哪些東西可以放入公共函數直接調用。
好的這些思路理清楚之後就可以動手瞭。
二.首先是配置文件和excel測試用例的設計
數據與代碼分離,也就是數據性的需要作為配置文件可以隨時修改。如:接口url,網站登錄權限驗證信息,數據庫信息。全部存入config文件夾下
下面是具體的配置文件信息:
API_url.txt
inserthouse=http://IP:port/scp-mdmapp/house/insertHouse deletehouse=http://IP:port/scp-mdmapp/house/deleteHouse batchdeletehouse=http://IP:port/scp-mdmapp/house/batchdeleteHouse gethouse=http://IP:port/scp-mdmapp/house/getHouse updatehouse=http://IP:port/scp-mdmapp/house/updateHouse
Authorization.txt
joxNTIxMTg3MTA3fQ.JyeCMMsM0tOr7exORUNpkZ-FtprjpNBhMtFjUAdnYDnhRfaR6qi3fqVkybyb245zONiTxLOw8jBR60oNUVEbKx9_cut6uDIZMUFYOx6hyyBkY9IXJlutYdo4sSMAKF_MjKsZY7bZNXLHzN0juiezn6iN0hbnbhS-Kv2LYLLZLTs
我的測試用例的設計如下:
notes是測試用例摘要。
三.公共函數存在common文件夾下
get_authorization.py
#從配置文件獲取訪問權限信息 def get_Authorization(): fp = open('D:\person\learn\py\HDapi\config\Authorization.txt') info = fp.read() fp.close() return info
public.py
import os,xlrd,xlwt,time #通過配置文件裡的接口名稱來獲取接口url的函數 def get_url(api_name): fp = open('D:\person\learn\py\HDapi\config\API_url.txt') #按行讀取接口url配置文件 api_infos = fp.readlines() fp.close() #通過for循環來遍歷配置文件裡的每一個url,並且返回傳入的接口名稱相應的url for api in api_infos: #去除因為讀取產生的換行空格等 api_f = api.strip(' \r\n\t') api_c = api_f.split('=') if api_name == api_c[0]: return api_c[1] #通過傳入用例名稱的文件和excel頁面來讀取測試用例 def get_case(filename,sheetnum): case_dir='D:\\person\\learn\\py\\HDapi\\testcase_excel' + '\\' + filename + '.xlsx' datas = xlrd.open_workbook(case_dir) table = datas.sheets()[sheetnum] nor = table.nrows nol = table.ncols return nor,table #通過xlwt庫來設計測試報告並寫入excel裡面 def write_report(): workbook = xlwt.Workbook(encoding='utf-8') #在excel測試報告表格中創建名叫housemanage的頁面 worksheet = workbook.add_sheet('housemanage') #設置字體格式為居中對齊 alignment = xlwt.Alignment() alignment.horz = alignment.HORZ_CENTER alignment.vert = alignment.VERT_CENTER style = xlwt.XFStyle() style.alignment = alignment #具體的合並哪些單元格並且寫入相應的信息 worksheet.write_merge(0,0,0,7,'測試報告(housemanage)',style) worksheet.write_merge(1,10,0,0,'house_manage',style) worksheet.write_merge(1,2,1,1,'insethouse',style) worksheet.write_merge(3,4,1,1,'updatehouse',style) worksheet.write_merge(5,6,1,1,'deletehouse',style) worksheet.write_merge(7,8,1,1,'gethouse',style) worksheet.write_merge(9,10,1,1,'updatehouse',style) worksheet.write_merge(1,2,11,11,'total_result',style) worksheet.write(1,2,'notes') worksheet.write(2,2,'detail') worksheet.write(3,2,'notes') worksheet.write(4,2,'detail') worksheet.write(5,2,'notes') worksheet.write(6,2,'detail') worksheet.write(7,2,'notes') worksheet.write(8,2,'detail') worksheet.write(9,2,'notes') worksheet.write(10,2,'detail') worksheet.write(1,12,'pass') worksheet.write(1,13,'faild') #最後返回worksheet,workbook兩個參數,因為在測試測試用例和運行文件中需要用到的兩個參數 return worksheet,workbook
四.測試用例的編寫
test_inserthouse.py
import requests,unittest,os,time,json from common import public,get_authorization #房屋添加用例,通過傳入public裡wirte_sheet函數返回的參數wooksheet,將用例的執行結果寫入到測試報告中 def test_inserthouses(worksheet,workbook): url = public.get_url('inserthouse') nor,table = public.get_case('house',0) Authorization = get_authorization.get_Authorization() a = 2 xu = 0 yu = 0 #用for循環來實現遍歷一個excel頁面的所有測試用例 for i in range(1,nor): #獲取excel表格裡面需要給接口傳入的參數 houseNum = table.cell_value(i,0) orgUuid = table.cell_value(i,1) floor = table.cell_value(i,2) houseUseFor = table.cell_value(i,3) residentNum = table.cell_value(i,4) emergencyPhone = table.cell_value(i,5) expect_code = table.cell_value(i,6) expect_message = table.cell_value(i,7) notes = table.cell_value(i,8) payment = table.cell_value(i,11) #接口body需要傳入的參數 data = { 'houseNum':houseNum, 'houseUseFor':houseUseFor, 'orgUuid':orgUuid, 'residentNum':residentNum, 'floor':floor, 'emergencyPhone':emergencyPhone, 'payment':payment } #請求頭,網站加瞭登陸驗證之後需要在請求頭傳入Authorization參數 headers={ 'Accept':'application/json', 'Content-Type':'application/json', 'Authorization':Authorization } a+=1 worksheet.write(1,a,notes) data = json.dumps(data) r = requests.post(url,data=data,headers=headers) #將字符串格式轉換為字典 b = eval(r.text) m = b.get('code') n = b.get('message') k = b.get('data') #判斷接口測試通過與否 if m==expect_code and n==expect_message: worksheet.write(2,a,'pass') xu += 1 else: worksheet.write(2,a,'faild:%s'%k) yu += 1 #測試用例執行完後,返回用例成功與失敗的數量 return xu,yu
test_updatehouse.py
import requests,unittest,os,time,json from common import public,get_authorization #房屋編輯測試用例 def test_updatehouses(worksheet,workbook): nor,table = public.get_case('house',4) Authorization = get_authorization.get_Authorization() url = public.get_url('updatehouse') a = 2 x = 0 y = 0 for i in range(1,nor): houseNum = table.cell_value(i,0) orgUuid = table.cell_value(i,1) uuid = table.cell_value(i,2) houseUseFor = table.cell_value(i,3) residentNum = table.cell_value(i,4) emergencyPhone = table.cell_value(i,5) expect_code = table.cell_value(i,6) expect_message = table.cell_value(i,7) notes = table.cell_value(i,8) floor = table.cell_value(i,9) payment = table.cell_value(i,11) data = { 'houseNum':houseNum, 'houseUseFor':houseUseFor, 'orgUuid':orgUuid, 'floor':floor, 'residentNum':residentNum, 'uuid':uuid, 'emergencyPhone':emergencyPhone, 'payment':payment } headers={ 'Accept':'application/json', 'Content-Type':'application/json', 'Authorization':Authorization } a+=1 worksheet.write(3,a,notes) data = json.dumps(data) r = requests.post(url,data=data,headers=headers) b = eval(r.text) m = b.get('code') n = b.get('message') k = b.get('data') if m==expect_code and n==expect_message: worksheet.write(4,a,'pass') x += 1 else: worksheet.write(4,a,'faild:%s'%k) y += 1 return x,y
五.通過對公共函數、測試用例的設計聯合的思考應該在執行文件裡面做什麼,實現什麼。
本來我想將執行文件單獨放置於HDapi-auto-test的根文件下的,可是將測試通過與不通過的數量寫入到測試報告裡面,就必須要調用公共函數的方法,由於放置在根文件夾下與公共函數隔瞭一個文件夾無法調用( 本鳥不會調用),所以不得不將執行文件放置於測試用例文件夾下瞭,好在文件名還是比較好區分也比較好尋找,另外我還想加上自動發送郵件的功能,這裡不寫瞭,其實發送郵件很簡單隨便找幾個例子就OK瞭,ps:代碼比較low,都沒有封裝,直接暴力簡單執行。代碼如下:
from common import public import test_inserthouse,test_updatehouse import time from pychartdir import * #從公共函數調用excel的寫入方法 worksheet,workbook = public.write_report() #測試用例的執行,並且返回x:成功的數量,y:失敗的數量 xu,yu = test_inserthouse.test_inserthouses(worksheet,workbook) x,y = test_updatehouse.test_updatehouses(worksheet,workbook) #得到成功與失敗的總數量 xr = x+xu yr = y+yu #將成功與失敗的數量寫入的excel的固定表格中 worksheet.write(2,12,xr) worksheet.write(2,13,yr) #獲取當前的時間並以制定的格式返回 now = time.strftime('%Y-%m-%d %H_%M_%S') #測試報告輸出的地址 report_dir = 'D:\\person\\learn\\py\\HDapi\\report\\' #拼接出測試報告名 filename =report_dir + now + 'apiresult.xlsx' workbook.save(filename) #通過pychart庫實現圖形處理,生成測試報告總覽圖----具體的參數設計可以參考pychart庫的文檔 data = [yr, xr] labels = ["faild", "pass"] c = PieChart(280, 240) c.setPieSize(140, 130, 80) c.addTitle("api_result") c.set3D() c.setData(data, labels) c.setExplode(0) c.makeChart(report_dir+now+"apiresult.png")
六.奉上測試報告輸出
本來想將生成的圖片放進excel測試報告裡面的,奈何能力有限,沒辦法將圖片放進去,智能單獨存為一個png文件瞭
圖表總覽:
excel測試報告情況:
到此這篇關於python接口自動化框架實戰 的文章就介紹到這瞭,更多相關python接口自動化內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- python處理excel文件之xlsxwriter 模塊
- Python xlwt工具使用詳解,生成excel欄位寬度可自適應內容長度
- 利用Python中xlwt模塊操作excel的示例詳解
- Python 對Excel求和、合並居中的操作
- python 使用xlsxwriter循環向excel中插入數據和圖片的操作