locust安裝
通過pip 安裝locust
pip install locustio
需要預先安裝python3和pip,這次在安裝環境時遇到一些坑,環境中原本使用的python2.6,需要重新安裝python3環境,這時候可以安裝一個虛擬環境
注:支持的python版本:2.7、3.4、3.5、3.6及以上
虛擬環境安裝
- 命令安裝了python的虛擬環境
pip3 install virtualenv
- 創建虛擬機環境
virtualenv /venv
- 激活虛擬環境
source /venv/bin/activate
進入了一個全新的python3的環境,你可以安裝獨立的python依賴了,安裝完成之後可以啓動程序運行
- 退出虛擬環境
deactivate
腳本示例
locust的腳本里,模擬負載的請求和python的requests庫使用方法基本一樣,示例如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: lluozh
# @Date : 2020/4/16
# @Desc :
from locust import HttpLocust,TaskSet,task,between
class MyBlogs(TaskSet):
@task(1)
def get_blog(self):
header = {
}
body = {
"roomId": "158589982254376"
}
req = self.client.get("/api/v1/model", headers=header, params=body, verify=False)
# print(req.text)
# if req.status_code == 200:
# print("success")
# else:
# print("fails")
class websitUser(HttpLocust):
task_set = MyBlogs
# 設置用戶執行任務之間等待的上下限,單位秒
wait_time = between(3, 6)
# # 等同於上面wait_time,單位毫秒
# min_wait = 3000
# max_wait = 6000
host = "http://benchmark-server.lluozh.com"
if __name__ == "__main__":
import os
# os.system("locust -f locusttest.py --master")
os.system("locust -f locusttest.py --slave --master-host=10.200.0.219")
腳本說明:
- 新建一個類MyBlogs(TaskSet),繼承TaskSet,該類下面寫需要請求的接口以及相關信息
- self.client調用get和post方法,和requests一樣
- @task裝飾該方法表示爲用戶行爲,括號裏面參數表示該行爲的執行權重:數值越大,執行頻率越高,不設置默認是1
WebsiteUser()類用於設置生成負載的基本屬性:
- task_set:指向一個TaskSet類,TaskSet類定義了用戶的任務信息,該屬性爲必填
- min_wait:模擬負載的任務之間執行時的最小等待時間,單位爲毫秒
- max_wait:模擬負載的任務之間執行時的最大等待時間,單位爲毫秒
- host:被測系統的host,當在終端中啓動locust時沒有指定–host參數時纔會用到
- weight:同時運行多個Locust類時會用到,用於控制不同類型任務的執行權重。、
默認情況下,時間是在min_wait和max_wait之間隨機選擇,但是可以通過將wait_function設置爲任意函數來使用任何用戶定義的時間分佈
啓動Locust
1. 單機啓動
locust -f testscript/locusttest.py --host=http://benchmark-server.lluozh.com
2. 分佈式啓動
master:
locust -f testscript/locusttest.py --master --host=http://benchmark-server.lluozh.com
slave:
locust -f testscript/locusttest.py --slave --master-host=10.200.0.2190 --host=http://benchmark-server.lluozh.com
注:若在阿里雲環境時,需要使用內部ip
成功啓動提示
[2020-04-18 20:01:22,727] IMYalost/INFO/locust.main: Starting web monitor at *:8089
[2020-04-18 20:01:22,729] IMYalost/INFO/locust.main: Starting Locust 0.8
8089是該服務啓動的端口號,如果是本地啓動,可以直接在瀏覽器輸入http://localhost:8089打開UI界面,如果是其他機器搭建locust服務,則輸入該機器的IP+端口即可
運行邏輯
測試開始後,每個虛擬用戶(Locust實例)的運行邏輯都會遵循如下規律:
- 先執行WebsiteTasks中的on_start(只執行一次),作爲初始化
- 從WebsiteTasks中隨機挑選(如果定義了任務間的權重關係,那麼就是按照權重關係隨機挑選)一個任務執行
- 根據Locust類中min_wait和max_wait定義的間隔時間範圍(如果TaskSet類中也定義了min_wait或者max_wait,以TaskSet中的優先),在時間範圍中隨機取一個值,休眠等待
重複2~3步驟,直至測試任務終止。