Locust 官方文檔 1: What is Locust?

什么是 Locust(蝗蟲)?

Locust 是一款易于使用的分布式用戶負載測試工具。它旨在對 web 系統(或其他系統)進行負載測試,從而獲取一個系統的并發(fā)處理能力。

這個 idea 源于在測試過程中,一群像蝗蟲一樣的用戶攻擊你的網站。

您可以使用 Python 代碼定義每個用戶的行為,并且可以通過 Web UI 實時監(jiān)視所有虛擬用戶的訪問過程。和其他類似的負載工具一樣,通過負載測試可以幫助你確定代碼中的瓶頸。

Locust 完全基于事件(event-based),因此可以在一臺計算機上支持數千個并發(fā)用戶。與許多其他基于事件的應用程序相比,它不使用回調。相反,它通過gevent使用輕量級進程(協程)。

在 Locust 中每個虛擬用戶實際上都在其自己的進程中運行(正確地說,是Greenlet)。這使您可以在Python中編寫非常有表現力的場景。

gevent 是第三方庫,通過 Greenlet 實現協程,其基本思想是:

當一個 Greenlet 遇到 IO 操作時,比如訪問網絡,就自動切換到其他的Greenlet,等到 IO 操作完成,再在適當的時候切換回來繼續(xù)執(zhí)行。由于 IO 操作非常耗時,經常使程序處于等待狀態(tài),有了 gevent 為我們自動切換協程,就保證總有 Greenlet 在運行,而不是等待 IO。

特性

使用 Python 編寫用戶測試場景

不需要笨拙的 UI (LR)或龐大的 XML(Jmeter),只需要像你平時寫 Python 代碼一樣編寫測試場景。Locust 基于協程而不是回調,因此你的代碼類似于正常的 Python 代碼,也就是說你編寫測試場景時不用考慮額外的算法、語法等。

分布式 & 可擴展 - 支持數十萬并發(fā)用戶

Locust 支持分布在多臺計算機上的運行負載測試。基于事件,即使一個 Locust 節(jié)點也可以在一個流程中生成成千上萬的虛擬用戶。

其背后的部分原因是,即使你模擬了這么多用戶,也并非所有人都在積極使用你的系統。每個虛擬用戶并不是無時無刻都在訪問系統,通常會有很多的空閑(等待網絡連接,等待 IO)。RPS != users,實際測試過程中,每秒請求數并不等于在線用戶數。

基于 Web 的 UI

Locust 具有簡潔的 HTML + JS 用戶界面,可實時顯示相關的測試詳細信息。而且由于用戶界面是基于 Web 的,因此它是跨平臺的,并且易于擴展。

可以測試任意的系統

雖然 Locust 是面向 Web 的,但它也可以用于測試幾乎所有系統。只需為您要測試的目標編寫一個客戶端(client),然后使用 locusts 發(fā)起測試!

可擴展的

Locust 核心代碼很少,很容易擴展,我們打算保持這種狀態(tài)。事件 I/O 和協程的所有繁重工作都委托給 gevent。我們創(chuàng)建Locust的原因是為了替代常見性能測試工具的脆弱性。

背景

之所以創(chuàng)建 Locust,是因為我們受夠了現有的解決方案。

他們都沒有解決正確的問題,對我(作者)來說,他們沒有抓住要點。我們已經嘗試過 Apache JMeter 和 Tsung,兩種工具都可以使用。我們在工作中多次使用 JMeter 進行性能基準測試。

JMeter 具備 UI 界面,您可能會認為這是一件好事,但是您很快就會意識到,通過一些組件的拖拽實現編程是一種非常痛苦的事情,為了實現某些簡單的邏輯都需要復雜的組合;其次,JMeter 是線程綁定的,這意味著對于每個要模擬的用戶,您都需要一個單獨的線程。不用說,在一臺計算機上對成千上萬的用戶進行基準測試是不可行的。

另一方面,Tsung 沒有用 Erlang 編寫的線程問題。它可以利用 BEAM 自身提供的輕量級工藝,并且可以愉快地擴展規(guī)模。但是在定義測試場景時,Tsung 和 JMeter 一樣有限。它提供了基于 XML 的 DSL 來定義用戶在測試時的行為方式。我想您可以想象“編碼”這一點的恐怖(使用 DSL 來編碼)。完成后顯示各種圖形或報告要求您對測試生成的日志文件進行后處理。只有這樣,您才能了解測試的進行方式。

無論如何,我們在創(chuàng)建 Locust 時都試圖解決這些問題。希望以上痛點都不存在。

我猜你可能會說我們真的只是在這里撓癢癢。我們希望其他人會發(fā)現它和我們一樣有用。

作者:

Jonatan Heyman (@jonatanheyman on Twitter)

Carl Bystr?m (@cgbystrom on Twitter)

Joakim Hamrén (@Jahaaja on Twitter)

Hugo Heyman (@hugoheyman on Twitter)

License

Open source licensed under the MIT license (see LICENSE file for details).

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容