前言
提到性能測試,大部分小伙伴想到的就是LR和jmeter這種工具,小編一直不太喜歡寫這種工具類的東西,我的原則是能用代碼解決的問題,盡量不去用工具。
python里面也有一個性能測試框架Locust,本篇簡單的介紹Locust的基本使用,希望越來越多的小伙伴能一起愛上它!
環境准備:
python3.6
windows電腦
locust
Locust簡介
Locust是一款易於使用的分布式用戶負載測試工具。它用於對網站(或其他系統)進行負載測試,並確定系統可以處理多少並發用戶。
這個想法是,在測試期間,一群蝗蟲(Locust)會攻擊你的網站。您定義了每個蝗蟲Locust(或測試用戶)的行為,並且實時地從Web UI監視群集過程。這將有助於您在讓真正的用戶進入之前進行測試並識別代碼中的瓶頸。
Locust完全基於事件,因此可以在一台計算機上支持數千個並發用戶。與許多其他基於事件的應用程序相比,它不使用回調。相反,它通過協程(gevent)機制使用輕量級過程。每個蝗蟲蜂擁到你的網站實際上是在自己的進程內運行(或者是greenlet,這是正確的)。這允許您在Python中編寫非常富有表現力的場景,而不會使代碼復雜化。
** gevent是第三方庫,通過greenlet實現協程。greenlet是python的並行處理的一個庫。 python 有一個非常有名的庫叫做 stackless ,用來做並發處理, 主要是弄了個叫做tasklet的微線程的東西, 而greenlet 跟stackless的最大區別是greenlet需要你自己來處理線程切換, 就是說,你需要自己指定現在執行哪個greenlet再執行哪個greenlet。**
環境安裝
Locust支持Python 2.7, 3.4, 3.5, and 3.6的版本,小編的環境是python3.6直接用pip安裝就行
$ pip install locustio
安裝完成后,使用pip查看版本號0.9.0
$ pip show locustio
使用--help查看幫助信息
$ locust --help
快速開始
locust里面請求是基於requests的,每個方法請求和requests差不多,請求參數、方法、響應對象和requests一樣的使用,之前學過requests庫的,這里就非常簡單了
- requests.get 對應client.get
- requests.post 對應client.post
# 保存為demo.py
# coding:utf-8
from locust import HttpLocust,TaskSet,task
class BlogDemo(TaskSet):
'''用戶行為:打開我的博客首頁demo'''
@task(1)
def open_blog(self):
# 定義requests的請求頭
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"}
r = self.client.get("/yoyoketang", headers=header, verify=False)
print(r.status_code)
assert r.status_code == 200
class websitUser(HttpLocust):
task_set = BlogDemo
min_wait = 3000 # 單位毫秒
max_wait = 6000 # 單位毫秒
if __name__ == "__main__":
import os
os.system("locust -f demo.py --host=https://www.cnblogs.com")
代碼注解:
新建一個類BlogDemo(TaskSet),繼承TaskSet,該類下面寫一些准備請求的行為(訪問的接口)
里面的self.client調用get和post方法,跟requests是一樣的
@task裝飾該方法表示為用戶行為。括號里面參數表示該行為挑選執行的權重,數值越大,執行頻率越高,不設置默認是1
WebsiteUser()類用於設置性能測試。
task_set :指向一個定義了的用戶行為類。
min_wait :用戶執行任務之間等待時間的下界,單位:毫秒。
max_wait :用戶執行任務之間等待時間的上界,單位:毫秒。
啟動locust
啟動locust可以直接在pycharm里面執行上面的代碼,運行后編輯器出現兩行
[2018-09-12 23:23:57,500] DESKTOP-HJ487C8/INFO/locust.main: Starting web monitor at *:8089
[2018-09-12 23:23:57,500] DESKTOP-HJ487C8/INFO/locust.main: Starting Locust 0.9.0
也可以通過cmd執行
$ locust -f demo.py --host=https://www.cnblogs.com
- -f 參數是指定運行的腳本
- --host是指定運行項目的host地址,這里用的https://www.cnblogs.com,代碼里面get訪問的是"/yoyoketang",拼接起來就是完整地址了
8089是該服務啟動的端口號。由於是在本機上搭建的locust,所以可以直接在瀏覽器輸入http://localhost:8089/打開,
如果是在其它機器上搭建的locust服務,那就通過http://其它機器IP:8089/打開
- Number of users to simulate 設置虛擬用戶總數
- Hatch rate (users spawned/second) 每秒啟動虛擬用戶數
- 點擊Start swarming 開始運行性能測試
效果展示
設置虛擬用戶數30,每秒啟動5個用戶,點擊Start swarming 開始運行
- Type:請求類型;
- Name:請求路徑;
- requests:當前請求的數量;
- fails:當前請求失敗的數量;
- Median:中間值,單位毫秒,一般服務器響應時間低於該值,而另一半高於該值;
- Average:所有請求的平均響應時間,毫秒;
- Min:請求的最小的服務器響應時間,毫秒;
- Max:請求的最大服務器響應時間,毫秒;
- Content Size:單個請求的大小,單位字節;
- reqs/sec:每秒鍾請求的個數。
點stop可以停止測試
New test可以重新設置用戶數
Charts圖標展示
三個圖標分別是
- 吞吐量/每秒響應事務數(rps)實時統計
- 平均響應時間/平均事務數實時統計
- 虛擬用戶數運行