寫在 Locust 教程開始的前面
本文參考了: Locust 教程 : https://www.axihe.com/tools/locust/home.html ;
locust 的官方 Github 是:https://github.com/locustio/locust
這個教程是我翻譯官方 Github 介紹並搜索網絡的相關 locust 使用文章而組織的教程哦;
locust 這個工具,需要根據你的實際情況來決定是不是適合你;
如果你對編程了解比較多,並不是只會 jmeter 的測試人員;
那么完全可以代替笨拙的 jmeter 處理你的測試,它在自定義方面處理的非常好,這也就帶來一個弊端,就是什么都需要你來做,而且對你的代碼能力和邏輯思維有一定的要求;
如果你對 編程是一臉懵逼的狀態,那么建議你還是 jmeter 為主(畢竟要干活),然后了解下 Locust
,看看它是怎么工作的,了解下它的處理思維;
Locust 是什么?
Locust 是一個比較容易上手的分布式用戶負載測試工具。
它旨在對網站(或其他系統)進行負載測試,並確定系統可以處理多少個並發用戶,Jmeter 也可以處理這種場景,但是個人感覺 Jmeter 在這方面做的不如 Locust 專業。
Locust 在英文中是 蝗蟲
的意思:
作者的想法是,在測試期間,放一大群 蝗蟲 攻擊您的網站。
當然事先是可以用 Locust 定義每個蝗蟲(或測試用戶)的行為,並且通過 Web UI 實時監視圍攻過程。
這將幫助您在項目上線之前測試並確定項目的瓶頸;
如果上線幾個人訪問就跪了,被老板拉出去祭天就懵逼了,有了 locust 可以讓項目更加快樂的上線;
Locust 可以讓測試工程師對開發人員和項目經理的回復的更專業,
可以想象一下,當項目經理或領導問你這個項目的性能如何,可以承受多少壓力的時候;
你回答說這個項目的瓶頸在 2341 人同時訪問,超過就會掛掉 / 宕機 / 出錯等,當在 1834 人同時訪問時候,會變慢;具體訪問時間的餅圖如 XXX)
這樣的回答是不是逼格很高?
Locust 的運行原理
Locust 的運行原理是完全基於事件運行的,因此可以在一台計算機上支持數千個並發用戶。
與許多其他基於事件的應用程序相比,它不使用回調(比如 Nodejs 就是屬於回調,Locust 不使用這種的邏輯)。
相反,它通過 gevent 使用輕量級進程。測試您站點的每個蝗蟲實際上都在其自己的進程中運行(正確地說,是Greenlet)。
這可以讓您寫 Python 代碼的時候更加簡單,而不會進入類似 JS 的那種回調地域。
我是如何開始了解 Locust 的
我是一名碼農,寫接口的時候,除了 Postman 做校驗外,偶爾也測測一些接口的性能;
2017 年的年中時候,做接口壓力測試,一直研究使用 jmeter 寫寫 DEMO 還是很嗨皮的;
但是真正進行並發接口時,發現 jmeter 在單機下並發超過 1000 的時候,單台台式電腦機器的資源早就被使用完,jmeter 都動不了,基本就算涼了;
也可能是我的 jmeter 壓測接口研究得不夠,不會用吧 - -,如果有優雅的方法,歡迎告訴我;
通過搜索發現基於 Python 開發的 Locust 的單機並發能力很理想,在測試環境拿來壓測,好像真的可以實現幾千的並發,然后就打開了 Locust 的大門。
Locust 的 特征
-
用 Python 編寫測試方案
- 不需要在 UI 界面上傻乎乎的點擊,只需正常的寫寫代碼就可以了。
- Locust 基於協程而不是回調,這樣會讓您的代碼類似於正常的 Python 阻塞代碼那樣同步執行。
-
分布式 & 可擴展
- 支持模擬數十萬的用戶行為(還是非常給力的)
- Locust 支持分布在多台計算機上的運行負載測試(可以多台機器並行開搞)。
- 由於基於事件,因此即使一個蝗蟲節點也可以在單個過程中處理數千個用戶。
- 不過即使您模擬了這么多用戶,也並非所有人都是這種頻率的使用您的系統,通常,用戶會有思考的時候,會想一想下一步該怎么做。
- 需要明白 每秒請求數 不等於 在線用戶數。
-
統計結果基於 Web 界面
- Locust 有一個簡單的用戶界面,可實時顯示相關的測試詳細信息。
- 統計結果界面是基於網頁的,而網頁是天生跨平台的,所以 Locust 是跨平台且易於擴展的(Locust 作者的這種思維還是很不錯的)。
-
可以測試任何網頁 / 應用 / 系統
- 即使 Locust 是面向 Web 的,它也可以測試幾乎所有項目
- 只需用 python 編寫想要測試的方案,然后放"蝗蟲"去懟需要測試的項目就可以了,非常簡單!
- 雖然官方是這么宣傳的,但是如果你對 python 了解的不怎么樣,那可能就沒有那么簡單啊;就像商家把蘭博基尼的操作宣傳的再簡單,我沒錢買也是白搭(老鐵,我太難了!)
- 如果你對編程是懵逼的狀態,那還是回去用 jmeter 吧,優雅不優雅的先不說,最起碼你可以用它來干活;
-
容易被入侵
- Locust 放出去的蝗蟲很小,很容易被入侵,開發團隊是一只打算保持這種狀態的。
- 事件 I/O 和協程的所有繁重工作都委托給 gevent
- 團隊是看到 jmeter 等其它測試工具,處理的太 low,太死板了,所以才寫的 locust;
Locust 是完全基於 Python
http 請求完全是基於 requests 庫;
Locust 支持 http、https 協議,還支持測試其他協議,websocket 等;
只要采用 Python 調用對應的庫就可以了。
- http/https 采用 requests;
- websocket 采用 websocket ;
Locust 的創作背景
Locust
之所以創建,是因為作者受夠了現有的解決方案。
作者認為他們都沒有解決正確的問題,沒有抓住要點,簡單的講,就是作者認為他們太 low 了,一個能打的都沒有,於是自己擼了一個 Locust 給大家用。
作者也深度嘗試過 Apache JMeter 和 偶爾用用 Tsung。
JMeter 帶有一個 UI,很多人可能會認為這是一件好事,只需要點點就好。
但是如果你是一個測試測試,很快就會意識到,通過某些點擊界面“編碼”您的測試方案是一種 PITA。
其次,JMeter 是線程綁定的,這意味着對於每個要模擬的用戶,都需要一個單獨的線程。這也就導致了,在一台計算機上模擬成千上萬的用戶進行基准測試是不可行的。
另一方面,Tsung 沒有用 Erlang 編寫的線程問題。
它可以利用 BEAM 自身提供的輕量級工藝,並且可以愉快地擴展規模。
但是在定義測試方案時,Tsung 和 JMeter 一樣有限。
它提供了基於 XML 的 DSL 來定義用戶在測試時的行為方式(這種格式還是很 low 的,但是卻很直觀)。完成后顯示任何種類的圖形或報告,都需要對測試生成的日志文件進行后處理,只有這樣,您才能了解測試的進行方式。
作者在創建 locust 時試圖解決這些問題。
開源許可證
根據 MIT 許可獲得許可的開放源代碼(有關詳細信息,請參閱 LICENSE 文件)。
本文參考:https://www.axihe.com/tools/locust/home.html