学习python自动化——mock

发布时间 2024-01-10 16:13:15作者: 芒果93

一、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': '老王'}