学习python自动化——mock
一、mock作用
1、解决项目依赖
2、对外接口调试(第三方公司)
3、模拟业务接口
二、mock导入
python3.0以上版本将mock集成到了unittest
from unittest import mock
三、参数
1、return_value:模拟参数,返回字典
def test01(): #功能没有实现
#返回字典给我
pass
test01=mock.Mock(return_value={"name":"老王"}) #模拟功能返回的参数给我
print(test01()) #返回:{'name': '老王'}
2、side_effect:函数有参数时,调用函数等于调用实际函数,没有做mock,return_value失效
def test01():
#返回字典给我
pass
test01=mock.Mock(return_value={"name":"老王"},side_effect=test01)
print(test01()) #返回:None,因为test01没有任何参数,return_value的参数失效
三、使用场景
- 接口未实现,按照接口文档进行模拟函数返回
from unittest import mock
def test01():
#返回字典给我
pass
test01=mock.Mock(return_value={"name":"老王"},side_effect=test01)
print(test01()) #返回:None
- 根据不同传参返回不同的值
from unittest import mock
def test01():
pass
def test02(data):
mock_data={
"test01":"支付成功",
"test02": "支付失败",
"test03": "参数错误",
"test04": "余额不足",
}
return mock_data[data]
test01=mock.Mock(side_effect = test02)
print(test01("test03")) #返回:参数错误
- 使用@patch.object()装饰器实现
import mocktest012 #创建一个mocktest012.py文件,test_demo函数未实现
from unittest.mock import patch
@patch.object(target=mocktest012,attribute="test_demo")
def test01(mock_fun):
mock_fun.return_value={"name":"老王"}
result=mocktest012.test_demo()
print(result)
test01() #返回:{'name': '老王'}