HttPretty 中如何获取不是最后一次的请求?
How to get a request that is not the last in HttPretty?
使用 Python 的 HTTPretty 库,我可以为我的单元测试创建模拟 HTTP 响应。当我正在测试的代码运行时,而不是我的请求到达第三方,请求被拦截并且我的代码收到我配置的响应。
然后我使用 last_request()
并可以检查 url 我请求的代码、任何参数等
我想知道如何不仅可以访问最后一个请求,还可以访问我的代码在上一个请求之前发送的任何其他请求。
这似乎是可能的。在文档中,它使用了一个名为 latest_requests
的列表。例如here
但这似乎对我不起作用。我得到一个 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()
谢谢!!
不幸的是,在阅读文档并尝试让您的代码正常工作后,我只能将文档描述为公然不正确。几年前似乎有 three | separate | pull requests 声称要使 httpretty.latest_requests
成为一个真正的属性,但其中 none 不知何故已合并。
综上所述,我设法通过调用
获得了所有先前请求的列表
httpretty.HTTPretty.latest_requests
这个 returns 一个包含 HTTPrettyRequest
个对象的列表。将 httpretty.last_request()
returns 视为一个 HTTPrettyRequest
对象,该属性可能就是您要查找的内容。
不幸的是,.url
没有在 class 上定义(但是 defined on the blank request object 没有任何意义)。如果您想检查请求 URL 是否符合您的预期,您几乎必须尝试自己重构它:
req = httpretty.HTTPretty.latest_requests[-1]
url = req.headers.get('Host', '') + req.path
如果您在查询字符串中传递任何内容,则必须从 req.querystring
重建它,尽管它没有排序,因此您可能不想将其转换为用于匹配目的的字符串。此外,如果您的所有请求都发往同一个域,您可以省略主机部分,只需比较 req.path
.
使用 Python 的 HTTPretty 库,我可以为我的单元测试创建模拟 HTTP 响应。当我正在测试的代码运行时,而不是我的请求到达第三方,请求被拦截并且我的代码收到我配置的响应。
然后我使用 last_request()
并可以检查 url 我请求的代码、任何参数等
我想知道如何不仅可以访问最后一个请求,还可以访问我的代码在上一个请求之前发送的任何其他请求。
这似乎是可能的。在文档中,它使用了一个名为 latest_requests
的列表。例如here
但这似乎对我不起作用。我得到一个 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()
谢谢!!
不幸的是,在阅读文档并尝试让您的代码正常工作后,我只能将文档描述为公然不正确。几年前似乎有 three | separate | pull requests 声称要使 httpretty.latest_requests
成为一个真正的属性,但其中 none 不知何故已合并。
综上所述,我设法通过调用
获得了所有先前请求的列表 httpretty.HTTPretty.latest_requests
这个 returns 一个包含 HTTPrettyRequest
个对象的列表。将 httpretty.last_request()
returns 视为一个 HTTPrettyRequest
对象,该属性可能就是您要查找的内容。
不幸的是,.url
没有在 class 上定义(但是 defined on the blank request object 没有任何意义)。如果您想检查请求 URL 是否符合您的预期,您几乎必须尝试自己重构它:
req = httpretty.HTTPretty.latest_requests[-1]
url = req.headers.get('Host', '') + req.path
如果您在查询字符串中传递任何内容,则必须从 req.querystring
重建它,尽管它没有排序,因此您可能不想将其转换为用于匹配目的的字符串。此外,如果您的所有请求都发往同一个域,您可以省略主机部分,只需比较 req.path
.