一、思考❓❔
1.什么是性能自動化測試?
- 性能
- 系統負載能力
- 超負荷運行下的穩定性
- 系統瓶頸
- 自動化測試
- 使用程序代替手工
- 提升測試效率
- 性能自動化
- 使用代碼模擬大批量用戶
- 讓用戶並發請求
- 多頁面多用戶並發請求
- 采集參數,統計系統負載能力
- 生成報告
2.Python中的性能自動化測試庫?
locust庫
- 使用Python
- 使用代碼來創建批量用戶
- 分布式
- 可以在多台服務器上,進行分布式性能測試
- 可伸縮性強
- 穩定、應用廣泛
- 經得住各種場景下的考驗
- 基於web ui界面展示測試詳情
- 能測任何系統
二、基礎操作🔨🔨
1.安裝locust
- 使用官方pypi源來安裝
pip install locustio
- 使用豆瓣pypi源來安裝(推薦)
pip install -i https://pypi.douban.com/simple locustio
安裝成功之后,在cmd控制台將會新增一條命令,可輸入如下命令查看:
locust --help
2.基本用法
-
在項目根目錄下創建locustfile.py文件
from locust import Locust, TaskSet, task class MyTasks(TaskSet): """ 創建測試任務類,需要繼承TaskSet 可以添加多個測試任務 """ # 每個測試任務,往往會以實例方法的形式來呈現 # 同時需要使用task裝飾器來裝飾測試任務 @task def one_task(self): print("執行一個偉大的測試任務!") class RunTasks(Locust): """ 創建運行測試類,需要繼承Locust父類 """ task_set = MyTasks # 指定測試任務類,使用task_set覆蓋父類的類屬性 min_wait = 2000 # 指定啟動任務間隔的時間范圍(單位毫秒):2~5秒之間 max_wait = 5000 # 使用min_wait、max_wait覆蓋父類的類屬性
-
執行性能測試
# 打開Pycharm Terminal控制台 # 運行如下命令: locust
運行之后,控制台會在本地監聽一個端口
a. 程序文件要命名為 locustfile.py才行
b. 假如命名為one_example.py,則需要這樣運行
locust -f one_example.py
-
在瀏覽器打開UI設置界面
- 默認使用localhost:8089打開
三、綜合案例演練🔨🔨
1.編寫自動化測試腳本
- 在項目根目錄下創建test_load.py文件
from locust import HttpLocust, TaskSet, task
class AdminLoadTest(TaskSet):
"""
創建后台管理站點壓測類,需要繼承TaskSet
可以添加多個測試任務
"""
def login(self):
"""
登錄實例方法
:return:
"""
self.client.post("http://localhost:8088/users/login/",
{"user_account": "admin", "password": "123456"})
def logout(self):
"""
登出實例方法
:return:
"""
self.client.get("http://localhost:8088/users/logout/")
def on_start(self):
"""
當任何一個task調度執行之前,
on_start實例方法會被調用
先登錄
:return:
"""
self.login()
def on_stop(self):
"""
當任何一個task調度執行之后,
on_stop實例方法會被調用
后登出
:return:
"""
self.logout()
@task
def admin_index(self):
"""
對后台主頁進行壓測
:return:
"""
self.client.get("http://localhost:8088/admin/")
class RunLoadTests(HttpLocust):
"""
創建運行壓測類
"""
task_set = AdminLoadTest
2.使用命令行運行
- 打開Pycharm Terminal控制台,運行如下命令:
注意:--host參數指定http主機地址,-f參數指定壓測程序文件名
3.打開web ui界面進行配置
設置並發用戶數為10,每5秒創建一個用戶
壓測過程截圖
美輪美奐的壓測報告
壓測失敗詳情
下載壓測統計數據
下載的壓測統計數據csv文件
六、總結💡💡
- locust做壓測功能極其強大
- 支持分布式部署
- 提供的接口簡單
- 壓測代碼非常容易編寫
- 提供UI界面來配置
- 美觀、詳細的圖表統計