接口自动化项目实战(1):requests请求封装

1. requests 请求封装

专门封装了 Python requests 库,统一管理 GET/POST 请求,简化接口调用,适合接口自动化测试入门学习。


整体核心作用

  1. 统一封装 :把重复的 requests.get/post 代码封装成类,不用每次写重复代码
  2. 统一入口 :通过 run_main 一个方法,自动根据请求方法调用对应函数
  3. 适配场景 :兼容有无请求头 、HTTPS 证书忽略等常见接口场景
  4. 返回统一 :所有请求直接返回 json 格式结果,方便后续断言

1.1. 类与初始化方法

复制代码
class SendRequests(object):
    """封装接口的请求:统一封装GET/POST,方便接口自动化调用"""
    def __init__(self):
        pass
  • 定义一个请求工具类 SendRequests
  • __init__ 初始化方法:暂时无初始化参数,留作后续扩展(如会话保持、超时设置)

1.2. GET 请求封装(重点)

1. 方法定义

复制代码
def get(self, url, data, head):
    if head is None:
        response = requests.get(url=url, params=data)
    else:
        response = requests.get(url=url, params=data, headers=head)
    return response.json()

2. GET 核心知识点

  1. 传参固定 :GET 请求传参必须用 params=,不能用 data=
  2. 参数拼接 :params 会自动把字典拼接到 URL 后面(?key=value)
  3. 请求头兼容 :判断 head 是否为 None,兼容无请求头的接口
  4. 返回值 :直接返回 response.json(),拿到字典格式数据
  5. 关键字传参 :url=url 写法清晰,避免参数传错

3. 参数说明

  • url:接口地址
  • data:请求参数(字典格式)
  • head:请求头(可为 None)

1.3. POST 请求封装(重点)

1. 方法定义

复制代码
def post(self, url, data, head):
    if head is None:
        response = requests.post(url, data, verify=False)
    else:
        response = requests.post(url, data, headers=head)
    return response.json()

2. POST 核心知识点

  1. 传参方式 :使用位置传参 (url, data, headers),不写关键字
  2. 自动识别 :位置传参会自动识别是表单提交 还是 JSON 提交
  3. HTTPS 处理 :verify=False 忽略 HTTPS 证书校验(解决接口请求报错)
  4. 请求头兼容:同样兼容无请求头的场景
  5. 返回值 :统一返回 json 格式

1.4. 统一请求入口:run_main(最实用)

1. 方法作用

根据传入的请求方法,自动分发到 GET/POST 方法,是整个封装的核心调度器。

2. 代码逻辑

复制代码
def run_main(self, url, data, header, method):
    res = None
    if method.upper() == 'GET':  # 转大写,兼容小写方法传入
        res = self.get(url, data, header)
    elif method.upper() == 'POST':
        res = self.post(url, data, header)
    else:
        print("暂时只支持get和post请求")
    return res

3. 核心优势

  • 调用时不用区分 GET/POST ,只需要传 method 参数
  • 代码统一、易维护,后续加 PUT/DELETE 只需要扩展方法
  • 容错性:upper() 兼容 get/post/GET/POST 多种写法

1.5. 使用示例

复制代码
if __name__ == '__main__':
    # 1. 定义接口信息
    login_url = 'http://127.0.0.1:8787/dar/user/login'
    login_data = {"user_name": "test01", "passwd": "admin123"}
    login_headers = None
    login_method = "POST"

    # 2. 调用封装类
    send = SendRequests()  # 初始化对象
    res = send.run_main(login_url, login_data, login_headers, login_method)

    # 3. 输出结果
    print(res)

调用步骤

  1. 定义接口四要素:url / data / headers / method
  2. 实例化封装类对象
  3. 通过 run_main 统一发送请求
  4. 打印/处理返回结果
相关推荐
骊山道童16 小时前
第 1 周 LLM 原理与高效微调知识精讲手册
python
前端架构师-老李16 小时前
HTML与CSS基础第四课—strong、em、b、i 各表示什么
前端·css·html
king王一帅16 小时前
AI 时代一群人在卷笔记软件,我想先把 Markdown 编辑器的底层做好
前端·ai编程·markdown
用户114818678948416 小时前
盲水印:DCT-QIM 从原理到踩坑
前端
蘑菇小白16 小时前
Linux多线程开发
linux·开发语言·线程
程序00716 小时前
天地图实现收货地址定位
前端·javascript·css
Metaphor69216 小时前
轻松使用 Python 将 RTF 转换为 Word(含批量转换与格式互转)
python·word·rtf
zh路西法16 小时前
【深入理解 LSTM】从时间反向传播(BPTT)到长时记忆:门控机制与实验验证
pytorch·python·rnn·gru·lstm·bptt
去伪存真16 小时前
架构思考与演进:如何彻底破解 RAG 切块大小与语义完整性的工程悖论?
前端·agent