pytest-mock的使用
pytest-mock
安装: pip install pytest-mock
这里的mock和unittest的mock基本上都是一样的,唯一的区别在于pytest.mock需要导入需要mock对象的详细路径。
#coding:utf-8 # weateher.py from pytest_mock import mocker class Mock_weather(): def weather(self): '''天气接口''' pass def weather_result(self): '''模拟天气接口''' result = self.weather() if result['result'] == '雪': print('下雪了!!!') elif result['result'] == '雨': print('下雨了!!!') elif result['result'] == '晴天': print('晴天!!!!') else: print('返回值错误!') return result['status']
先将需要模拟的天气接口,以及需要模拟的场景的代码写好,然后在进行遵循pytest的用例规范进行书写关于mock的测试用例
#coding:utf-8 import pytest from weather import Mock_weather def test_01(mocker): # 实例化 p = Mock_weather() moke_value = {'result': "雪", 'status': '下雪了!'} # 通过object的方式进行查找需要mock的对象 p.weather = mocker.patch.object(Mock_weather, "weather", return_value=moke_value) result =p.weather_result() assert result=='下雪了!' def test_02(mocker): # 实例化 product = Mock_weather() # Mock的返回值 mock_value = {'result': "雨", 'status': '下雨了!'} # 第一个参数必须是模拟mock对象的完整路径 product.weather = mocker.patch('weather.Mock_weather.weather',return_value=mock_value) result = product.weather_result() assert result=='下雨了!' if __name__ == '__main__': pytest.main(['-vs'])
过上述代码,提供pytest中mock的2种方法:第一种中的第一个参数是通过object的方式进行查找关于Mock_weather的类,然后在找到下面的需要mock的对象方法名称,第2个参数表示mock的值。第二中方法中的第一个参数是通过完整的路径进行找到需要mock的对象,第2个参数是mock的值。通过执行发现,两种方法都是可以mock成功的。
参考链接:
https://blog.csdn.net/weixin_42145856/article/details/122943852