python和request搭建接口自动化框架,python+requests接口自动化测试实战
这篇文章主要介绍了计算机编程语言接口自动化之请求请求封装源码分析,文章围绕主题的相关资料展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
目录
1.源码分析2.要求请求封装3.总结前言:我们在做自动化测试的时候,大家都是希望自己写的代码越简洁越好,代码重复量越少越好。那么,我们可以考虑将请求的请求类型(如:获取、发布、删除请求)都封装起来。这样,我们在编写用例的时候就可以直接进行请求了。
1. 源码分析
我们先来看一下获取、发布、删除等请求的源码,看一下它们都有什么特点。
(1)Get请求源码
def get(self,url,**kwargs):
r 发送得到请求。返回“响应”对象。
:param url:新的:类: "请求"对象的url .
:param \*\*kwargs: "请求"采用的可选参数。
:rtype:请求。反应
夸尔斯。设置默认值(“allow _ redirects”,True)
返回self.request(GET ,url,**kwargs)
(2)Post请求源码
def post(self,url,data=None,json=None,**kwargs):
r 发送发布请求。返回“响应”对象。
:param url:新的:类: "请求"对象的url .
:参数数据:(可选)字典、元组、字节或类似文件的列表
要在请求的正文中发送的对象。
:param json:(可选)json在请求的正文中发送。
:param \*\*kwargs: "请求"采用的可选参数。
:rtype:请求。反应
返回self.request(POST ,url,data=data,json=json,**kwargs)
(3)Delect请求源码
定义删除(自己,网址,**kwargs):
r 发送删除请求。返回“响应”对象。
:param url:新的:类: "请求"对象的url .
:param \*\*kwargs: "请求"采用的可选参数。
:rtype:请求。反应
返回self.request(删除,网址,**kwargs)
(4)分析结果
我们发现,不管是得到请求、还是邮政请求或者是删除请求,它们到最后返回的都是请求函数。那么,我们再去看一看请求函数的源码。
定义请求(自身,方法,网址,
params=None,data=None,headers=None,cookies=None,files=None,
auth=None,timeout=None,allow_redirects=True,proxies=None,
hooks=None, stream=None, verify=None, cert=None, json=None):
"""Constructs a :class:`Request <Request>`, prepares it and sends it.
Returns :class:`Response <Response>` object.
:param method: method for the new :class:`Request` object.
:param url: URL for the new :class:`Request` object.
:param params: (optional) Dictionary or bytes to be sent in the query
string for the :class:`Request`.
:param data: (optional) Dictionary, list of tuples, bytes, or file-like
object to send in the body of the :class:`Request`.
:param json: (optional) json to send in the body of the
:class:`Request`.
:param headers: (optional) Dictionary of HTTP Headers to send with the
:class:`Request`.
:param cookies: (optional) Dict or CookieJar object to send with the
:class:`Request`.
:param files: (optional) Dictionary of ``filename: file-like-objects``
for multipart encoding upload.
:param auth: (optional) Auth tuple or callable to enable
Basic/Digest/Custom HTTP Auth.
:param timeout: (optional) How long to wait for the server to send
data before giving up, as a float, or a :ref:`(connect timeout,
read timeout) <timeouts>` tuple.
:type timeout: float or tuple
:param allow_redirects: (optional) Set to True by default.
:type allow_redirects: bool
:param proxies: (optional) Dictionary mapping protocol or protocol and
hostname to the URL of the proxy.
:param stream: (optional) whether to immediately download the response
content. Defaults to ``False``.
:param verify: (optional) Either a boolean, in which case it controls whether we verify
the servers TLS certificate, or a string, in which case it must be a path
to a CA bundle to use. Defaults to ``True``.
:param cert: (optional) if String, path to ssl client cert file (.pem).
If Tuple, (cert, key) pair.
:rtype: requests.Response
"""
# Create the Request.
req = Request(
method=method.upper(),
url=url,
headers=headers,
files=files,
data=data or {},
json=json,
params=params or {},
auth=auth,
cookies=cookies,
hooks=hooks,
)
prep = self.prepare_request(req)
proxies = proxies or {}
settings = self.merge_environment_settings(
prep.url, proxies, stream, verify, cert
)
# Send the request.
send_kwargs = {
timeout: timeout,
allow_redirects: allow_redirects,
}
send_kwargs.update(settings)
resp = self.send(prep, **send_kwargs)
return resp
从request源码可以看出,它先创建一个Request,然后将传过来的所有参数放在里面,再接着调用self.send(),并将Request传过去。这里我们将不在分析后面的send等方法的源码了,有兴趣的同学可以自行了解。
分析完源码之后发现,我们可以不需要单独在一个类中去定义Get、Post等其他方法,然后在单独调用request。其实,我们直接调用request即可。
2. requests请求封装
代码示例:
import requestsclass RequestMain:
def __init__(self):
"""
session管理器
requests.session(): 维持会话,跨请求的时候保存参数
"""
# 实例化session
self.session = requests.session()
def request_main(self, method, url, params=None, data=None, json=None, headers=None, **kwargs):
"""
:param method: 请求方式
:param url: 请求地址
:param params: 字典或bytes,作为参数增加到url中
:param data: data类型传参,字典、字节序列或文件对象,作为Request的内容
:param json: json传参,作为Request的内容
:param headers: 请求头,字典
:param kwargs: 若还有其他的参数,使用可变参数字典形式进行传递
:return:
"""
# 对异常进行捕获
try:
"""
封装request请求,将请求方法、请求地址,请求参数、请求头等信息入参。
注 :verify: True/False,默认为True,认证SSL证书开关;cert: 本地SSL证书。如果不需要ssl认证,可将这两个入参去掉
"""
re_data = self.session.request(method, url, params=params, data=data, json=json, headers=headers, cert=(client_crt, client_key), verify=False, **kwargs)
# 异常处理 报错显示具体信息
except Exception as e:
# 打印异常
print("请求失败:{0}".format(e))
# 返回响应结果
return re_data
if __name__ == __main__:
# 请求地址
url = 请求地址
# 请求参数
payload = {"请求参数"}
# 请求头
header = {"headers"}
# 实例化 RequestMain()
re = RequestMain()
# 调用request_main,并将参数传过去
request_data = re.request_main("请求方式", url, json=payload, headers=header)
# 打印响应结果
print(request_data.text)
注:如果你调的接口不需要SSL认证,可将cert与verify两个参数去掉。
3. 总结
本文简单的介绍了Python接口自动化之request请求封装
到此这篇关于Python接口自动化之request请求封装源码分析的文章就介绍到这了,更多相关Python request 内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。