以前學習了使用jmeter+ant作接口測試,並實現了接口的批量維護管理(大概500多條用例),對「接口」以及「接口測試」有了一個基礎瞭解,最近找了一些用python作接口測試的資料,一方面爲了學習下如何使用python進行接口測試(如何作出一個簡單基礎的接口測試框架),另外一方面也爲了鍛鍊下如何用python寫代碼(接觸python也有一段時間了,可是每次本身編程總有種提筆忘字的感受,真是欠練!!)python
首先,用python作接口測試,主要用到就是requests庫和json庫。編程
1 # -*- coding: UTF-8 -*- 2 import requests 3 get_url = 'http://localhost:7001/XXX' 4 data = {'userCode':'csqy123456','userPWD':'123456'} 5 r = requests.get(url=get_url, params=data, timeout=5) #產生一個名爲r的Response對象,能夠從這個對象中獲取咱們想要的信息; #get請求傳參數時,使用params關鍵字 #timeout參數用來設定中止等待響應的時間 6 print(r.url) #返回請求url 7 print(r.json()) #以JSON格式解析響應內容 8 print(r.status_code) #返回狀態碼 9 print(r.raise_for_status()) #若是發送了一個錯誤請求,如40四、500等,能夠經過raise_for_status()來拋出異常 10 print(r.encoding) #查看requests使用了什麼編碼,同時能夠用r.encoding屬性來改變它 11 print(r.raw) #獲取來自服務器的原始套接字響應 12 print(r.headers) #服務器返回給咱們的響應頭信息,也能夠在傳參時經過headers=XXX來定製請求頭 13 print(r.request) #獲取原來建立的Request對象 14 print(r.request.headers) #發送到服務器的請求頭
1 # -*- coding: UTF-8 -*- 2 import requests 3 post_url = 'http://localhost:7001/XXX' 4 payload2 = {'approveSeq':'6610','userCode':'qyzh123456_88','projName':'測試項目'} 5 r = requests.post(post_url, data=payload2, timeout=1) #post請求傳參數時,使用data關鍵字
6 print(r.json())
7 print(r.status_code)
# -*- coding: UTF-8 -*- import requests def send_get(url, data): """ 定義send_get函數,用來接收參數,發送get請求 """ r = requests.get(url=url, params=data) result = r.json() return result def send_post(url, data): """ 定義send_post函數,用來接收參數,發送post請求 """ r = requests.get(url=url, data=data) result = r.json() return result def main(url, method, data): """ 定義一個主函數,根據method是get或post,來調用send_post()或send_get() """ if method == 'POST': r = send_post(url, data) # 若是是POST請求,則調用send_post() else: r = send_get(url, data) # 若是是GET請求,則調用send_get() return r # 將結果返回出去 url = 'http://localhost:7001/XXX' data = { 'controlSeq': '2018118325' } demo = main(url, 'GET', data) print(demo)
run_method.py
# -*- coding: UTF-8 -*- import requests import json class RunMain: """含有構造器""" def __init__(self, url, method, data=None): self.t = self.run_main(url, method, data) def send_post(self, url, data): r = requests.post(url=url, data=data) result = r.json() return json.dumps(result, indent=2, sort_keys=False, ensure_ascii=False) def send_get(self, url, data): r = requests.get(url=url, params=data) result = r.json() return json.dumps(result, indent=2, sort_keys=False, ensure_ascii=False) # 利用json.dumps將響應數據進行json格式的編碼解析 # indent=2將輸出結果縮進2個字符顯示 # sort_keys=False,輸出結果是否按照關鍵字排序 # json.dumps 序列化時對中文默認使用的ascii編碼,ensure_ascii=False纔會輸出中文 # return result def run_main(self, url, method, data=None): if method == 'GET': r = self.send_get(url, data) else: r = self.send_post(url, data) return r if __name__ == '__main__': url = 'http://localhost:7001/XXX' data = { 'controlSeq': '2018118325' } test = RunMain(url, 'GET', data) # 由於有構造器 __init__,實例化時要帶參數 print(test.t)
run_method.py
# -*- coding: UTF-8 -*- import requests import json
class RunMain: """無構造器""" def send_get(self, url, data): res = requests.get(url=url, params=data).json() return res def send_post(self, url, data): res = requests.post(url=url, data=data).json() return res def run_main(self, url, method, data=None): res = None if method == 'GET': res = self.send_get(url, data) else: res = self.send_post(url, data) return res if __name__ == '__main__': url = 'http://192.168.0.53:7001/CommonService/api/control/controlProgress/query.v' data = { 'controlSeq': '2018118325' } run = RunMain() # 先實例化,實例化時不須要帶參數 print(run.run_main(url, 'GET', data))
ps.建議在封裝運行方法類時,不要加構造器,這樣就不須要在實例化時傳參,在後面的主函數中從excel中取出參數後再傳給類中的方法便可json
下面是json.dumps使用先後的對比圖api
第一目的內容到此結束,一方面簡單介紹下requests的用法,另外一方面將post和get請求進行基本封裝,經過實例化對象進行調用服務器