request.session的模拟Cookie属性

时间:2019-01-12 21:46:38

标签: python mocking python-requests

Session.cookies是在Session构造函数中定义的,因此我无法对其进行模拟。有没有办法模拟它?

from requests import Session
from settings import URL
from unittest.mock import patch

@patch.object(Session, 'cookies', new='my custom mock object')
def test_request():
    assert function_that_uses_request_cookies()

这引起AttributeError: <class 'requests.sessions.Session'> does not have the attribute 'cookies'

如果session实例是在模块作用域上定义的,则可以直接修补session实例。但是session仅在function_that_uses_request_cookies范围内定义。有什么方法可以在功能范围内修补实例?

1 个答案:

答案 0 :(得分:0)

按照编写的代码将修补Session类的属性,但是您要修补Session实例的属性。要做到这一点而又不中断会话行为的其他方面,您可以创建一个包装Session的模拟对象。

def test_request():
    mock_session_klass = MagicMock(wraps=Session)
    with patch('requests.Session', new=mock_session_klass):
        session_instance = mock_session_klass.return_value
        session_instance.cookies.return_value = 'my custom mock object'
        assert function_that_uses_request_cookies()