Python接口自动化 -RESTful请求方法封装
对 Requests 库下一些常见的请求方法进行封装,调用起来更加方便。
先来看一个例子:
比如要测试登录接口
- 正常流测试(正确的账号、密码)
- 异常流测试(正确的账号,错误的密码等)
import requests
# 正常流
url = 'http://192.168.28.128:8080/recruit.students/login/in?account=admin&pwd=test123'
result = requests.get(url)
print(result.text)
# 异常流,密码错误
url = 'http://192.168.28.128:8080/recruit.students/login/in?account=admin&pwd=test'
result = requests.get(url)
print(result.text)
看上面这段代码,是不是显得比较冗余,我们每个请求里都要写一遍完整的 url。
还有就是当我们需要做一些连续调用的请求,比如“先登录再把商品加入购物车“,这样的时候,需要使用 requests 的 session 功能。
就要需要登录和登录后的请求都由同一个reqeusts session对象来发出。
# -*- coding:utf-8 -*-
import requests
import json as complexjson
class RestClient():
def __init__(self, api_root_url):
"""
:type api_root_url: 就是url的前缀,相当于host
"""
self.api_root_url = api_root_url
# 用session保持会话,相当于微型浏览器
self.session = requests.session()
def get(self, uri, **kwargs):
"""
:type uri: 路径,每个接口的路径不一样,所以把路径抽离出来
:type **kwargs: 关键字参数,它将不定长参数转换为 dict 传入函数
"""
# 返回的时候调用这个类中的 request 方法
return self.request(uri, "GET", **kwargs)
def post(self, uri, data=None, json=None, **kwargs):
return self.request(uri, "POST", data, json, **kwargs)
def put(self, uri, data=None, **kwargs):
return self.request(uri, "PUT", data, **kwargs)
def delete(self, uri, **kwargs):
return self.request(uri, "DELETE", **kwargs)
def patch(self, uri, data=None, **kwargs):
return self.request(uri, "PATCH", data, **kwargs)
def request(self, uri, method, data=None, json=None, **kwargs):
url = self.api_root_url + uri
if method == "GET":
return self.session.get(url, **kwargs)
if method == "POST":
return self.session.post(url, data, json, **kwargs)
if method == "PUT":
if json:
# PUT 和 PATCH 中没有提供直接使用json参数的方法,因此需要用data来传入
data = complexjson.dumps(json)
return self.session.put(url, data, **kwargs)
if method == "DELETE":
return self.session.delete(url, **kwargs)
if method == "PATCH":
if json:
data = complexjson.dumps(json)
return self.session.patch(url, data, **kwargs)
这里,这个类里我加了一些方法,包括:
-
init 方法:初始化这个类,初始化的时候需要输入 api_root_url,也就是URL的前缀host。另外还在初始化时创建了 self.session 用于保存 requests 的 session。
-
get,post 等各种 http 方法,用于让用户使用。但这里并没有真正实现这些方法,因为这些方法都是在 requests 里有实现过,我们只要把参数传给 requests 就行了。这个传递我们写在 request 方法里,所以这里的 http 方法都是调用 requests 方法。
-
request 方法:真正调用 self.session 的各种方法,这里同样是把参数传下去,只是在传之前,给所有用户输入的 url 加了一个前缀。前缀的值是用户在 init 方法里输入的。
使用封装好的方法进行登录操作:
r = RestClient("http://192.168.28.128:8080")
login = r.get(uri="/recruit.students/login/in",
params={"account": "admin",
"pwd": "660B8D2D5359FF6F94F8D3345698F88C"
}
)
只是要输入接口的 uri 和参数即可,不用再输入完整的 url。后续还可以对接口进行封装,接口封装完之后,测试的时候只需要输入接口入参就行。
-----分界线-------
王阳名说:知而不行,是为不知
读书、学习、看文章,总说自己知道,但不去做,其实就是不知道。说自己知道,可能只是为了好看。
学习第一个方法就是:重复
学一个知识,学 1 遍,没学会,继续学第 2 遍,第 3 遍,第 4 遍……,直到学会。
练一个技能,练 1 次,不会用,继续练 2 次,第 3 次,第 4 次……,直到会用。
书读百遍,其义自见。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2018-03-02 (一)Fiddler的介绍和安装
2018-03-02 python-基本算法(冒泡)
2018-03-02 selenium - 截取页面图片和截取某个元素的图