python - 如何获得不是 HttPretty 中最后一个请求的请求?
问题描述
使用 Python 的HTTPretty库,我可以为我的单元测试创建模拟 HTTP 响应。当我正在测试的代码运行时,而不是我的请求到达第三方,请求被拦截并且我的代码接收到我配置的响应。
然后我使用last_request()
并可以检查我的代码请求的 url、任何参数等。
我想知道如何不仅可以访问最后一个请求,还可以访问我的代码在最后一个请求之前发送的任何其他请求。
这似乎是可能的。在文档中,它使用了一个名为latest_requests
. 例如这里
但这似乎对我不起作用。我得到一个 AttributeErrorAttributeError: 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()
谢谢!!
解决方案
不幸的是,在阅读文档并尝试让您的代码正常工作后,我只能将文档描述为明显不正确。似乎有三个| 分开| 几年前的拉取请求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
.
推荐阅读
- regex - 使用 bash 解析 HTML 片段?
- r - 重命名R中列的标题
- r - 我可以计算并列出在 Excel 文档中使用了多少次单词吗?
- javascript - JS数组到对象的数组
- python - 在 Python 中,通过重用以前的计算来计算 EMA 的更快方法是什么?
- sql-server - 要在 SQL Server Data Tools 之外运行 SSIS 包,您必须安装标准版的 Integration Services 或更高版本
- c - C 中从最低有效位开始的二进制表示
- julia - 从字符串创建函数时的 Julia 范围问题
- javascript - 返回单个数组
- javascript - 开玩笑:没有找到测试