什么是Locust
Locust是一個容易使用、分布式的壓力測試工具。它是用于網(wǎng)站壓力測試(或其它系統(tǒng))并找出多少用戶一個系統(tǒng)可以承載。
在測試過程中,策略就是一個Locust的蠕蟲將會攻擊你的網(wǎng)站。每一個locust的行為(或你使用的測試用戶)是你自己定義的,并且蠕蟲進程從一個網(wǎng)頁視圖中被實時監(jiān)測。這樣會幫助你來實現(xiàn)測試,在真實用戶使用前定義系統(tǒng)的瓶頸。
Locust是完全基于事件的,因此可以在單臺機器中支持數(shù)以千計的用戶在線。和其它基于事件的程序相比較,它是不需要使用回調的。相反,它通過gevent使用輕量級的進程。每一個locust測試你的網(wǎng)站時,實際上是真實的在內部運行它自己的進程(或greenlet,準確的說)。這樣就允許你不使用復雜的回調方法,而是使用Python編寫復雜的場景。
特性
-
使用純Python腳本編寫測試場景
不需要笨重的UI或臃腫的XML,只需要你平時編寫的代碼即可。使用協(xié)和來代替回調,你的代碼看起來更像正常的Python代碼塊。
-
分布式 & 大量級 - 支持數(shù)以千計的用戶
Locust支持跨多臺機器來運行壓力測試。當然由于基于事件,一個Locust節(jié)點也可以在單進程下支持好幾千用戶。這背后的原因是即使你模擬了這么多用戶,但并不是所有的用戶都是活躍在攻擊你的系統(tǒng)。通常,用戶是空閑的,在等待下一次的動作。
每秒的請求 != 在線用戶數(shù)。 -
基于Web的UI
Locust有一個整潔的
HTML + JS用戶交互界面,用于實時展示對應的測試明細。并且,由于UI是基于Web的,所以它是跨平臺并容易擴展的。 -
可測試任何系統(tǒng)
即使Locust是面向Web的,但它可用于測試大部分系統(tǒng)。只需要針對你要測試的系統(tǒng)寫一個client,再使用Locust來壓測它。真的很容易!
-
可改造的
Locust是一個非常小巧并可改造的,并且我們計劃一直保持這樣。所有重量級的事件I/O和協(xié)程都被委托給gevent。容易改造的測試工具是我們創(chuàng)建Locust的初衷。
背景
Locust被創(chuàng)建是因為我們要解決已經(jīng)存在的問題。沒有一個對于來說可以解決正確的問題,它們沒找到核心點。我們嘗試了JMeter和Tsung。這兩個工具使用起來都很不錯;在工作中,我們多次使用了前者來測試基準。JMeter。JMeter自帶了UI交互,這一秒你可能認識這是一件好事。但你很快就會認識到,這是一個PITA,通過一些點擊界面箅編碼測試場景。第二,JMeter是基于線程的。這就是所有你想模擬的用戶,你需要一個獨立的線程。不用說,在一臺機器實現(xiàn)幾千用戶是相當產(chǎn)靈活的。
另一方面,由于是使用Erlang編寫的,Tsung沒有線程問題。它通過使用BEAM自身來實現(xiàn)輕量級線程,并很容易將量級提升。但,當定義測試場景時,Tsung和JMeter一樣被限制了。它提供一個基于XML的動態(tài)描述語言來定義,在測試時的用戶行為。我猜,你可以想像編碼實現(xiàn)它的榮耀。當完成你的post請求并從測試日志中生成日志,展示任何圖形排序或報告。接下來你就可以理解測試是怎么運行的。
無論如何,在創(chuàng)建Locust時,我們已經(jīng)嘗試羅列這些問題。希望上面的痛點都不存在。
我猜,你會說我們真的只是羅列了我們的好處。我們希望盡可能的實現(xiàn)一些有用的。
作者
- Jonatan Heyman(@jonatanheyman on Twitter)
- Carl Bystr?m (@cgbystrom on Twitter)
- Joakim Hamrén (@Jahaaja on Twitter)
- Hugo Heyman (@hugoheyman on Twitter)
許可證
在MIT許可證下的開源許可(查看許可證明細)