Создание поддельного HTTP-ответа в Python

#python #unit-testing #mocking #httpresponse

#python #модульное тестирование #издевательство #httpresponse

Вопрос:

Как новичок, я пытаюсь создать поддельный HTTP-ответ. Способ, который приходит мне на ум, — создать объект класса requests.models.Response() , а затем установить его атрибуты:

 def getFakeHTTPResponse(statusCode, text):
        response = requests.models.Response()
        response.status_code = statusCode
        response.text = text
        return response
 

Кажется, что приведенная выше функция должна работать. Но я получаю сообщение об ошибке: "AttributeError: can't set attribute." это заставляет меня задуматься, потому что можно получить текстовый атрибут HTTP-ответа, но его невозможно установить. Более того, это отлично работает для status_code атрибута, но я получаю ошибку для атрибута text.
Что вы предлагаете для создания поддельного ответа с использованием этого класса requests.models.Response() ?

Ответ №1:

Оба .text .content метода и реализованы с использованием @property , поэтому вы можете прочитать его, но не записать. Вам нужно установить ._content (используется .content ) и .encoding (используется .text ), то есть

 import requests
r = requests.models.Response()
r.status_code = 200
r._content = "sometext".encode("utf-8")
r.encoding = "utf-8"
print(r.text)
 

вывод

 sometext