什么是 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
官方文档。
评论区