好久沒寫博客了。、最近忙着工作以及新工作的事。、
看了下以前寫的簡單接口自動化,拿出來總結下,也算記錄下學習成果
先來貼一下最后的結果,結果是寫在原來的excel中
執行完畢后,會將結果寫入到“狀態”列;
執行通過的話,如果返回的json有message寫入“response”列,如果執行失敗,則會將返回的json也寫入其中
前期准備:
在excel中依次填上接口、請求類型、需要傳的數據、期望返回的狀態碼以及該接口的說明
代碼如下,寫的很簡陋,甚至都沒定義方法什么的,姑且稱之為V0.1 后面學有所得再深入修改
#coding:utf-8 import requests import json import xlrd import os from xlutils.copy import copy excel = 'apidemo.xls' #定義存放用例的excel路徑,當前路徑下 data = xlrd.open_workbook(excel) host = 'http://xxxxxxx/api'#測試服,這個自己寫吧 headers = {'Accept-Version':'v2','content-type': 'application/json'} #定義headers result = [] #用來存放驗證結果 responseValue = [] #存放返回的數據 table = data.sheet_by_index(0) nrow = table.nrows #獲取行數 for i in range(1,nrow): #循環獲取每行中的數據 requestMethod = table.cell(i,2).value #方法,post、get、delete url = host + table.cell(i,1).value #拼接url payload = table.cell(i,3).value #定義要傳的值 ex = table.cell(i,4).value #獲取期望的返回值,目前是用status_code來判斷 if requestMethod == 'get': #不同的方法發不同的請求 r = requests.get(url,headers = headers) elif requestMethod == 'post': r = requests.post(url,data = payload,headers = headers) elif requestMethod == 'delete': r = requests.delete(url,data = payload,headers = headers) if r.status_code == ex: #如果和期望值一樣,case通過 result.append('true') if 'message' in r.json().keys(): #這個看情況而定吧,這邊例如賬號密碼錯誤也是在message里的 responseValue.append(r.json()['message']) #將message先存入response else: responseValue.append('') else: result.append('false') #如果結果不對的話,如果有message就寫,沒有就全部寫入 if 'message' in r.json().keys(): responseValue.append(r.json()['message']) else: responseValue.append(json.dumps(r.json(),ensure_ascii=False)) r.close() print('共有%d個url,當第%d個執行完畢'%(nrow-1,i)) book = copy(data) sheet1 = book.get_sheet(0) #copy原來的excel for j in range(1,nrow):#將結果寫入到對應的表格中 #將結果和response都寫入到復制的工作表中 sheet1.write(j,5,result[j-1]) sheet1.write(j,6,responseValue[j-1]) os.remove(excel) book.save(excel) #移除原來的excel,保存新的excel
代碼中獲取返回的message,要看實際情況,我這邊是開發將錯誤都通過message返回,比如請求的數據不存在,請求注冊的手機號已經注冊過等等
代碼中存在很多不足,比如沒有捕獲異常,如果有異常出現就完蛋了。、
另外只對返回的狀態碼進行了判斷,感覺還有很多可以做的事,比如對返回的json的結構進行判斷,對數據庫進行查詢,比如delete的請求,接口返回成功,但是不一定數據庫真的已經刪除了
還有之前用appium時用到的unittest和HTMLTestRunner,感覺都可以和這個一起使用;
如果那樣的話,感覺可以定制case,針對每個接口的不同功能,做針對性的判斷
增加下遇到的小問題:
1.對返回的json進行判斷,json返回是中文時的問題
json.dumps(r.json(),ensure_ascii=False)
2.最后的excel報告的樣式沒有了
data = xlrd.open_workbook(excel,formatting_info=True)