requests是用来发送http请求以及接收http响应的python第三方库,主要用于做接口自动化。今天我们来学习一下如何封装到pytest里。
1、安装requests
pip install requests
2、requests库常用方法。包括了http的几种常见请求和必填参数
requests.get(url, params=None, **kwargs)requests.post(url, data=None, json=None, **kwargs)requests.put(url, data=None, **kwargs)requests.delete(url, **kwargs)requests.request(method, url, **kwargs)
3、get请求的常用返回值,这里测试用的是我自己写的一个jira方法
import requestsclass TestApi:def test_get(self):url = "http://172.19.1.34:8015/emanage/getissue"datas = {"issue":"PAY"}res = requests.get(url=url,params=datas)print(res.text) #返回body的文本信息print(res.json) #返回body的json格式print(res.content) #返回body的byte类型print(res.status_code) # 返回状态码print(res.reason) # 返回状态信息print(res.cookies) # 返回响应的cookie信息print(res.encoding) # 返回编码格式print(res.headers) # 返回响应头print(res.request.method) # 返回请求的数据

4、post请求和get请求差不多,需要注意的是json和字符串之间的转换
json.loads() 把json字符串转化成dict
json.dumps() 把dict转化成json字符串
def test_post(self):urls = "http://172.19.1.34:8016/hdj/s1/"datas = {"user": "wufan","sqlword": "select * from t_11"}res = requests.post(url=urls, data=datas)print(res.json())

5、实际案例:
获取微信小程序的token接口并通过token去获取小程序标签
获取微信小程序appid和secret的方式,访问下面地址,微信登录即可
https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
获取了appid和secret后就可以获取小程序的token了
import jsonimport reimport requestsclass TestProductApi:access_token = ""session = requests.session() #通过session去关联,session默认情况下会自动关联cookiedef test_get_token(self):print("获取token鉴权码")urls = "https://api.weixin.qq.com/cgi-bin/token"datas = {"grant_type":"client_credential","appid":"wx8e8b67ced3c4b884","secret":"27c524bd9ca932e31e229be30b0a805b"}res = TestProductApi.session.request("get",url=urls,params=datas)TestProductApi.access_token = res.json()['access_token']print(TestProductApi.access_token)

6、上面的案例,data和url都是直接写在用例里,不便于后期维护。
下面我们对requests进行第一层封装,在yaml文件里读取参数。
在commons/yaml_util.py工具里新增方法:
#读取测试用例def read_testcase_yaml(yaml_path):with open(get_object_path()+yaml_path,encoding='utf-8') as f:value = yaml.load(f,Loader=yaml.FullLoader)return value
将get请求需要的参数写在pm_get_token.yaml文件里:
-name: 获取token鉴权码request:method: geturl: https://api.weixin.qq.com/cgi-bin/tokenparams:grant_type: client_credentialappid: wx8e8b67ced3c4b884secret: 27c524bd9ca932e31e229be30b0a805bvalidate: none
修改用例,参数从yaml文件里去读取:
# 测试类名必须以Test开头,并且不能有init方法import pytestimport requestsfrom test6.commons.yaml_util import read_testcase_yamlclass TestProductApi:#测试方法必须以test开头@pytest.mark.parametrize("args_name", read_testcase_yaml('/testcase/pm_get_token.yaml'))def test_get_token(self, args_name):url = args_name['request']['url']params = args_name['request']['params']res = requests.get(url=url,params=params)print(res.json()['access_token'])
接口调取成功,成功输出token

7、虽然参数都写到yaml文件里去了,但代码还是复杂了一点。
我们来进行第二次封装,新建一个/commons/request_util.py,
里面包含了校验yaml文件格式:
import reimport requestsclass RequestUtil:session = requests.session()#规范YAML测试用例def standard_yaml(self,caseinfo):caseinfo_keys = caseinfo.keys()# 判断关键词是否完整if "name" in caseinfo_keys and "request" in caseinfo_keys and "validate" in caseinfo_keys:cs_request = caseinfo['request']cs_request_keys = cs_request.keys()if "method" in cs_request_keys and "url" in cs_request_keys:method = cs_request.pop("method") #pop-删除列表里最后一个并且返回这个值url = cs_request.pop("url")res = self.send_request(method,url,**cs_request)# return_text = res.textprint(res.json()['access_token'])return reselse:print("二级关键字必须包含:method,url")else:print("一级关键字必须包含:name,request,validate")#统一请求封装def send_request(self, method, url, **kwargs):method = str(method).lower()res = RequestUtil.session.request(method,url,**kwargs)return res
新建一个用例,调用request_util工具,
这次只要一句话就可以请求接口了:
@pytest.mark.parametrize("caseinfo", read_testcase_yaml('/testcase/pm_get_token.yaml'))def test_get_token2(self, caseinfo):RequestUtil().standard_yaml(caseinfo)
查看结果,也能成功获取token,但是代码简单了许多,两个用例都能获取token:

学习资源分享
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….
如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入下方我的qq群大家一起讨论交流,里面也有各种软件测试资料和技术交流。