「这是我参与11月更文挑战的第29天,活动详情查看:2021最后一次更文挑战」
前言
这是一个插曲,前面说了一堆python基础语法,紧接着就到了工具,再按照目录一直往下写,就到了代码层,但是在许多代码示例中出现了requests库,相信有些同学会一脸茫然,这个是什么东西,为什么会出现在这里?所以作者又回过头补一篇,说在最后,requests库看似代码,但它实现的功能,咱可以将它看作是一款接口测试工具。
requests
过多的功能介绍就免了吧,就简单的说一句,它能满足与你日常的http协议的接口测试以及想用它来做些别的什么事情,都可以!
代码实现你的第一个接口测试
pip install requests # 安装requests库
- 以用户登录接口为例:/login/ByMobile
import requests
url = "http://127.0.0.1:5000/login/ByMobile"
data = {'zone': 86, 'mobile': 13800138000, 'code': 1231}
res = requests.get(url,params = data)
print(res)
复制代码
- 第一步导库,你想用哪个库的功能,就先引入它;
- 第二步准备参数:接口地址、参数、requests的请求方式
-
- 参数需要提一下,不出意外的情况下,参数均以dict数据类型展示
- 第三步调试结果,直接打印输出的是响应状态码
# 对res请求结果对象的输出进行测试
print(res) # 输出:<Response [200]>
print(res.status_code) # 输出:200
print(res.json()) # 输出: {'code': 0, 'msg': '登录成功'}
print(res.text) # 输出:
{
"code": 0,
"msg": "登录成功"
}
print(res.content) # 输出的二进制:b'{\n "code": 0, \n "msg": "\xe7\x99\xbb\xe5\xbd\x95\xe6\x88\x90\xe5\x8a\x9f"\n}\n'
print(res.headers) # 输出响应头信息:{'Content-Type': 'application/json', 'Content-Length': '42', 'Server': 'Werkzeug/1.0.1 Python/3.7.5', 'Date': 'Tue, 30 Nov 2021 10:04:29 GMT'}
复制代码
- 以上大致为requests响应对象常用的输出内容;是不是感觉很丰富。
依葫芦画瓢
requests能支持get、post等常用方法,还能通过不同参数接收和请求,可以是表单、json对象、params、还有上传文件等不同的参数区分。
重要的不是这里,而是咱们需要封装,意思是不管外面如何传参,内部requests请求的参数和形式是如何对应正确的;所以到这里咱们需要封装,将requests这个工具库在包装一下⬇⬇⬇
import json
import requests
from utils.logger import getLog
log = getLog()
class HandleRequests(object):
'''
classdocs:requests封装一层,对参数data、json进行区分
'''
def __init__(self):
'''
Constructor:初始化requests对象
'''
self.http = requests.Session()
def __call__(self, method, url, data=None, **kwargs):
"""魔术方法调用"""
self.method = method.upper()
if isinstance(data, str):
try:
data = json.loads(data)
except json.JSONDecodeError as error:
data = eval(data) log.error("{}数据中包含了python对象,如:None\False\True,不能再转成dict对象:{}".format(data, error))
if self.method == "POST":
res = self.http.request(self.method, url, json=data, verify=True, **kwargs)
elif self.method == "GET":
res = self.http.request(self.method, url, params=data, verify=True, **kwargs)
else:
log.info("请求方法{},暂不支持!!!".format(self.method))
return res
复制代码
扩展
说到requests库,你难道没有用它做过webservice接口的测试?
抱歉,还真的好像没有,而是使用 suds 第三方库来完成。
- 以python2.7版本为例,下载suds
# 导包
from suds.xsd.doctor import ImportDoctor, Import
from suds.client import Client
# 这些就像是soap协议中的xml头格式,可以注释,只是在输出client信息时信息少些而已
imp = Import('http://www.w3.org/2001/XMLSchema',
location='http://www.w3.org/2001/XMLSchema.xsd')
imp.filter.add('http://WebXml.com.cn/')
doctor = ImportDoctor(imp)
# 地址
url="http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl"
client=Client(url,doctor=doctor)
# 输出webservice接口的所有信息:包括请求方法、请求参数等
print client
res=client.service.qqCheckOnline("1251111111")
# 输出的部署xml格式,而是标签对的值
print res
复制代码




近期评论