本文主要針對服務(wù)端衍慎,web系統(tǒng)的性能測試酪耕。
性能測試
根據(jù)不同的測試目的孽惰,性能測試具體細分為多種類型
- 基準(zhǔn)測試 : 模擬單個用戶訪問系統(tǒng)的場景膳凝,考察系統(tǒng)性能指標(biāo)碑隆,關(guān)注系統(tǒng)功能是否正常,為其他壓測提供基準(zhǔn)參考蹬音。
- 負載測試: 模擬系統(tǒng)在正常壓力下(預(yù)期壓力或者系統(tǒng)達到臨界)的負載能力上煤,判斷是否滿足業(yè)務(wù)需求。
- 壓力測試 : 不斷提升系統(tǒng)負載知道達到性能拐點著淆,尋找系統(tǒng)最大負載能力劫狠,性能瓶頸等。
- 穩(wěn)定性測試:在一定壓力下持續(xù)運行永部,關(guān)注系統(tǒng)長期一定負載下是否能穩(wěn)定服務(wù)独泞。
以此獲得系統(tǒng)在多少并發(fā)用戶,請求數(shù)的情況下苔埋,平均響應(yīng)時間懦砂,成功失敗率等數(shù)據(jù)。
在定位系統(tǒng)瓶頸時组橄,考慮被測系統(tǒng) cpu荞膘,網(wǎng)絡(luò),磁盤玉工,緩存和數(shù)據(jù)庫情況羽资,同時也要關(guān)注測試機器的情況。
這里介紹一種開源性能壓測軟件 locust瓮栗,純 python 實現(xiàn)削罩,能實現(xiàn)模擬用戶操作場景進行加壓,支持單進程和分布式多進程费奸,有一個簡單 web ui 查看壓測過程弥激,而且開源python,方便自己自定義hack愿阐。
安裝
pip install locustio
locust --help
pip install pyzmq ## 多進程機器部署需要安裝
公司網(wǎng)絡(luò)限制手動裝依賴真是丟.....
注意 : 設(shè)置系統(tǒng)文件描述符最大限制 ulimit -n xx
,
每一個http 連接會打開一個文件描述符微服,確保系統(tǒng)設(shè)置滿足測試需求。
測試
參看官方文檔缨历,簡單地寫一個測試?yán)右栽蹋瑢σ粋€ oms 進行訪問:
#!/usr/bin/env python
# coding=utf-8
import json
from locust import HttpLocust, TaskSet, task
class WebsiteTasks(TaskSet):
def on_start(self):
response = self.client.get("/v1/games?developer=orientlu", catch_response = True)
#print dir(response)
result = json.loads(response.text)
self.gameid = result[0]['gameid']
@task(2)
def get_unit(self):
self.client.get("/v1/games?developer=orientlu&&gameid=%s"%(self.gameid))
@task(1)
def get_game(self):
self.client.get("/v1/games?developer=orientlu")
class WebsiteUser(HttpLocust):
task_set = WebsiteTasks // 指向TasSet類,定義測試行為
host= "http://10.xx.xx.xxx:8099/"
min_wait = 1000
max_wait = 5000
例子中辛孵, WebsiteTasks
繼承 TaskSet
丛肮,定義了測試行為,定義on_start
方法魄缚,locust 在模擬用戶啟動時調(diào)用執(zhí)行一次宝与,諸如執(zhí)行登錄操作等焚廊;
定義執(zhí)行任務(wù),通過@task
修飾习劫,后續(xù)跟的數(shù)字為調(diào)用比重咆瘟,默認(rèn)為1,虛擬用戶運行期間诽里,按權(quán)重隨機挑選任務(wù)執(zhí)行袒餐,然后根據(jù)設(shè)置的min_wait/max_wait 區(qū)間隨機休眠等待,繼續(xù)執(zhí)行任務(wù)直到終止谤狡。
單進程運行
為了方便調(diào)試灸眼,先在 no-web 模式下執(zhí)行,看看腳本是否正常豌汇,參數(shù)信息通過locust -h
查看幢炸,可以直接通過 print 打印調(diào)試泄隔。
$ locust -f locust_test.py --no-web -c 1 -r 1 -t 10
確認(rèn)腳本沒有問題后拒贱,通過web模式執(zhí)行測試,
$ $ locust -f locust_test.py -P 8899
啟動web 后臺后登錄web佛嬉,設(shè)置模擬用戶并發(fā)數(shù)和請求頻率逻澳,執(zhí)行測試并查看測試情況
后臺可見系統(tǒng) http 連接數(shù)正在 rangup 中
多進程/分布式運行
執(zhí)行壓力測試時,可能單個進程或者一臺機器無法產(chǎn)生足夠的壓力暖呕,此時需要多進程或者在多臺機器上輸出壓力斜做。不管是多進程模式還是多機模式,都需要先啟動一個master湾揽,然后在啟動多個slaver瓤逼。
啟動 master, master 不輸出壓力,需要指定 --master
, web 訪問端口等參數(shù)库物。
$ locust -f ./locust_test.py --master -P 8899
啟動slaver霸旗,同一臺機器執(zhí)行多次啟動多個進程,多機分布式通過在不同機器上執(zhí)行命令戚揭,需要指定 --slave
和 master 的 ip诱告。
$ locust -f ./locust_test.py --slave --master-host=127.0.0.1
登錄 web 后可以查看當(dāng)前啟動的 slaver 數(shù)目。
基本 locust 上手測試就是如此了民晒。
最后精居,重點是,他開源啊潜必。