什么是 Mock
顾名思义 Mock
即模拟,其为软件行业的术语。通常在软件开发中,当后台接口或者依赖的接口还未开发完成的时候,或者在前后端联调中而后端还未开发完成的时候,如果需要实施测试,就需要通过 MockServer
开展测试。
MockServer
即通过模拟后台接口,在未完成接口开发的情况下完成测试工作。其属测试范畴概念。
在线的 MockServer
如果您向快速的体验 MockServer
,那我推荐您使用 getman
。
https://getman.cn/mock 复制代码
创建一个 Mock 接口
网络异常,图片无法展示
|
测试 Mock 接口
网络异常,图片无法展示
|
Python 的 MockServer
Unittest 的 Mock
mock 原是 python 的第三方库,python3 以后 mock 模块已经整合到了 unittest 测试框架中,不用再单独安装。
创建 Mock 接口
from unittest import mock def userinfo(name): ''' return: {'name':name} ''' pass def test_case(): # mock userinfo userinfo = mock.Mock(return_value={'name': 'phyger'}) # get result ret = userinfo('phyger') # judge if ret == {'name': 'phyger'}: print('pass') else: print('not pass') if __name__ == "__main__": test_case() 复制代码
运行结果
网络异常,图片无法展示
|
当然,你也可以通过 unittest
编写用例进行实际的 Mock
测试。
Pytest 的 Mock
pytest-mock
是一个 pytest
的插件,安装即可使用。 它提供了一个名为 mocker
的 fixture
,仅在当前测试 function
或 method
生效,而不用自行包装。
安装pytest-mock
pip install pytest-mock 复制代码
创建 Mocke 接口
import pytest from pytest_mock import mocker def userinfo(): return 'ok' def get_userinfo(): return userinfo() def test_for_userinfo(mocker): mkd1 = mocker.patch('test_mk.userinfo', return_value='not ok') assert get_userinfo()=='not ok' def test_for_user(mocker): mkd2 = mocker.patch('test_mk.userinfo', return_value='mocked') assert mkd2() == 'mocked' if __name__ == "__main__": command = ['-q','test_mk.py'] pytest.main(command) 复制代码
运行结果
网络异常,图片无法展示
|
更多内容请查看 unittest.mock
和 pytest-mock
官方文档。