2023年7月17日 22:19:17 星期五
這裡記錄下學習道路, 防止忘了
作業系統是centos:
首先是linux系統, 裝有python 和 python-devel (否則安裝軟體會提示python.h找不到, gcc error等問題...... )
1yuminstall -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 對實時業務響...