二、封装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 @ 2021-12-08 16:27  测试充电宝  阅读(323)  评论(0编辑  收藏  举报