请求库中的模拟会话

2024-05-29 10:54:24 发布

您现在位置:Python中文网/ 问答频道 /正文

在python代码中,我有全局requests.session实例:

import requests
session = requests.session()

我怎么能用Mock来模仿它呢?这种操作有装修工吗?我试着跟随:

session.get = mock.Mock(side_effect=self.side_effects)

但是(正如预期的那样),这段代码在每次测试后都不会像decorator那样将session.get返回到原始状态。


Tags: 实例代码importselfgetsessiondecorator全局
3条回答

使用mock.patch修补模块中的会话。这里是一个完整的工作示例https://gist.github.com/k-bx/5861641

从前面的答案中得到了一些启发:

mock-attributes-in-python-mock

我可以模拟这样定义的会话:

class MyClient(object):
    """
    """
    def __init__(self):
        self.session = requests.session()

(调用get返回一个状态为的响应,属性设置为200)

def test_login_session():
    with mock.patch('path.to.requests.session') as patched_session:
        # instantiate service: Arrange
        test_client = MyClient()
        type(patched_session().get.return_value).status_code = mock.PropertyMock(return_value=200)

        # Act (+assert)
        resp = test_client.login_cookie()

        # Assert
        assert resp is None

由于requests.session()返回会话类的实例,因此也可以使用patch.object()

from requests import Session
from unittest.mock import patch

@patch.object(Session, 'get')
def test_foo(mock_get):
    mock_get.return_value = 'bar'   

相关问题 更多 >

    热门问题