自动化测试框架Pytest六——requests封装
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 requests
class 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 re
import requests
class TestProductApi:
access_token = "" session = requests.session() #通过session去关联,session默认情况下会自动关联cookie
def 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: get url: https://api.weixin.qq.com/cgi-bin/token params: grant_type: client_credential appid: wx8e8b67ced3c4b884 secret: 27c524bd9ca932e31e229be30b0a805b validate: none
修改用例,参数从yaml文件里去读取:
# 测试类名必须以Test开头,并且不能有init方法import pytestimport requests
from test6.commons.yaml_util import read_testcase_yaml
class 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 requests
class 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.text print(res.json()['access_token']) return res else: 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群大家一起讨论交流,里面也有各种软件测试资料和技术交流。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfjbcki
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13