如何为python的request.Response.text属性设置值?

时间:2019-01-30 17:31:13

标签: python-3.x python-requests

我想在单元测试中模拟request.Response()对象,从下面的链接中得到提示。

How to mock data as request.Response type in python

在这里,我可以设置status_code值(不是@Property),我想为@Property textcontent设置值

类UsernamePasswordAuthStrategyTest(TestCase):

def test_do_success(self):
    content = self._factory.get_reader(ReaderType.CONTENT).read('MY_TEST')
    auth_strategy = UsernamePasswordAuthStrategy(content)
    # mock send_request method response
    response = Response()
    response.status_code = 200
    # How could I achieve below line? 
    response.text = """<html>
            <body>
                <form method="post" name="NavForm">
                    <input id="csrfKey" name="csrfKey" type="hidden" value="JEK7schtDx5IVcH1eOWKN9lFH7ptcwHD/"/>
                </form>
            </body>
        </html>"""
    auth_strategy.send_request = mock.MagicMock(return_value=response)
    session, auth_result = auth_strategy.do()  # {'for_next_url_params': {'csrfKey': 'T4WNcz+hXqrxVa5R9o2HXkDm8pNZEi4k/'}}
    self.assertTrue(session, 'Test Failed! Something went wrong')
    self.assertTrue('for_next_url_params' in auth_result and 'csrfKey' in auth_result['for_next_url_params'],
                    'Test Failed! csrfKey not found')

send_request返回response

1 个答案:

答案 0 :(得分:1)

我已经阅读了python文档并弄清楚了...

解决方案是->

def test_do_success(self):
        content = self._factory.get_reader(ReaderType.CONTENT).read('MY_TEST')
        auth_strategy = UsernamePasswordAuthStrategy(content)
        # mock send_request method response
        response = Response()
        response.status_code = 200
        my_text = """<html>
                <body>
                    <form method="post" name="NavForm">
                        <input id="csrfKey" name="csrfKey" type="hidden" value="JEK7schtDx5IVcH1eOWKN9lFH7ptcwHD/"/>
                    </form>
                </body>
            </html>
        """
        type(response).text = mock.PropertyMock(return_value=my_text)
        auth_strategy.send_request = mock.MagicMock(return_value=response)
        session, auth_result = auth_strategy.do()
        self.assertTrue(session, 'Test Failed! Something went wrong')
        self.assertTrue('JEK7schtDx5IVcH1eOWKN9lFH7ptcwHD' in auth_result['for_next_url_params']['csrfKey'],
                        'Test Failed! csrfKey not found')

我在文本周围添加了PropertyMock,代码更改为->

type(response).text = mock.PropertyMock(return_value=my_text)