使用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,在任何情况下都会超时.但是,我更愿意在不使用任何真实网络连接的情况下进行所有单元测试.
哪些库/调用可用于处理包含分号的查询字符串与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,但是很想看看还能做些什么.