python 接口测试 url_Python 接口测试之接口请求方法封装
引言
前面講過三篇文章:
既然我們接口測試用例寫好了,測試數(shù)據(jù)也拿到了,那么就是模擬調(diào)用接口的方法了,方法有g(shù)et,post,put,delete,具體是選擇哪種,我們需要根據(jù)不同接口規(guī)定好請(qǐng)求方法來調(diào)用。為了方便,將四種方法封裝到一個(gè)類中,每次只需訪問類中某個(gè)方法,到達(dá)請(qǐng)求的目的。
請(qǐng)求方法封裝
下面就直接附上代碼:
__author__ = 'Leo'
import requests
import json
class ApiRequest(object):
"""
請(qǐng)求方法
"""
# 請(qǐng)求方法get
def get_method(self,url,data=None,header=None):
if header is not None:
res = requests.get(url,params=data,headers=header)
else:
res = requests.get(url,params=data)
return res.json()
# 請(qǐng)求方法post
def post_method(self,url,data=None,header=None):
global res
if header is not None:
res = requests.post(url,json=data,headers=header)
else:
res = requests.post(url,json=data)
if str(res) == "":
return res.json()
else:
return res.text
# 請(qǐng)求方法put
def put_method(self,url,data=None,header=None):
if header is not None:
res = requests.put(url,json=data,headers=header)
else:
res = requests.delete(url, json=data)
return res.json()
# 請(qǐng)求方法delete
def delete_method(self, url, data=None, header=None):
if header is not None:
res = requests.delete(url, json=data, headers=header)
else:
res = requests.delete(url, json=data)
return res.json()
# 主方法
def run_method(self,method,url,data=None,header=None):
if method == 'get' or method == 'GET':
res = self.get_method(url,data,header)
elif method == 'post' or method =='POST':
res = self.post_method(url,data,header)
elif method == 'put' or method == 'PUT':
res = self.post_method(url,data,header)
elif method == 'delete' or method == 'DELETE':
res = self.post_method(url,data,header)
else:
res = "你的請(qǐng)求方式不正確!"
# return res
return json.dumps(res, ensure_ascii=False, indent=4, sort_keys=True,separators=(',', ':'))
簡單的解釋一下相關(guān)知識(shí)點(diǎn):
ensure_ascii:默認(rèn)值True,如果dict內(nèi)含有non-ASCII的字符,則會(huì)類似\uXXXX的顯示數(shù)據(jù),設(shè)置成False后,就能正常顯示。
indent:應(yīng)該是一個(gè)非負(fù)的整型,如果是0,或者為空,則一行顯示數(shù)據(jù),否則會(huì)換行且按照indent的數(shù)量顯示前面的空白,這樣打印出來的json數(shù)據(jù)也叫pretty-printed json。
separators:分隔符,實(shí)際上是(item_separator, dict_separator)的一個(gè)元組,默認(rèn)的就是(‘,’,’:’);這表示dictionary內(nèi)keys之間用“,”隔開,而KEY和value之間用“:”隔開。
encoding:默認(rèn)是UTF-8,設(shè)置json數(shù)據(jù)的編碼方式。
sort_keys:將數(shù)據(jù)根據(jù)keys的值進(jìn)行排序。
執(zhí)行測試
方法已經(jīng)封裝好,既然接口數(shù)據(jù)有了,請(qǐng)求方法也有了,我們不妨測試一下之前封裝好的代碼,用實(shí)際行動(dòng)來檢驗(yàn)一下:
# get請(qǐng)求
if __name__ == '__main__':
url = "http://httpbin.org/get"
ir = ApiRequest()
result = ir.run_method(url=url,method='get')
print(result)
運(yùn)行結(jié)果:
# post請(qǐng)求
url2 = "http://httpbin.org/post"
ir2 = ApiRequest()
data = {'id': '測試'}
result = ir2.run_method(url=url2,method='post',data=data)
print(result)
運(yùn)行結(jié)果:
有些細(xì)心人可能有疑問,這里沒有使用excel中的接口測試數(shù)據(jù),下面我就演示一下,調(diào)用excel中維護(hù)的接口測試數(shù)據(jù),先維護(hù)數(shù)據(jù):
from basic_method import get_excelData
get_data = get_excelData.getData()
print("獲取是否運(yùn)行key: ",get_data.get_is_run(1))
print("獲取接口url: ",get_data.get_url(1))
print("獲取接口請(qǐng)求方法: ",get_data.get_method(1))
print("獲取接口請(qǐng)求數(shù)據(jù): ",get_data.get_data(1))
url2 = get_data.get_url(1)
method = get_data.get_method(1)
data = get_data.get_data(1)
ir2 = ApiRequest()
result = ir2.run_method(url=url2,method=method,data=data)
print(result)
運(yùn)行結(jié)果:
這次就是調(diào)用過程是從excel拿的數(shù)據(jù),并且通過封裝好的方法請(qǐng)求模擬請(qǐng)求接口。證明此前封裝好的代碼是可以正常運(yùn)行。
這里獻(xiàn)上另一種請(qǐng)求方法:
總結(jié)
上面對(duì)接口請(qǐng)求方法封裝已經(jīng)完成了,并且將之前寫的封裝代碼一起使用,實(shí)現(xiàn)了自動(dòng)化測試框架中核心的代碼,對(duì)自動(dòng)化測試,測試開發(fā)感興趣的朋友,同學(xué)可以加入QQ測試開發(fā)交流群:696400122。相互學(xué)習(xí),共同進(jìn)步!
總結(jié)
以上是生活随笔為你收集整理的python 接口测试 url_Python 接口测试之接口请求方法封装的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pspice仿真老不收敛怎么办?
- 下一篇: Sensor Tower 发布 2022