1. 程式人生 > 其它 >Python效能測試-Locust框架

Python效能測試-Locust框架

一、認識Locust

Locust是一個比較容易上手的分散式使用者負載測試工具。 它旨在對網站(或其他系統)進行負載測試,並確定系統可以處理多少個併發使用者,Locust 在英文中是 蝗蟲 的意思: 作者的想法是,在測試期間,放一大群 蝗蟲 攻擊您的網站。 當然事先是可以用 Locust 定義每個蝗蟲(或測試使用者)的行為,並且通過 Web UI 實時監視圍攻過程。

二、locust執行原理

Locust 的執行原理是完全基於事件執行的,因此可以在一臺計算機上支援數千個併發使用者。 與許多其他基於事件的應用程式相比,它不使用回撥(比如 Nodejs 就是屬於回撥,Locust 不使用這種的邏輯)。 相反,它通過 gevent 使用輕量級程序。測試您站點的每個蝗蟲實際上都在其自己的程序中執行

三、Locust的特點

1、用Python編寫測試方案 不需要在UI介面上點選,只需要正常編寫程式碼即可,靈活性比較強

2、分散式&可擴充套件 Locust 支援分佈在多臺計算機上的執行負載測試(可以多臺機器並行開搞)。

3、統計結果基於Web介面 Locust 有一個簡單的使用者介面,可實時顯示相關的測試詳細資訊,並且統計結果介面是基於網頁的,而網頁是天生跨平臺的,所以 Locust 是跨平臺且易於擴充套件的

4、可以測試任何網頁/應用/系統 只需用 python 編寫想要測試的方案,然後放”蝗蟲”去懟需要測試的專案就可以了,非常簡單!

四、測試工具哪個好

LoadRunner: 是非常有名的商業效能測試工具,功能非常強大。使用也比較複雜,但收費賊貴

Jmeter: 同樣是非常有名的開源效能測試工具,功能也很完善。可以當做介面測試工具來測試介面,但同時它也是一個標準的效能測試工具

Locust: 功能上雖然不如LoadRunner及Jmeter豐富,但其也有不少有點。Locust 完全基本 Python 程式語言並且 HTTP 請求完全基於 Requests 庫。LoadRunner 和 Jmeter 這類採用程序和執行緒的測試工具,都很難在單機上模擬出較高的併發壓力。Locust 的併發機制摒棄了程序和執行緒,採用協程(gevent)的機制。協程避免了系統級資源排程,由此可以大幅提高單機的併發能力。

五、環境安裝

1、Python環境配置

(1)首先去Python官網下載Python3.6+版本直譯器

(2)安裝直譯器並配置環境變數(將python的根目錄以及Scripts路徑配置到環境變數Path下面)

(3)開啟cmd視窗,分別輸入python、pip命令並回車,如果沒有報錯,則說明Python環境配置成功

2、Locust環境配置

(1)開啟cmd視窗,輸入pip install locustio==0.14.6 並回車,此時系統會自動下載locust庫以及部分依賴庫(PS:locust 目前有2個大版本,0*和1*的版本,兩個版本之間語法差異比較大,安裝1*版本,直接pip install locust 即可)

(2)安裝成功後驗證:在cmd視窗中,輸入python,進入python開發環境,然後輸入import locust,如果沒有報錯,則說明locust安裝成功

六、如何使用

Locust類

1、HttpLocust類 繼承了Locust類,表示將要生成的每一個虛擬的HTTP使用者,用來發送請求到進行負載測試的系統。

2、task_set屬性 該 task_set 屬性指向定義的使用者行為的類

3、host屬性 host屬性是要載入的域名(URL 字首,例如http://xxxxxx)

4、wait_time屬性 用於傳送Http請求時,虛擬使用者需要等待的時間,等待時間是一個區間範圍。單位為毫秒,等待時間在min_wait和max_wait之間隨機選擇

TaskSequence 類

1、TaskSequence 類 TaskSequence 類是 TaskSet,但其任務將按順序執行。

2、@task裝飾器 用於標識測試任務,並且可以通過task裝飾器設定權重用於執行任務的執行率

3、@seq_task裝飾器 用於指定介面的執行順序。可以把@task裝飾器和@seq_task裝飾器一起組合使用

初始化方法

1、setup 和 teardown方法 setup 和 teardown 都是隻能執行一次的方法。在任務開始執行之前執行setup,而在所有任務完成並且蝗蟲退出後執行 teardown;這使您能夠在任務開始執行之前做一些準備工作(比如建立資料庫,或者列印日誌 等等),並在蝗蟲退出之前進行清理。

2、on_start 和 on_stop 方法 每個虛擬使用者執行操作時執行on_start方法,退出時執行on_stop方法

3、初始化方法的執行順序 setup > on_start > on_stop > teardown

常用3種啟動方式

1、直接啟動 locust -f stock_center.py (stock_center.py為執行指令碼,可在編譯器中直接執行該指令碼)

2、無web頁面啟動 locust -f stock_center.py --no-web -c 200 -r 20 -t 1m (--no-web 代表不需要啟動UI頁面,-c 代表需要併發的使用者數,-r 代表每秒併發的使用者數, -t 代表需要執行的時間)

3、分散式啟動 locust -f stock_center.py --master # 指定當前機器為master主機 locust -f stock_center.py --slave --master-host=10.xxx.xxx.xxx # 指定當前機器為從機並指向對應master主機

啟動頁面

Number of total users simulate: 設定需要併發的總人數

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

Start swarming: 執行locust指令碼

執行頁面

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

Name:介面請求路徑

Requests: 當前已完成的請求數量

Fails:當前失敗的數量

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

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

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

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

Average Size: 平均請求的資料量, 單位為位元組

Current RPS: 每秒能處理的請求數目

各模組說明

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

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

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

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

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

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

七、Locust的總結

侷限:

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

優勢:

1、純指令碼形式,並且HTTP請求完全基於Requests庫。用過Requests的都知道,這個庫非常簡潔易用,但功能十分強大

2、另外一點就是併發機制了。Locust的併發機制摒棄了程序和執行緒,採用協程(gevent)的機制。避免了系統級資源排程,由此大幅提高了效能。正常情況下,單臺普通配置的測試機可以生產數千併發壓力,這是LoadRunner和Jmeter都無法實現的。