Locust 官方文檔 1: What is Locust?

什麼是 Locust(蝗蟲)?

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

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

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

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

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

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

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

特性

使用 Python 編寫用戶測試場景

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

分佈式 & 可擴展 - 支持數十萬併發用戶

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

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

基於 Web 的 UI

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

可以測試任意的系統

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

可擴展的

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

背景

之所以創建 Locust,是因爲我們受夠了現有的解決方案。

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

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

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

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

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

作者:

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).

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章