Locust 多種執行方式

yongheng999發表於2024-03-16
執行 `Locust`時,通常會使用到兩種執行模式:**單程序執行**和 **多程序分散式執行** 。

**單程序執行模式**


`Locust`所有的虛擬併發使用者均執行在單個 `Python`程序中,具體從使用形式上,又分為 `no_web`**和** `web`**兩種形式。該種模式由於**單程序的原因,並不能完全發揮壓力機所有處理器的能力,因此主要用於除錯指令碼和小併發壓測的情況。

**當併發壓力要求較高時,就需要用到 `Locust`的多程序分散式執行模式** 。從字面意思上看,大家可能第一反應就是多臺壓力機同時執行,每臺壓力機分擔負載一部分的壓力生成。的確,`Locust`支援任意多臺壓力機(一主多從)的分散式執行模式,但這裡說到的多程序分散式執行模式還有另外一種情況,就是在同一臺壓力機上開啟多個 `slave`的情況。這是因為當前階段大多數計算機的CPU都是多處理器(`multiple processor cores`),單程序執行模式下只能用到一個處理器的能力,而透過在一臺壓力機上執行多個 `slave`,就能呼叫多個處理器的能力了。比較好的做法是,如果一臺壓力機有 `N`個處理器核心,那麼就在這臺壓力機上啟動一個 `master`,`N`個 `slave`。當然,我們也可以啟動 `N`的倍數個 `slave`,但是根據我的試驗資料,效果跟 `N`個差不多,因此只需要啟動 `N`個 `slave`即可。` `

**no_web形式啟動locust:**


如果採用 `no_web`形式,則需使用 `--no-web`引數,並會用到如下幾個引數。

* `-c, --clients`:指定併發使用者數; (新版本的話是 -u)
* `-r, --hatch-rate`:指定併發加壓速率,預設值位1。

示例:

$ locust -f locustfile.py --host = xxxxx.com --no-web -c 1 **-r 1**

在此基礎上,當我們想要除錯 `Locust`指令碼時,就可以在指令碼中需要除錯的地方透過 `print`列印日誌,然後將併發數和總執行次數都指定為1

**如果 是新的版本的話,它的命令有所改變,變為以下: 將命令引數--no-web 更改為 --headless,將命令中指定使用者併發數的引數 -c 改為 -u, 即更改命令為:**

$ locust -f locustfile.py --host = xxxxx.com --headless -u 1 -r 1 -t 10

執行測

透過這種方式,我們就能很方便地對 `Locust`指令碼進行除錯了。

`Locust`指令碼除錯透過後,就算是完成了所有準備工作,可以開始進行壓力測試了。

**web形式啟動Locust:**

如果採用 `web`形式,,則通常情況下無需指定其它額外引數,`Locust`預設採用 `8089`埠啟動 `web`;如果要使用其它埠,就可以使用如下引數進行指定。


* `-P, --port`:指定web埠,預設為 `8089`.
* 終端中--->進入到程式碼目錄: locust -f locustfile.py --host = xxxxx.com
* -f 指定效能測試指令碼檔案
* -host 被測試應用的URL地址【如果不填寫,讀取繼承(HttpLocust)類中定義的host】
* 如果 `Locust`執行在本機,在瀏覽器中訪問 `http://localhost:8089`即可進入 `Locust`的Web管理頁面;如果 `Locust`執行在其它機器上,那麼在瀏覽器中訪問 `http://locust_machine_ip:8089`即可。

**多程序分散式執行**


不管是 `單機多程序`,還是 `多機負載`模式,執行方式都是一樣的,都是先執行一個 `master`,再啟動多個 `slave`。

啟動 `master`時,需要使用 `--master`引數;同樣的,如果要使用 `8089`以外的埠,還需要使用 `-P, --port`引數。

分散式啟動的話分為兩種:

1:同一臺機器上啟動


啟動主程序 locust -f xxx.py --master (新舊版本都是 --master)

啟動助功程序 locust -f xxx.py --worker (舊的版本是 --slave)

2:不同機器啟動


啟動主程序 locust -f xxx.py --master (新舊版本都是 --master)

啟動助功程序 locust -f xxx.py --worker --master-host=主控機器ip --master-port=5557 (舊的版本是 --slave)

**執行指令碼檔案看的命令列效果(以web ui方式進行執行的)**

![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/fyfile/15480/1679988457057/02e40b308a5a4e408aae568c1df27b7a.png)

然後的話你可以在我們的瀏覽器中輸入我們的 localhost:8089 效果圖如下:

![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/fyfile/15480/1679988457057/bb4dfcda10154725abe40df9a448eaf4.png)

執行結果如下:

![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/fyfile/15480/1679988457057/3d9ed42bf3aa4bfa93a87cd00f97b548.png)

其他的資源監控介面:


charts(圖表):記錄吞吐量QPS、響應時間、併發數,按照時間的統計情況

Failures(失敗):效能測試指令碼在執行失敗後的記錄(斷言失敗)

Exceptions(異常):指令碼出現異常

Download Data(下載資料):提供下載前面各個部分的效能指標資料

相關文章