Python 接口测试之接口请求方法封装
引言
前面讲过三篇文章:
1、Python 接口测试之Excel表格数据操作方法封装 ;
既然我们接口测试用例写好了,测试数据也拿到了,那么就是模拟调用接口的方法了,方法有get,post,put,delete,具体是选择哪种,我们需要根据不同接口规定好请求方法来调用。为了方便,将四种方法封装到一个类中,每次只需访问类中某个方法,到达请求的目的。
请求方法封装
下面就直接附上代码:
__author__ = 'Leo' import requests import json class ApiRequest(object): """ 请求方法 """ # 请求方法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() # 请求方法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) == "<Response [200]>": return res.json() else: return res.text # 请求方法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() # 请求方法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 = "你的请求方式不正确!" # return res return json.dumps(res, ensure_ascii=False, indent=4, sort_keys=True,separators=(',', ':'))
简单的解释一下相关知识点:
ensure_ascii:默认值True,如果dict内含有non-ASCII的字符,则会类似\uXXXX的显示数据,设置成False后,就能正常显示。 indent:应该是一个非负的整型,如果是0,或者为空,则一行显示数据,否则会换行且按照indent的数量显示前面的空白,这样打印出来的json数据也叫pretty-printed json。 separators:分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是(‘,’,’:’);这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开。 encoding:默认是UTF-8,设置json数据的编码方式。 sort_keys:将数据根据keys的值进行排序。
执行测试
方法已经封装好,既然接口数据有了,请求方法也有了,我们不妨测试一下之前封装好的代码,用实际行动来检验一下:
# get请求 if __name__ == '__main__': url = "http://httpbin.org/get" ir = ApiRequest() result = ir.run_method(url=url,method='get') print(result)
运行结果:
# post请求 url2 = "http://httpbin.org/post" ir2 = ApiRequest() data = {'id': '测试'} result = ir2.run_method(url=url2,method='post',data=data) print(result)
运行结果:
有些细心人可能有疑问,这里没有使用excel中的接口测试数据,下面我就演示一下,调用excel中维护的接口测试数据,先维护数据:
from basic_method import get_excelData get_data = get_excelData.getData() print("获取是否运行key: ",get_data.get_is_run(1)) print("获取接口url: ",get_data.get_url(1)) print("获取接口请求方法: ",get_data.get_method(1)) print("获取接口请求数据: ",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)
运行结果:
这次就是调用过程是从excel拿的数据,并且通过封装好的方法请求模拟请求接口。证明此前封装好的代码是可以正常运行。
这里献上另一种请求方法:
总结
上面对接口请求方法封装已经完成了,并且将之前写的封装代码一起使用,实现了自动化测试框架中核心的代码,对自动化测试,测试开发感兴趣的朋友,同学可以加入QQ测试开发交流群:696400122。相互学习,共同进步!
作者:全栈测试开发日记
出处:https://www.cnblogs.com/liudinglong/
csdn:https://blog.csdn.net/liudinglong1989/
微信公众号:全栈测试开发日记
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。