locustio壓力測試

2022-03-13 14:13:19 字數 3158 閱讀 1975

2023年7月17日 22:19:17 星期五

這裡記錄下學習道路, 防止忘了

作業系統是centos:

首先是linux系統, 裝有python 和 python-devel (否則安裝軟體會提示python.h找不到, gcc error等問題...... )

1

yuminstall -y python

2yum

install -y python-devel

然後安裝pip

執行python 命令執行該檔案: 

python get-pip.py

安裝 greenlet (協程/微執行緒)

pip install greenlet

安裝 gevent (網路io用)

pip install gevent

安裝locustio: 

pip install locustio

進行壓測

locustio有自己的web頁面, 上邊的命令意思是: 在瀏覽器裡開啟 顯示locustio的web控制頁面, 需要被壓測的**網域名稱和url放在test.py裡

command "/usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip-build-6zehzn/greenlet/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-des44u-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-6zehzn/greenlet

概念理解(翻譯):

1. 超級類是 locust 類,它的每乙個例項代表了乙個使用者, 守護程式會為每乙個模擬使用者生成乙個例項

2. httplocust 繼承了locust 類, 新增了可以傳送http請求的功能

3. locust 有乙個屬性(成員變數)是 task_set , 它可以定義使用者的行為, 就是訪問哪些url, post還是get, 每個連線佔總訪問量比是多少

這個task_set 是類taskset(或其子類)的乙個例項, 上邊說的各種行為就是在這個類裡邊定義的

4. locsut類:

屬性: min_wait/max_wait  模擬使用者有在上邊說的類中定義了好多任務/行為, 每個任務/行為間隔多久執行一次, 單位是毫秒, 預設1000, 也即隔一秒種後執行下乙個任務

屬性: weight 權重: 模擬時, 同一段時間, 手機使用者的訪問量要比pc的訪問量大, 那麼對應的locust(或其子類)的weight值就大小不一

屬性: host 就是需要被壓測的**的網域名稱(或網域名稱字首), 如果啟動服務時沒有通過引數-host來指定網域名稱, 那麼就用使用該host屬性指定的值

taskset類:

1. 推薦的是, 在taskset類(或子類)中通過在行為(**函式)前加@task(weight)描述符來指定某乙個行為被執行的頻率

2. 或者先定義行為(**函式), 然後通過屬性tasks來指定每乙個行為被執行的頻率 tasks=[fun1, fun2....] 或者 tasks=

3. 不管怎樣定義, 裡邊的行為或函式是被隨機呼叫/執行的, 只是根據weight的不通, 隨機到的頻率不通而已

4. 而且, 行為/任務可以巢狀執行, 先執行task1(也就是 fun1 下同), 然後執行task2 ..... 這樣會更真實的模擬,

其寫法就是, 將這些有關聯任務定義/封裝到乙個taskset子類中, 然後通過上邊介紹的 tasks屬性tasks=, 在另乙個taskset子類中去關聯該類以達到巢狀的目的

5. 在執行子任務時, 通過 self.interrupt() 來終止子任務的執行, 來回到父任務類中執行, 否則子任務會一直執行

6. 成員函式, on_start(), 如果定義的話, 就會在開始的時候執行

httplocust類

1. 他可以傳送http請求, 他有乙個屬性叫client(例項化的時候自動生成), 儲存httpsession類的例項(httpsession類在例項化locust的時候自動建立), 用來儲存請求session

2. taskset類裡也有屬性client: self.client.get()或者self.client.post(), 這個client內部就是httplocust裡的client

3. 請求返回乙個物件, 他有兩個成員, response.status_code

和 response.content

4. 如果因連線失敗, 超時等等原因造成請求失敗, 不會發出異常, 而是將上邊的content置為空, status_code 置為0

5. 可以對返回content內容自定義處理, 因為有的時候返回404是你希望得到的

1 with client.get("

/does_not_exist/

", catch_response=true) as response:

2if response.status_code == 404:

3 response.success()

6.對**來說, 乙個url的引數是固定的, 但是引數值是不定的, 也可以處理

1

#statistics for these requests will be grouped under: /blog/?id=[id]

2for i in range(10):

3 client.get("

/blog?id=%i

" % i, name="

/blog?id=[id]

")

其他, locust還有很多事件hook可以擴充套件開發, 有需要的可以去看官方文件, 內容沒多少

finger php 框架

ab壓力測試 mysql MySQL壓力測試

1.什麼是壓力測試 壓力測試是針對系統的一種效能測試,但是測試資料與業務邏輯無關,更加簡單直接的測試讀寫效能 2.壓力測試的指標 qps 每秒鐘處理完請求的次數 tps 每秒鐘處理完的事務次數 併發量 系統能同時處理的請求數 3.壓力測試工具 mysqlslap sysbench jmeter 長時...

mysql 壓力測試 golang 壓力測試

1.壓力測試 1.1.1.go怎麼寫測試用例 開發程式其中很重要的一點是測試,我們如何保證 的質量,如何保證每個函式是可執行,執行結果是正確的,又如何保證寫出來的 效能是好的,我們知道單元測試的重點在於發現程式設計或實現的邏輯錯誤,使問題及早暴露,便於問題的定位解決,而效能測試的重點在於發現程式設計...

壓力測試 測試概要

壓力測試分為如下大概 個人如此 1 確定存量資料的規模 使用者一般會要求製造出3 5年的存量資料 2 確定需要進行壓力測試的業務 一般是使用者使用最頻繁,或者業務操作複雜的業務 3 確定操作使用者的的數量 各類操作使用者的比例 4 峰值業務量的要求 一般是1個小時內最多要處理的筆數 5 對實時業務響...