二、封装requests库

首先我们创建一个包:base,用于存放最基础的封装方法,在包下创建一个模块http_client.py,此处用于封装requests发送请求的方法。

封装思路:

  • 创建HttpClient类,方便后续api继承后直接调用类下面的get和post方法
  • 创建__request私有方法,作为发送请求公共方法,方便后面日志搜集请求信息和返回信息
  • 使用requests.session(),requests库的session会话对象可以跨请求保持某些参数
# base/http_client.py

import requests


class HttpClient():

    def __init__(self):
        self.__session = requests.session()

    def get(self, path, **kwargs):
        return self.__request(path, 'GET', **kwargs)

    def post(self, path, data=None, json=None, **kwargs):
        return self.__request(path, 'POST', data, json, **kwargs)

    def __request(self, url, method, data=None, json=None, **kwargs):
        resp = None
        if method == "GET":
            resp = self.__session.get(url, **kwargs)
        elif method == "POST":
            resp = requests.post(url, data, json, **kwargs)
        return resp

然后我们使用封装好的requests替换用例中的requests

# test_api.py

import pytest
from base.http_client import HttpClient

http_client = HttpClient()


def test_01():
    response = http_client.get('http://127.0.0.1:5000/login').json()
    print(response)
    assert response.get('success') == 'ok'

if __name__ == '__main__':
    pytest.main()

同样能够运行成功。

那么问题来了,如果多个py文件中都需要调用到同一个接口,比如登录,是不是所有文件中都需要写一遍呢?哪天接口路径改了,那修改起来是一件很麻烦的事情,还容易出错。

下一章节,我们就来解决这问题。

posted @   测试充电宝  阅读(330)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示