二、封装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文件中都需要调用到同一个接口,比如登录,是不是所有文件中都需要写一遍呢?哪天接口路径改了,那修改起来是一件很麻烦的事情,还容易出错。
下一章节,我们就来解决这问题。