pytest-mock
安装:pip install pytest-mock
这里的mock和unittest的mock基本上都是一样的,唯一的区别在于pytest.mock需要导入mock对象的详细路径。
# weateher_r.py
class Mock_weather():def weather(self):'''天气接口'''passdef 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的测试用例
# test_01.py
import pytest
from test_01.weather_r import Mock_weatherdef 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('test_01.weather_r.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成功的
如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。