参考:https://www.jianshu.com/p/15594044ab27
pip install mock
pip install pytest-mock (相当于mock的升级版)
举例:
# 文件路径:common/mock_demo.py import requests def mock_request(url): """需要被mock的请求""" return requests.get(url).status_code def invoke_mock_request(url): return mock_request(url)
测试用例
import mock from pytest_mock import mocker from common.mock_demo import invoke_mock_request def test_mock_1(mocker): """方法一:使用的是pytest-mock 中的mocker""" mocker.patch("common.mock_demo.mock_request", return_value=300) # 被mock请求函数的路径一定要写对 assert invoke_mock_request("https://www.baidu.com/") == 300 def test_mock_2(): """方法二:使用的 mock 中patch方法""" with mock.patch("common.mock_demo.mock_request", return_value=300) as foo: assert invoke_mock_request("https://www.baidu.com/") == foo.return_value @mock.patch("common.mock_demo.mock_request", return_value=300) def test_mock_3(mock_request): """方法三:使用的装饰器的方式对mock对象的函数返回值进行替换""" assert invoke_mock_request("https://www.baidu.com/") == mock_request.return_value
即:在调用 invoke_mock_request() 之前先对其接口依赖的 mock_request() 方法的返回值可以替换,这样的话不管其方法的返回值如何变化,我们只需要关注此次 mock 即可