Как получить запрос, который не последний в HttPretty? - PullRequest
0 голосов
/ 20 мая 2018

Используя библиотеку HTTPretty для Python, я могу создавать ложные ответы HTTP для своих модульных тестов.Когда выполняется код, который я тестирую, вместо того, чтобы мой запрос дошел до третьей стороны, запрос перехватывается, и мой код получает настроенный мной ответ.

Затем я использую last_request() и могу проверить URL, запрошенный моим кодомлюбые параметры и т. д.

Мне бы хотелось узнать, как получить доступ не только к последнему запросу, но и к любым другим запросам, которые мой код отправлял до последнего.

быть возможнымВ документации он использует список с именем latest_requests.Например, здесь

Но это, похоже, не работает для меня.Я получаю AttributeError AttributeError: module 'httpretty' has no attribute 'latest_requests'

Вот некоторый код, который иллюстрирует, что я пытаюсь сделать и где я получаю AttributeError

import httpretty
import requests

httpretty.enable()
httpretty.register_uri(
    method=httpretty.GET,
    uri='http://www.firsturl.com',
    status=200,
    body='First Body'
)

httpretty.enable()
httpretty.register_uri(
    method=httpretty.GET,
    uri='http://www.secondurl.com',
    status=200,
    body='secondBody'
)

firstresponse = requests.get('http://www.firsturl.com')
secondresponse = requests.get('http://www.secondurl.com')

print(httpretty.latest_requests[-1].url)

# clean up
httpretty.disable()
httpretty.reset()

Спасибо !!

1 Ответ

0 голосов
/ 20 мая 2018

К сожалению, после прочтения документации и попытки заставить ваш код работать, я могу только описать документацию как явно некорректную.Там, кажется, три | отдельный | запросов от нескольких лет назад, в которых утверждается, что httpretty.latest_requests является настоящим атрибутом, но ни один из них не объединился по какой-либо причине.

После всего сказанного мне удалось получитьсписок всех предыдущих запросов с помощью вызова

 httpretty.HTTPretty.latest_requests

Возвращает список HTTPrettyRequest объектов.Поскольку httpretty.last_request() возвращает объект HTTPrettyRequest, этот атрибут, вероятно, является тем, что вы ищете.

К сожалению, .url не определен в этом классе (но он определен впустой объект запроса , который не имеет никакого смысла).Если вы хотите проверить, соответствует ли URL запроса тому, что вы ожидаете, вам, скорее всего, придется попытаться восстановить его самостоятельно:

req = httpretty.HTTPretty.latest_requests[-1]
url = req.headers.get('Host', '') + req.path

Если вы передадите что-либо в строку запроса, у вас будетвосстановить это из req.querystring, хотя это не упорядочено, так что вы, вероятно, не хотите превращать это в строку для соответствия целей.Кроме того, если все ваши запросы поступают в один и тот же домен, вы можете оставить часть узла и просто сравнить req.path.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...