一.Mock概念
unittest.mock是一个用于在Python中进行单元测试的库,Mock翻译过来就是模拟的意思,顾名思义这个库的主要功能是模拟一些东西。
它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为。
二.Mock的作用
1.如果你在写一个接口自动化,然后需要A接口返回结果给你的B接口使用,那么你就可以使用Mock了。
2.第三方接口依赖,在做接口自动化的时候,有时候需要调用第三方的接口,但是别人公司的接口服务不受你的控制,有可能别人提供的测试环境今天服务给你开着,别人就关掉了,
给自动化接口测试带来很多的麻烦,此时就可以自己写一个mock-server来模拟接口的返回数据。
三.Mock的导入
Mock在py3.0后就已经放在unittest框架里面了,所以直接from unittest import mock 就行了
四.实例演示
mock_data.py
1 def register(): 2 '''假设这里是一个注册的功能,未开发完 3 注册成功返回:{'status': 1, 'code': '10001', 'data': None, 'msg': '注册成功'} 4 注册失败返回:{'status': 0, 'code': '20110', 'data': None, 'msg': '手机号码已被注册'} 5 ''' 6 pass 7 def register_statues(): 8 '''判断注册是否成功''' 9 result = register() 10 print(result) 11 if result["code"] == "10001": 12 return "注册成功" 13 elif result["code"] == "20110": 14 return "手机号码已被注册" 15 else: 16 return "未知错误异常"
test_demo.py
1 from unittest import mock 2 import unittest 3 from test_case_demo import mock_data 4 5 class Test_Register(unittest.TestCase): 6 '''单元测试用例''' 7 def test_01(self): 8 '''测试注册成功场景''' 9 # mock一个注册成功的数据 10 mock_data.register = mock.Mock(return_value={'status': 1, 'code': '10001', 'data': None, 'msg': '注册成功'}) 11 # 根据注册获取结果 12 statues = mock_data.register_statues() 13 #print(statues) 14 self.assertEqual(statues, "注册成功") 15 16 def test_02(self): 17 '''测试注册失败场景''' 18 # mock一个注册失败的数据 19 mock_data.register = mock.Mock(return_value={'status': 0, 'code': '20110', 'data': None, 'msg': '手机号码已被注册'}) 20 # 根据注册获取结果 21 statues = mock_data.register_statues() 22 #print(statues) 23 self.assertEqual(statues, "手机号码已被注册") 24 25 if __name__ == "__main__": 26 unittest.main()
结果: