2014-01-22 79 views
0

我必須測試基於Jetty的服務器。該服務器可以使用自己的協議HTTP,HTTPS,最後開始支持SPDY。我有一些基於httplib/http.client的壓力測試 - 每個線程都以類似的URL開頭(查詢字符串中的一些數據是可變的),將執行時間添加到全局變量,每隔幾秒顯示一些統計信息。代碼如下所示:如何讓spydlay模塊像httplib/http.client一樣工作?

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可以是天然的,HTTPConnectionHTTPSConnection

現在我想添加使用spdylay模塊的SPDY測試。但它的界面是不透明的,我不知道如何將它的不透明度改變成類似於httplib界面的東西。我已經做了基於示例的測試客戶端,但第二個參數spdylay.urlfetch()是類名稱而不是對象,我不知道如何使用它與我的測試。我已經爲我的課程的on_close()方法添加了測試,它擴展了spdylay.BaseSPDYStreamHandler,但它與其他測試不兼容。如果是實例,我會在spdylay.urlfetch()之外使用它。

如何在基於httplib接口工作的代碼中使用spydlay

+0

Jetty還提供了一個SPDY客戶端,您可以使用它進行負載測試,請參閱:https://github.com/eclipse/jetty.project/blob/master/jetty-spdy/spdy-server/src/test /java/org/eclipse/jetty/spdy/server/SynDataReplyDataLoadTest.java。 – sbordet

+0

我已經有SPDY客戶端工作:'spydlay'工作,但與'httplib'不同。這是我的問題,我想在我的測試應用程序中使用它,並且我希望它與其他客戶端類似。 –

+0

@sborder - 我認爲你有關使用Jetty客戶端來測試Jetty服務器的想法:-)我會試試Jython。它可能比'spydlay'更容易使用,因爲它不使用本地庫。 –

回答

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)

相關問題