mock的概念
Mock通常是指,在测试一个对象A时,我们构造一些假的对象来模拟与A之间的交互,而这些Mock对象的行为是我们事先设定且符合预期。通过这些Mock对象来测试A在正常逻辑,异常逻辑或压力情况下工作是否正常。
那么什么时候需要做mock呢?
1.当接口没有使用同一个库的时候
2.当调用的第三方服务出现问题,但是又没有准确的证据证明是第三方服务问题时,可以通过模拟第三方正常时,单独调用我方接口来确定到底是哪一方出现问题
3.前端开发人员在做自测时需要依赖后端接口,但是后端又没有开发完时,可以根据事先定义好的规范进行mock测试
在java中,可以使用Mockito做mock测试;在python中则是用unittest框架里面的mock来实现mock测试
mock官方文档
https://docs.python.org/zh-cn/3/library/unittest.mock.html
mock实例
模拟调用百度接口返回500的情况
import requests
from unittest import mock
def request_baidu():
resp = requests.get('http://www.baidu.com')
return resp.status_code
# 模拟调用request_baidu,且返回值是500
request_baidu = mock.Mock(return_value=500)
print(request_baidu())
print(request_baidu.called)#打印是否被调用
print(request_baidu.call_count)#打印调用次数
总结
1.为什么request_baidu后面没有加() ?
模拟调用,实际并未调用
2.查看mock对象是否被调用时使用called方法
3.查看mock对象调用次数时使用call_count)方法
4.Mock常用的参数有return_value和side_effect
return_value和side_effect的区别在于side_effect可以用来抛出异常或者动态改变属性值