mock的使用-解决接口依赖问题

参考: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 即可

posted @ 2020-03-30 22:59  爱打盹的猫猫  阅读(866)  评论(0编辑  收藏  举报