一、環(huán)境配置
python 3.7
Locust 1.1.1
MacOS
二、為什么需要使用locust
公司面對大量用戶時,有時候需要對某些單接口/組合接口壓測;但是單臺機器的性能又無法滿足大并發(fā)量,怎么辦?一開始考慮用非界面版本的jmeter去執(zhí)行任務,但是macOS對jmeter5.3不兼容(好卡,不知道是不是個人電腦問題),最后決定使用Python的高并發(fā)框架Locust。
下面說說當前接口并發(fā)工具中,各自的優(yōu)缺點:

image.png
**圖片來自網(wǎng)絡
三、基本使用
from locust import HttpUser, task
class Quickstart(HttpUser):
min_wait = 100 # 最小等待時間(ms),模擬用戶在執(zhí)行每個任務之間等待的最小時間
max_wait = 500 # 最大等待時長(ms),模擬用戶在執(zhí)行每個任務之間等待的最大時長
host = 'https://baidu.com' # 訪問的域名
def on_start(self):
#開始任務
print("start working")
# 任務target,用@task標記
@task
def mytask(self):
self.client.get('/')
參數(shù)解釋:
1.使用@task裝飾的方法為一個事務,方法的參數(shù)@task(2)用于指定該行為的執(zhí)行權(quán)重,參數(shù)越大每次被用戶執(zhí)行的概率越高,默認為1(即task(2)是@task(1)執(zhí)行次數(shù)的2倍)
2.on_start():每個用戶執(zhí)行測試事務之前執(zhí)行一次,用于做初始化的工作
四、啟動Locust
命令窗口執(zhí)行:locust -f 待測腳本
瀏覽器打開:locust:8089 # 8089是默認端口

image.png
- Number of users to simulate :設置模擬用戶數(shù)
- Hatch rate(users spawned/second) :每秒產(chǎn)生(啟動)的虛擬用戶數(shù)
- Locust是逐漸提高并發(fā)數(shù)目,來作持續(xù)性壓測的工具(即圖中的每秒增加1個用戶,增加9次后達10個用戶并發(fā),并以10個用戶持續(xù)壓測);點擊Stop來停止運行;點擊New test修改并發(fā)數(shù)
五、分布式壓測初嘗
執(zhí)行方法比較簡單,但務必注意??Locust的版本主、從機是否一致
- 主機(控制機),執(zhí)行命令
locust -f 待測腳本 --master - 從機(負載器),執(zhí)行命令
locust -f 待測腳本 --worker --master-host=主機IP地址 - 主機打開Locust網(wǎng)站,會發(fā)現(xiàn)右上角會多了個worker的字段,點擊就可以查看當前從機的信息