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)