Python 如何获取不是httprety中最后一个的请求?
使用Python库,我可以为我的单元测试创建模拟HTTP响应。当我正在测试的代码运行时,不是我的请求到达第三方,而是截取请求,我的代码接收我配置的响应 然后我使用Python 如何获取不是httprety中最后一个的请求?,python,unit-testing,python-requests,httpretty,Python,Unit Testing,Python Requests,Httpretty,使用Python库,我可以为我的单元测试创建模拟HTTP响应。当我正在测试的代码运行时,不是我的请求到达第三方,而是截取请求,我的代码接收我配置的响应 然后我使用last_request(),可以检查我的代码请求的url、任何参数等 我想知道的是,我如何不仅访问最后一个请求,而且访问我的代码在最后一个请求之前发送的任何其他请求 这似乎是可能的。在文档中,它使用了一个名为latest\u requests的列表。比如说 但这似乎对我不起作用。我得到一个AttributeErrorAttribute
last_request()
,可以检查我的代码请求的url、任何参数等
我想知道的是,我如何不仅访问最后一个请求,而且访问我的代码在最后一个请求之前发送的任何其他请求
这似乎是可能的。在文档中,它使用了一个名为latest\u requests
的列表。比如说
但这似乎对我不起作用。我得到一个AttributeErrorAttributeError:module'httprety'没有属性'latest\u 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()
谢谢 不幸的是,在阅读了文档并试图让代码正常工作之后,我只能将文档描述为明显不正确。似乎有几年前的| |声称将httprety。最新的| u请求作为一个真正的属性,但无论出于何种原因,它们都没有合并在一起 尽管如此,我还是通过打电话获得了以前所有请求的列表
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