1.mock简介
python3以后mock模块已经整合到了unittest测试框架中,不用再单独安装
Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为
2.mock的作用
- 解决依赖问题:当我们测试一个接口或者功能模块的时候,如果这个接口或者功能模块依赖其他接口或其他模块,那么如果所依赖的接口或功能模块未开发完毕,那么我们就可以使用mock模拟被依赖接口,完成目标接口的测试
- 单元测试:如果某个功能未开发完成,我们又要进行测试用例的代码编写,我们也可以先模拟这个功能进行测试
- 模拟复杂业务的接口:实际工作中如果我们在测试一个接口功能时,如果这个接口依赖一个非常复杂的接口业务,那么我们完全可以使用mock来模拟这个复杂的业务接口,其实这个和解决接口依赖是一样的原理
- 前后端联调:如果你是一个前端页面开发,现在需要开发一个功能:根据后台返回的状态展示不同的页面,那么你就需要调用后台的接口,但是后台接口还未开发完成,你完全可以借助mock来模拟后台这个接口返回你想要的数据
3.mock的使用
import unittest # 导包
from unittest import mock
from FlychordInterfaceTest import readExcel, getURL
from FlychordInterfaceTest.common import configHttp
# 获取接口文档第一页数据
excel = readExcel.Excel('DATA.xlsx', 0).read()
class test01(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_01(self):
"""查看琴行详情"""
# mock checkResult方法 返回200
self.checkResult= mock.Mock(return_value=200)
status = self.checkResult(excel[0][4], excel[0][6], excel[0][9])
self.assertEqual(status, 200)
def checkResult(self, method, interface, data, headers=None):
url = getURL.get_url(interface)
info = configHttp.run_main(method, url, data, headers)
return info
if __name__ == '__main__':
unittest.main(verbosity=1)
如果这个接口开发以及开发完了,我们就不用再使用mock了,可以修改下代码
self.checkResult = mock.Mock(return_value=200, side_effect=self.checkResult)
传递side_effect关键字参数, 会覆盖return_value参数值, 使用真实的checkResult 方法测试
这里只写简单的应用,先不深入研究,后面有机会再仔细探讨下mock