1. 程式人生 > >基於python的性能測試工具–locust

基於python的性能測試工具–locust

說我 代理 ans 裝飾 word 幹什麽 基於 配置 朋友

現在有很多的性能測試工具,比如說我們熟悉的loadrunner、jmeter、ab、webbench等等,這些工具如果對一個沒用過的朋友來說,學習起來比較不容易,但是如果你能看懂python代碼,會寫就更好了,就可用嘗試一下今天的主角Locust,一款基於python的性能測試工具,它的優點是學習起來比較簡單,功能完全自定制,使用比較靈活,支持分布式。

所有的性能測試工具都至少包含這3塊:

1、壓力產生器,也就是可以指定產生多大的壓力,多少並發;

2、數據統計,也就是結果的展示,要統計TPS是多少,響應時間多少等等,這些數據;

3、代理功能,代理功能呢說白了就一句話,分攤壓力。比如說你壓測的時候要用1000個並發,但是你的電腦(壓力機)配置比較弱,只支持500並發,再大電腦就死掉了,完犢子,壓測不了。那怎麽辦呢,就得分攤壓力,再管你同事借一臺電腦,倆電腦發壓力,那就可以了,每個人的電腦上500個並發,人多好幹活嘛,代理就是幹這個的,把這個上面的壓力分攤到別的電腦上。

當然Locust這3個功能都是有的。

Locust是python的一個第三方模塊,安裝很簡單,直接pip install locust即可,或者自己下載安裝包,手動安裝。安裝完成後,就有locust命令,在命令行裏面輸入 locust --help,有幫助信息就安裝成功了。如下圖:

技術分享圖片

locust的官網是 www.locust.io,上面也有怎麽安裝和例子。

怎麽用呢,很簡單,只需要幾行代碼就可以實現,並且有漂亮的web界面,可以設置並發數,和查看結果,首先我們寫幾行簡單的代碼,寫一個打開BestTest首頁的腳本。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 from locust import HttpLocust, TaskSet, task #HttpLocust 這個類的作用是用來發送http請求的 #TaskSet 這個類是定義用戶行為的,相當於loadrunnerhttp協議的腳本,jmeter裏面的http請求一樣,要去幹嘛的
#task 這個task是一個裝飾器,它用來把一個函數,裝飾成一個任務,也可以指定他們的先後執行順序 class BestTest(TaskSet): #自己定義的類,繼承TaskSet,也就是這個類是實現咱們要去請求什麽的 @task#用task裝飾器把這個函數裝飾成一個咱們要執行的性能任務 def index(self):#這個函數裏面定義的是咱們要具體做的操作 self.client.get(‘/‘)#請求這個url裏面的哪個路徑,如果是接口的話,就是哪個接口 class BestTestIndexUser(HttpLocust): #這個類繼承了HttpLocust,代表每個並發裏面的每個用戶 task_set = BestTest #這個是每個用戶都去幹什麽,指定了BestTest這個類,它就會每個用戶去運行besttest這個類裏面的方法

代碼寫好了,下面運行一下,看看結果,但是運行的時候不是像一個普通的python腳本一樣運行了, 得使用locust命令,在命令行裏運行

1 2 3 locust -f besttest.py --host=http://www.besttest.cn #-f是指定一個python文件 後面跟上咱們剛才寫的python文件 #--host是你要訪問哪個網站,後面跟網站的url

這樣就可以運行,運行完之後,就可以在瀏覽器裏面打開locust的控制臺了,locust的默認端口號是8089,運行完之後,訪問的時候用ip:8090就可以訪問了,如下圖:

啟動locust:

技術分享圖片

locust控制臺頁面:

技術分享圖片

開始測試後的頁面:

技術分享圖片

tps圖和響應時間圖:

技術分享圖片

但是locust不像loadrunner和jmeter一樣可以設置開始時間和結束時間,只能你自己點stop的時候停止測試,這一點比較煩,所以在使用過程中還是需要自己註意一下測試時間。

剛才上面寫的例子是單個接口壓測, 或者更說單場景的,如果想做混合場景的壓測,比如說是一個業務流程,先登錄、然後下單、購物這樣的怎麽辦呢?

只需要寫多個task就可以了,也就是在類裏面寫多個函數,想誰想執行,標上數字就行了,1,2,3,4代碼如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 from locust import HttpLocust, TaskSet, task class BestTest(TaskSet): @task(1)#給task裝飾器傳一個參數,代表先訪問首頁 def index(self):#首頁 self.client.get(‘/‘) #發get請求 @task(2) def login(self):#登錄 self.client.post(‘/login‘,{‘username‘:‘besttest‘,‘password‘:‘123456‘}) #發送post請求,第一個是路徑,第二個這個接口的入參,賬號和密碼 class BestTestIndexUser(HttpLocust): #這個類繼承了HttpLocust,代表每個並發裏面的每個用戶 task_set = BestTest #這個是每個用戶都去幹什麽,指定了BestTest這個類,它就會每個用戶去運行besttest這個類裏面的方法

關於Locust就說這麽多,是不是很簡單呢,快去試試吧,有問題的小夥伴可以留言哦~

基於python的性能測試工具–locust