1. 程式人生 > 其它 >python locust的基本使用 python + locust 記錄一次效能測試的實施

python locust的基本使用 python + locust 記錄一次效能測試的實施

python + locust 記錄一次效能測試的實施

 

前言

一直以來都是使用的工具壓測系統介面,常用JMETER ,後面學習python,發現還能用指令碼去測試系統性能,迫不及待試了一次,記錄下

 

實施

安裝python環境是自然要的,加上配置環境變數啥的,這些網上一大把,這裡就不詳述了。

要用到的python庫locust (官方文件:Locust說明文件

一、認識Locust

1、定義

Locust是一款易於使用的分散式負載測試工具,完全基於事件,即一個locust節點也可以在一個程序中支援數千併發使用者,不使用回撥,通過gevent使用輕量級過程(即在自己的程序內執行)。

# gevent是第三方庫,通過greenlet實現協程。greenlet是python的並行處理的一個庫。 python 有一個非常有名的庫叫做 stackless ,用來做併發處理, 主要是弄了個叫做tasklet的微執行緒的東西, 而greenlet 跟stackless的最大區別是greenlet需要你自己來處理執行緒切換, 就是說,你需要自己指定現在執行哪個greenlet再執行哪個greenlet。

2、特點

①、不需要編寫笨重的UI或者臃腫的XML程式碼,基於協程而不是回撥,指令碼編寫簡單易讀;

②、有一個基於web簡潔的HTML+JS的UI使用者介面,可以實時顯示相關的測試結果;

③、支援分散式測試,使用者介面基於網路,因此具有跨平臺且易於擴充套件的特點;

④、所有繁瑣的I / O和協同程式都被委託給gevent,替代其他工具的侷限性;

3、locust與jmeter的區別

工具 區別
jmeter 需要在UI介面上通過選擇元件來“編寫”指令碼,模擬的負載是執行緒繫結的,意味著模擬的每個使用者,都需要一個單獨的執行緒。單臺負載機可模擬的負載數有限
locust 通過編寫簡單易讀的程式碼完成測試指令碼,基於事件,同樣配置下,單臺負載機可模擬的負載數遠超jmeter

PS:但locust的侷限性在於,目前其本身對測試過程的監控和測試結果展示,不如jmeter全面和詳細,需要進行二次開發才能滿足需求越來越複雜的效能測試需要。

二、安裝Locust

1、支援的python版本:2.7、3.4、3.5、3.6;

2、Windows系統安裝locust

①、直接通過 pip install locustio 命令安裝;

②、安裝成功後可以輸入 pip show locust 命令檢視是否安裝成功,以及通過 locust -help 命令檢視幫助資訊。

PS:執行大規模測試時,建議在Linux機器上執行此操作,因為gevent在Windows下的效能很差。

三、一個簡單的示例

locust裡面請求是基於requests的,每個方法請求和requests差不多,請求引數、方法、響應物件和requests一樣的使用,之前學過requests庫的,這裡就非常簡單了

  • requests.get 對應client.get
  • requests.post 對應client.post
 1 from locust import HttpLocust,TaskSet,task
 2 
 3 class Demo(TaskSet):
 4     '''例子'''
 5     @task(1)
 6     def baidu(self):
 7         url = '/huahuage/p/12917114.html'
 8         header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"}
 9         req = self.client.get(url, headers=header, verify=False)
10 
11         if req.status_code == 200:
12             print("success")
13         else:
14             print("fails")
15             
16 class websitUser(HttpLocust):
17     task_set = Demo
18     min_wait = 3000
19     max_wait = 6000
20 
21 if __name__=="__main__":
22     import os
23     os.system("locust -f demo.py --host=https://www.cnblogs.com")
 

這是轉載別人的,我自己直接執行這個python檔案,提示 terminal is not a tty terminal ,然後就在pycharm下邊的terminal下邊直接執行locust命令,然後就可以了

另外一點,就是運行了locust命令之後了,只是啟動了這個服務,http://localhost:8089,然後在瀏覽器中輸入這個地址,然後輸入虛擬使用者數和啟動時間,然後點選start執行才會真正的開始發情請求

 

 

 

指令碼說明

新建一個類Demo(TaskSet),繼承TaskSet,該類下面寫需要請求的介面以及相關資訊;

self.client呼叫get和post方法,和requests一樣;

@task裝飾該方法表示為使用者行為,括號裡面引數表示該行為的執行權重:數值越大,執行頻率越高,不設定預設是1;

WebsiteUser()類用於設定效能測試。

task_set:指向定義了使用者行為的類

min_wait :模擬負載的任務之間執行時等待時間的下界,單位:毫秒

max_wait :模擬負載的任務之間執行時等待時間的上界,單位:毫秒

PS:預設情況下,時間是在min_wait和max_wait之間隨機選擇,但是可以通過將wait_function設定為任意函式來使用任何使用者定義的時間分佈。

四、啟動Locust

1、如果啟動的locust檔名為locustfile.py並位於當前工作目錄中,可以在編譯器中直接執行該檔案,或者通過cmd,執行如下命令:

 locust --host=https://www.cnblogs.com 

2、如果Locust檔案位於子目錄下且名稱不是locustfile.py,可以使用-f命令啟動上面的示例locust檔案:

 locust -f testscript/locusttest.py --host=https://www.cnblogs.com 

3、如果要執行分佈在多個程序中的Locust,通過指定-master以下內容來啟動主程序 :

 locust -f testscript/locusttest.py --master --host=https://www.cnblogs.com 

4、如果要啟動任意數量的從屬程序,可以通過-salve命令來啟動locust檔案:

 locust -f testscript/locusttest.py --salve --host=https://www.cnblogs.com 

5、如果要執行分散式Locust,必須在啟動從機時指定主機(執行分佈在單臺機器上的Locust時不需要這樣做,因為主機預設為127.0.0.1):

 locust -f testscript/locusttest.py --slave --master-host=192.168.0.100 --host=https://cnblogs.com 

6、啟動locust檔案成功後,編譯器控制檯會顯示如下資訊:

 [2018-10-09 01:01:44,727] IMYalost/INFO/locust.main: Starting web monitor at *:8089

[2018-10-09 01:01:44,729] IMYalost/INFO/locust.main: Starting Locust 0.8 

PS:8089是該服務啟動的埠號,如果是本地啟動,可以直接在瀏覽器輸入http://localhost:8089開啟UI介面,如果是其他機器搭建locust服務,則輸入該機器的IP+埠即可;

五、locust的UI介面

1、啟動介面

Number of users to simulate:設定模擬的使用者總數

Hatch rate (users spawned/second):每秒啟動的虛擬使用者數

Start swarming:執行locust指令碼

2、測試結果介面

PS:點選STOP可以停止locust指令碼執行:

Type:請求型別,即介面的請求方法;

Name:請求路徑;

requests:當前已完成的請求數量;

fails:當前失敗的數量;

Median:響應時間的中間值,即50%的響應時間在這個數值範圍內,單位為毫秒;

Average:平均響應時間,單位為毫秒;

Min:最小響應時間,單位為毫秒;

Max:最大響應時間,單位為毫秒;

Content Size:所有請求的資料量,單位為位元組;

reqs/sec:每秒鐘處理請求的數量,即QPS;

3、各模組說明

New test:點選該按鈕可對模擬的總虛擬使用者數和每秒啟動的虛擬使用者數進行編輯;

Statistics:類似於jmeter中Listen的聚合報告;

Charts:測試結果變化趨勢的曲線展示圖,分別為每秒完成的請求數(RPS)、響應時間、不同時間的虛擬使用者數;

Failures:失敗請求的展示介面;

Exceptions:異常請求的展示介面;

Download Data:測試資料下載模組, 提供三種類型的CSV格式的下載,分別是:Statistics、responsetime、exceptions;

 

以上即為locust的介紹和簡單使用以及說明,更多詳細的內容請參考官方文件。。。

 

轉載:https://www.cnblogs.com/huahuage/p/12917114.html

前言

一直以來都是使用的工具壓測系統介面,常用JMETER ,後面學習python,發現還能用指令碼去測試系統性能,迫不及待試了一次,記錄下

 

實施

安裝python環境是自然要的,加上配置環境變數啥的,這些網上一大把,這裡就不詳述了。

要用到的python庫locust (官方文件:Locust說明文件

一、認識Locust

1、定義

Locust是一款易於使用的分散式負載測試工具,完全基於事件,即一個locust節點也可以在一個程序中支援數千併發使用者,不使用回撥,通過gevent使用輕量級過程(即在自己的程序內執行)。

# gevent是第三方庫,通過greenlet實現協程。greenlet是python的並行處理的一個庫。 python 有一個非常有名的庫叫做 stackless ,用來做併發處理, 主要是弄了個叫做tasklet的微執行緒的東西, 而greenlet 跟stackless的最大區別是greenlet需要你自己來處理執行緒切換, 就是說,你需要自己指定現在執行哪個greenlet再執行哪個greenlet。

2、特點

①、不需要編寫笨重的UI或者臃腫的XML程式碼,基於協程而不是回撥,指令碼編寫簡單易讀;

②、有一個基於web簡潔的HTML+JS的UI使用者介面,可以實時顯示相關的測試結果;

③、支援分散式測試,使用者介面基於網路,因此具有跨平臺且易於擴充套件的特點;

④、所有繁瑣的I / O和協同程式都被委託給gevent,替代其他工具的侷限性;

3、locust與jmeter的區別

工具 區別
jmeter 需要在UI介面上通過選擇元件來“編寫”指令碼,模擬的負載是執行緒繫結的,意味著模擬的每個使用者,都需要一個單獨的執行緒。單臺負載機可模擬的負載數有限
locust 通過編寫簡單易讀的程式碼完成測試指令碼,基於事件,同樣配置下,單臺負載機可模擬的負載數遠超jmeter

PS:但locust的侷限性在於,目前其本身對測試過程的監控和測試結果展示,不如jmeter全面和詳細,需要進行二次開發才能滿足需求越來越複雜的效能測試需要。

二、安裝Locust

1、支援的python版本:2.7、3.4、3.5、3.6;

2、Windows系統安裝locust

①、直接通過 pip install locustio 命令安裝;

②、安裝成功後可以輸入 pip show locust 命令檢視是否安裝成功,以及通過 locust -help 命令檢視幫助資訊。

PS:執行大規模測試時,建議在Linux機器上執行此操作,因為gevent在Windows下的效能很差。

三、一個簡單的示例

locust裡面請求是基於requests的,每個方法請求和requests差不多,請求引數、方法、響應物件和requests一樣的使用,之前學過requests庫的,這裡就非常簡單了

  • requests.get 對應client.get
  • requests.post 對應client.post
 1 from locust import HttpLocust,TaskSet,task
 2 
 3 class Demo(TaskSet):
 4     '''例子'''
 5     @task(1)
 6     def baidu(self):
 7         url = '/huahuage/p/12917114.html'
 8         header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"}
 9         req = self.client.get(url, headers=header, verify=False)
10 
11         if req.status_code == 200:
12             print("success")
13         else:
14             print("fails")
15             
16 class websitUser(HttpLocust):
17     task_set = Demo
18     min_wait = 3000
19     max_wait = 6000
20 
21 if __name__=="__main__":
22     import os
23     os.system("locust -f demo.py --host=https://www.cnblogs.com")
 

這是轉載別人的,我自己直接執行這個python檔案,提示 terminal is not a tty terminal ,然後就在pycharm下邊的terminal下邊直接執行locust命令,然後就可以了

另外一點,就是運行了locust命令之後了,只是啟動了這個服務,http://localhost:8089,然後在瀏覽器中輸入這個地址,然後輸入虛擬使用者數和啟動時間,然後點選start執行才會真正的開始發情請求

 

 

 

指令碼說明

新建一個類Demo(TaskSet),繼承TaskSet,該類下面寫需要請求的介面以及相關資訊;

self.client呼叫get和post方法,和requests一樣;

@task裝飾該方法表示為使用者行為,括號裡面引數表示該行為的執行權重:數值越大,執行頻率越高,不設定預設是1;

WebsiteUser()類用於設定效能測試。

task_set:指向定義了使用者行為的類

min_wait :模擬負載的任務之間執行時等待時間的下界,單位:毫秒

max_wait :模擬負載的任務之間執行時等待時間的上界,單位:毫秒

PS:預設情況下,時間是在min_wait和max_wait之間隨機選擇,但是可以通過將wait_function設定為任意函式來使用任何使用者定義的時間分佈。

四、啟動Locust

1、如果啟動的locust檔名為locustfile.py並位於當前工作目錄中,可以在編譯器中直接執行該檔案,或者通過cmd,執行如下命令:

 locust --host=https://www.cnblogs.com 

2、如果Locust檔案位於子目錄下且名稱不是locustfile.py,可以使用-f命令啟動上面的示例locust檔案:

 locust -f testscript/locusttest.py --host=https://www.cnblogs.com 

3、如果要執行分佈在多個程序中的Locust,通過指定-master以下內容來啟動主程序 :

 locust -f testscript/locusttest.py --master --host=https://www.cnblogs.com 

4、如果要啟動任意數量的從屬程序,可以通過-salve命令來啟動locust檔案:

 locust -f testscript/locusttest.py --salve --host=https://www.cnblogs.com 

5、如果要執行分散式Locust,必須在啟動從機時指定主機(執行分佈在單臺機器上的Locust時不需要這樣做,因為主機預設為127.0.0.1):

 locust -f testscript/locusttest.py --slave --master-host=192.168.0.100 --host=https://cnblogs.com 

6、啟動locust檔案成功後,編譯器控制檯會顯示如下資訊:

 [2018-10-09 01:01:44,727] IMYalost/INFO/locust.main: Starting web monitor at *:8089

[2018-10-09 01:01:44,729] IMYalost/INFO/locust.main: Starting Locust 0.8 

PS:8089是該服務啟動的埠號,如果是本地啟動,可以直接在瀏覽器輸入http://localhost:8089開啟UI介面,如果是其他機器搭建locust服務,則輸入該機器的IP+埠即可;

五、locust的UI介面

1、啟動介面

Number of users to simulate:設定模擬的使用者總數

Hatch rate (users spawned/second):每秒啟動的虛擬使用者數

Start swarming:執行locust指令碼

2、測試結果介面

PS:點選STOP可以停止locust指令碼執行:

Type:請求型別,即介面的請求方法;

Name:請求路徑;

requests:當前已完成的請求數量;

fails:當前失敗的數量;

Median:響應時間的中間值,即50%的響應時間在這個數值範圍內,單位為毫秒;

Average:平均響應時間,單位為毫秒;

Min:最小響應時間,單位為毫秒;

Max:最大響應時間,單位為毫秒;

Content Size:所有請求的資料量,單位為位元組;

reqs/sec:每秒鐘處理請求的數量,即QPS;

3、各模組說明

New test:點選該按鈕可對模擬的總虛擬使用者數和每秒啟動的虛擬使用者數進行編輯;

Statistics:類似於jmeter中Listen的聚合報告;

Charts:測試結果變化趨勢的曲線展示圖,分別為每秒完成的請求數(RPS)、響應時間、不同時間的虛擬使用者數;

Failures:失敗請求的展示介面;

Exceptions:異常請求的展示介面;

Download Data:測試資料下載模組, 提供三種類型的CSV格式的下載,分別是:Statistics、responsetime、exceptions;

 

以上即為locust的介紹和簡單使用以及說明,更多詳細的內容請參考官方文件。。。

 

轉載:https://www.cnblogs.com/huahuage/p/12917114.html