我必须基于Jetty测试服务器。该服务器可以使用自己的协议,HTTP,HTTPS,最后它开始支持SPDY。我有一些基于httplib
/ http.client
的压力测试 - 每个线程都以类似的URL开头(查询字符串中的某些数据是可变的),将执行时间添加到全局变量,每隔几秒就显示一些统计。代码如下:
t_start = time.time()
connection.request("GET", path)
resp = connection.getresponse()
t_stop = time.time()
check_response(resp)
QRY_TIMES.append(t_stop - t_start)
客户端使用本机协议共享httplib
API,因此connection
可能是原生的,HTTPConnection
或HTTPSConnection
。
现在我想使用spdylay
模块添加SPDY测试。但它的界面是不透明的,我不知道如何将其不透明度改为类似于httplib
界面的东西。我已经基于示例创建了测试客户端,但是spdylay.urlfetch()
的第二个参数是类名而不是对象我不知道如何将它与我的测试一起使用。我已经在我的类的on_close()
方法中添加了测试,扩展了spdylay.BaseSPDYStreamHandler
,但它与其他测试不兼容。如果是实例,我会在spdylay.urlfetch()
调用之外使用它。
如何在基于spydlay
接口的代码中使用httplib
?
答案 0 :(得分:0)
我唯一的想法是使用全局字典,其中url
是一个键,handler
对象是一个值。这并不理想,因为:
url
的新查询将覆盖之前的回复handler
但它有效!
import sys
import spdylay
CLIENT_RESULTS = {}
class MyStreamHandler(spdylay.BaseSPDYStreamHandler):
def __init__(self, url, fetcher):
super().__init__(url, fetcher)
self.headers = []
self.whole_data = []
def on_header(self, nv):
self.headers.append(nv)
def on_data(self, data):
self.whole_data.append(data)
def get_response(self, charset='UTF8'):
return (b''.join(self.whole_data)).decode(charset)
def on_close(self, status_code):
CLIENT_RESULTS[self.url] = self
def spdy_simply_get(url):
spdylay.urlfetch(url, MyStreamHandler)
data_handler = CLIENT_RESULTS[url]
result = data_handler.get_response()
del CLIENT_RESULTS[url]
return result
if __name__ == '__main__':
if '--test' in sys.argv:
spdy_response = spdy_simply_get('https://localhost:8443/test_spdy/get_ver_xml.hdb')
我希望有人能更好地spdy_simply_get(url)
。