性能測試Locust--(7)使用更快的HTTP client提高Locust性能

Locust默認的HTTP客戶端使用python-requests。因爲requests是一個維護良好的python程序包,它提供了許多python開發人員都熟悉的優質API。因此,在許多情況下,建議使用使用請求的默認HttpLocust

但是,如果計劃運行大規模的測試,Locust提供了一個替代的HTTP 客戶端 FastHttpLocust,它使用geventhttpclient而不是requests。

該客戶端的速度明顯提高,其性能是HTTP-requests的5 ~ 6倍。這並不一定意味着每個CPU內核可以模擬的用戶數量將自動增加5 ~ 6倍,因爲這還取決於負載測試腳本。

總之,如果你的Locust腳本在執行HTTP-requests時花費了大量的CPU時間,那麼你可能會看到顯著的性能提升。

如何使用FastHttpLocust

代替HttpLocust的子類是FastHttpLocust:

from locust import TaskSet, task, between
from locust.contrib.fasthttp import FastHttpLocust

class MyTaskSet(TaskSet):
    @task
    def index(self):
        response = self.client.get("/")

class MyLocust(FastHttpLocust):
    task_set = MyTaskSet
    wait_time = between(1, 60)

注意
與默認python-requests的HttpLocust相比,FastHttpLocust使用一個完全不同的API實現另一個HTTP client 。因此,取決於如何使用HttpClient,FastHttpLocust可能無法替代HttpLocust。
在FastHttpLocust的客戶端實現中,SSL域名檢查被關閉。因此,它將允許通過無效的SSL證書而不會產生任何問題。

API

FastHttpSession類

classFastHttpSession(base_url, **kwargs)

init(base_url, **kwargs) x.init(…) 初始化X,詳見 help
get(path, **kwargs) 發送GET請求
head(path, **kwargs) 發送HEAD請求
options(path, **kwargs) 發送OPTION請求
patch(path, data=None, **kwargs) 發送PATCH請求
post(path, data=None, **kwargs) 發送POST請求
put(path, data=None, **kwargs) 發送PUT請求

request(method, path, name=None, data=None, catch_response=False, stream=False, headers=None, auth=None, **kwargs)
發送HTTP請求並返回
locust.contrib.fasthttp.FastResponse對象.

Parameters:

  • method --創建新Request對象方法。
  • path --Path將與已指定的base host URL連接。也可以是完整URL,在這種情況下,將請求完整URL,並且忽略host。
  • name --可選,在Locust的統計信息中可以指定一個參數作爲標籤,而不是URL路徑。這可用於將請求的不同URL分組到Locust的統計信息中的單個條目中。
  • catch-response --可選,Boolean,如果設置了Boolean參數,可用於使請求返回上下文管理器,以用作with語句的參數。即使響應代碼正常(2xx),也可以根據響應的內容將請求標記爲失敗。
    反之亦然,即使沒有響應代碼(即500或404),也可以使用catch_response來捕獲請求,然後將其標記爲成功。
  • data – 可選,請求體-body, Dict或bytes
  • headers – 可選,請求頭,Dict
  • auth – 可選,驗證(用戶名,密碼)元組,以啓用基本HTTP驗證。
  • stream – 可選,如果設置爲true,則不會立即使用響應主體,而是可以通過訪問Response對象上的stream屬性來使用它。
    將流設置爲True的另一個作用是:不會將下載響應內容的時間記錄到Locust報告中的請求時間。

classFastResponse(ghc_response, request=None, sent_request=None)

content
Unzips, 如有必要,並緩衝接收到的Body. 小心大文件!

headers= None
類似於Dict的對象,包含響應標頭

text
以解碼字符串的形式返回響應的文本內容(python2上的unicode)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章