我想测试我的应用程序在通过urllib2获取数据时处理超时的能力,并希望有一种方法来强制请求超时。
除了找到一个非常缓慢的互联网连接之外,我可以使用什么方法?
我记得有一个有趣的应用程序/套件可以模拟这些事情。也许有人知道链接?
我通常使用netcat来监听本地机器的80端口:
nc -l 80
然后我在我的应用程序中使用 http://localhost/ 作为请求URL。Netcat会在http端口上响应,但永远不会给出响应,所以只要您在urllib2.urlopen()
调用中指定了超时时间或通过调用socket.setdefaulttimeout()
设置了超时时间,就可以保证请求超时。
import urllib2
import socket
try:
response = urllib2.urlopen("http://google.com", None, 2.5)
except URLError, e:
print "Oops, timed out?"
except socket.timeout:
print "Timed out!"
urllib2的默认超时时间是无限的,导入socket可以确保你捕获到超时异常,即socket.timeout异常
import socket
socket.setdefaulttimeout(2) # set time out to 2 second.
如果您想为每个请求设置超时时间,可以使用urlopen的timeout参数。
为什么不用bash编写一个非常简单的CGI脚本,只是在所需的超时时间内休眠呢?
如果你在使用Mac,speedlimit非常酷。
还有dummynet。它更加专业,但也能让你做一些非常有趣的事情。这里有一个预配置的虚拟机镜像。
如果你已经在使用Linux系统,那么可以使用netem。
我听说过一个名为TrafficShaper的基于Windows的工具,但我没有验证过。
slow_http_server.py
的代码示例。 - jfs