Locust 基本使用


Locust 使用Python代碼來定義用戶行為,用它可以模擬百萬級的並發用戶來訪問系統。

與其他性能工具對比如下:

LoadRunner

商業性能測試工具,報告完整,不支持二次開發

開發語言:C/Java

並發機制:進程/線程

Jmeter

開源性能測試工具,簡單報告,支持二次開發。

開發語言:Java

並發機制:線程,需要在UI界面上通過選擇組件來編寫腳本,模擬的負載是線程綁定的,

模擬的每個用戶都需要一個單獨的線程,單台負載機可模擬的負載數有限。

Locust

開源性能測試工具,簡單報告,支持二次開發。

開發語言:python

並發機制:協程,LoadRunner和Jmeter這類采用進程和線程的測試工具,很難在單機

上模擬出較高的並發壓力。Locust的並發機制摒棄了進程和線程,采用協程(gevent)

機制。協程避免了系統級資源調度,由此可以大幅提高單機的並發能力。

locust的安裝

# 1. 命令行安裝
pip3 install locust # 2. 直接在pycharm中導入

# 3. github下載安裝 https://github.com/locustio/locust/ clone后執行setup.py文件
python setup.py install # 檢查是否安裝成功
locust --help

 

locust版本信息、python版本以及依賴庫如下查詢:

gevent 是在python中實現協程的第三方庫,協程又叫微線程Coroutine。

flask 是python 的一個web開發框架。

requests 是python中可進行http(s)請求的操作庫。

msgpack 是一種快速、緊湊的二進制序列化格式,適用於類似Json的數據。

six提供了一些簡單的工具用來封裝Python2和Python3之間的差異性。

pyzmq 可用於Locust分布運行在多個進程/機器上。

 

實現例子及用法注釋

訪問博客首頁例子

# coding:utf-8
from locust import HttpLocust, TaskSet, task import urllib3 """ 使用Python3 requests發送HTTPS請求,已經關閉認證(verify=False)情況下,控制台會輸出以下錯誤, 忽略報錯的方法如下: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings """ urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) class UserBehavior(TaskSet): # UserBehavior類,繼承了TaskSet類,用於定義測試任務的
 header = { "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36"} # on_start 相當於任務開始的入口,可進行初始化,此處省略了實現
    def on_start(self): pass

    # @task()裝飾的方法為一個事務。方法的參數用於指定該行為的執行權重。參數越大每次被虛擬用戶執行的概率越高。如果不設置默認為1
    @task(1) def cnblogsHome(self, header): request = self.client.get("/", headers=header, verify=False) @task(2) def cnblogsHome(self, header):  request = self.client.get("/belle-ls/", headers = header, verify = False) class websitUser(HttpLocust): """ HttpLocust類繼承了HttpSession類,HttpSession使用率requests.Session,所以用client方法請求登錄后,會保存登錄狀態,具有session記憶功能  """ task_set = UserBehavior #Task_set屬性,它是唯一必須要有的,它指向Task Set類,定義用戶的行為
    min_wait = 3000 #請求等待最小時間
    max_wait = 6000 #請求等待最大時間
    # 每個用戶執行兩個任務間隔時間的上下限(毫秒),具體數值在上下限中隨機取值,若不指定則默認間隔時間固定為1秒
    # host:被測系統的host,當在終端中啟動locust時沒有指定--host參數時才會用到
    # weight: 一個Locust實例被挑選執行的權重,數值越大,執行頻率越高
    # stop_timeout: 設置 Locust 多少秒后超時,如果為 None ,則不會超時。

if __name__ == "__main__": import os os.system("locust -f locustDemo.py --host=https://www.cnblogs.com")

 

@task裝飾器和tasks屬性:以下兩種寫法是等價的

from locust import TaskSet, task class UserBehavior(TaskSet): @task def job1(self): self.client.get('/job1') @task def job2(self): self.client.get('/job2') ####################################
from locust import TaskSet def job1(obj): obj.client.get('/job1') def job2(obj): obj.client.get('/job2') class UserBehavior(TaskSet): tasks = [job1, job2] # 或者指定執行頻率 tasks = {job1:1, job2:1}
 

 

執行腳本,locust啟動。

 

web模式:如果Locust運行在本機,在瀏覽器中訪問http://localhost:8089即可進入Locust的Web管理頁面;如果Locust運行在其它機器上,那么在瀏覽器中訪問http://locust_machine_ip:8089即可

 

web模式執行過程如下:

按鈕:

Edit:點擊該按鈕可對模擬的總虛擬用戶和每秒啟動的虛擬用戶數進行重新設定

STOP:停止運行,缺點----locust只能手動停止,無法自動停止

 

locust運行命令

""" web模式運行 -f 指定腳本的絕對路徑 --host指定被測接口的服務主機 """ locust -f load_test.py --host=https://www.baidu.com """ --no-web模式運行 -c 設置虛擬用戶數 -r 設置每秒啟動虛擬用戶數 -t 設置運行時間 """ locust -f load_test.py --host=https://www.baidu.com --no-web -c 10 -r 2 -t 1m """ 分布式運行Locust,如果是--no-web模式運行,master會等待slave機器節點接入后運行 --master 設置locust為master模式,網頁交互會在這台節點機器中運行 --slave 設置locust的slave模式 --master-host 如果是本機多進程運行,可省略 """ locust -f load_test.py --master locust -f load_test.py --slave --master-host = 192.168.1.110

 

參數說明:

 1 -h, –help:查看幫助
 2 -H HOST, –host=HOST:指定被測試的主機,采用以格式:http://192.168.1.110
 3 –web-host=WEB_HOST:指定運行 Locust Web 頁面的主機,默認為空
 4 -P PORT, –port=PORT, –web-port=PORT:指定 –web-host 的端口,默認是8089
 5 -f LOCUSTFILE, –locustfile=LOCUSTFILE:指定運行 Locust 性能測試文件,默認為: locustfile.py
 6 –csv=CSVFILEBASE, –csv-base-name=CSVFILEBASE:以CSV格式存儲當前請求測試數據
 7 –master:Locust 分布式模式使用,當前節點為 master 節點
 8 –slave:Locust 分布式模式使用,當前節點為 slave 節點。
 9 –master-host=MASTER_HOST:分布式模式運行,設置 master 節點的主機或 IP 地址,只在與 –slave 節點一起運行時使用,默認為:127.0.0.1
10 –master-port=MASTER_PORT:分布式模式運行, 設置 master 節點的端口號,只在與 –slave 節點一起運行時使用,默認為:5557。注意,slave 節點也將連接到這個端口+1 上的 master 節點。
11 –master-bind-host=MASTER_BIND_HOST:master運行模式需要設置host,默認是* 所有有效接口
12 –master-bind-port=MASTER_BIND_PORT:應該設置master端口號(只用於master執行是),默認5557. 也會使用這個端口+1的端口,所以默認master會被連接到5557和5558兩個端口
13 –expect-slaves=EXPECT_SLAVES:開始測試之前期望多少個slave節點接入 (只–no-web模式).
14 –no-web:no-web 模式運行測試,需要 -c 和 -r 配合使用.
15 -c NUM_CLIENTS, –clients=NUM_CLIENTS:指定並發用戶數,作用於 –no-web 模式
16 -r HATCH_RATE, –hatch-rate=HATCH_RATE:指定每秒啟動的用戶數,作用於 –no-web 模式。
17 -t RUN_TIME, –run-time=RUN_TIME:設置運行時間, 例如: (300s, 20m, 3h, 1h30m). 作用於 –no-web 模式。
18 -L LOGLEVEL, –loglevel=LOGLEVEL:選擇 log 級別(DEBUG/INFO/WARNING/ERROR/CRITICAL). 默認是 INFO.
19 –logfile=LOGFILE:日志文件路徑。如果沒有設置,日志將去 stdout/stderr
20print-stats:在控制台中打印數據
21 –only-summary:只打印摘要統計
22 –no-reset-stats:執行完后不重新設定
23 -l, –list:顯示測試類, 配置 -f 參數使用
24 –show-task-ratio:打印 locust 測試類的任務執行比例,配合 -f 參數使用.
25 –show-task-ratio-json:以 json 格式打印 locust 測試類的任務執行比例,配合 -f 參數使用
26 -V, –version:查看當前 Locust 工具的版本.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM