寫在 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/107613.html
標籤:其他
上一篇:一文解讀CQRS (轉)
