标签: httpretty

模拟使用HTTPretty超时的HTTP请求

使用HTTP 的HTTPretty库,我可以创建选择的模拟HTTP响应,然后选择它们,即使用请求库,如下所示:

import httpretty
import requests

# set up a mock
httpretty.enable()
httpretty.register_uri(
            method=httpretty.GET,
            uri='http://www.fakeurl.com',
            status=200,
            body='My Response Body'
        )

response = requests.get('http://www.fakeurl.com')

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

print(response)
Run Code Online (Sandbox Code Playgroud)

日期: <Response [200]>

是否有可能注册无法访问的uri(例如连接超时,连接被拒绝,......),以便根本不接收任何响应(这与提供HTTP错误代码的已建立连接不同像404)?

我希望在单元测试中使用此行为,以确保我的错误处理按预期工作(在"未建立连接"和"建立连接,错误的HTTP状态代码"的情况下,它会执行不同的操作).作为一种解决方法,我可以尝试连接到无效的服务器http://192.0.2.0,在任何情况下都会超时.但是,我更愿意在不使用任何真实网络连接的情况下进行所有单元测试.

python unit-testing python-requests httpretty

7
推荐指数
1
解决办法
2754
查看次数

是否有处理分号的parse_qs的替代方案?

TL; DR

哪些库/调用可用于处理包含分号的查询字符串与parse_qs不同?

>>> urlparse.parse_qs("tagged=python;ruby")
>>> {'tagged': ['python']}
Run Code Online (Sandbox Code Playgroud)

完整的背景

我正在使用StackExchange API来搜索标记的问题.

搜索的布局是这样的,标签用分号分隔:

/2.1/search?order=desc&sort=activity&tagged=python;ruby&site=stackoverflow

与API交互就好了.当我想测试调用时,特别是当使用httpretty来模拟HTTP时,会出现问题.

在引擎盖下,httpretty使用urlparse.parse_qspython标准库来解析查询字符串.

>>> urlparse.parse_qs("tagged=python;ruby")
{'tagged': ['python']}
Run Code Online (Sandbox Code Playgroud)

显然这不太好用.这是一个小例子,这里是httpretty的一小部分(在测试环境之外).

import requests
import httpretty

httpretty.enable()

httpretty.register_uri(httpretty.GET, "https://api.stackexchange.com/2.1/search", body='{"items":[]}')
resp = requests.get("https://api.stackexchange.com/2.1/search", params={"tagged":"python;ruby"})
httpretty_request = httpretty.last_request()
print(httpretty_request.querystring)

httpretty.disable()
httpretty.reset()
Run Code Online (Sandbox Code Playgroud)

我想使用来自httpretty的机器,但需要一个解决方法parse_qs.我现在可以修补httpretty,但是很想看看还能做些什么.

python http mocking stackexchange httpretty

5
推荐指数
1
解决办法
737
查看次数