序言
首先聊一下對于我來說壓力測試的目的:
壓力測試和性能測試不一樣,它是指測試系統(tǒng)的內(nèi)存、CPU、磁盤網(wǎng)絡(luò)IO在接近超負(fù)荷運(yùn)行時所能承受最大并發(fā)量。
當(dāng)然如果是不追求高并發(fā)的情況下,在現(xiàn)在計算機(jī)硬件性能大幅度提高的當(dāng)下,沒有什么問題是加一臺服務(wù)器不能解決的,如果有那就加兩臺ヽ( ̄▽ ̄)?,所以在測試環(huán)境做壓測是為了發(fā)現(xiàn)程序是否有嚴(yán)重的性能問題(比如SQL語句性能很有問題)導(dǎo)致在正常并發(fā)下使正常性能的系統(tǒng)出現(xiàn)內(nèi)存、CPU不足甚至服務(wù)器掛掉等問題
反過來說,我做壓測的目的是為了驗證程序能否承受正常的并發(fā),所以看中的指標(biāo)有:
1.TPS(吞吐量)
2.響應(yīng)時間超時的數(shù)量/請求次數(shù)
3.承受正常的請求數(shù)并發(fā)時,CPU和內(nèi)存的占用*
ab命令
- 安裝Apache,添加 ab命令的環(huán)境變量path
- 命令行使用ab:
ab -c <并發(fā)量> -n <總請求數(shù)> <url>
需要session的網(wǎng)頁可以添加:-H "Cookie: cookie1_name=cookie1_value; cookie2_name=cookie2_value"
jenkins使用
下載war格式的包,使用java命令運(yùn)行,每次啟動都用該命令
java -jar jenkins.war
運(yùn)行完成后,復(fù)制控制臺輸出的口令,打開http://localhost:8080/ ,輸入口令,創(chuàng)建用戶完成安裝
jenkins配置環(huán)境變量:
1、系統(tǒng)設(shè)置中可設(shè)置全局變量
2、使用Envject插件 設(shè)置 job的局部變量: Properties Content 或Properties File Path(讀取配置文件)

這里有個坑:在windows中設(shè)置path=c:\xx\ ,使用雙反斜杠
3、引用環(huán)境變量:
系統(tǒng)命令行使用% %, shell 用$ ; python 用os.getenv("環(huán)境變量名")
ab+jenkins實(shí)踐
這里的實(shí)踐測試的URL是我在自己的VPS(單核CPU和1.5G內(nèi)存)上部署的網(wǎng)站,方便隨時查看系統(tǒng),同時因為很多地方?jīng)]優(yōu)化,能承受的并發(fā)很小,所以看出性能問題來。
50的并發(fā),每個網(wǎng)頁總共請求300次:
網(wǎng)頁1:http://www.valkyrie233.com/
網(wǎng)頁2:http://www.valkyrie233.com/article
1.環(huán)境變量配置:
con=50
req=300
urls=http://www.valkyrie233.com/,http://www.valkyrie233.com/article
cookie=
2.構(gòu)建執(zhí)行的shell:
#!python.exe
import os
urls=str(os.getenv('urls')).split(',')
cookie=os.getenv('cookie')
for url in urls:
shell='ab -c %con% -n %req% '+url
if cookie!=None:
shell+='-H '+str(cookie)
os.system(shell)
3.執(zhí)行構(gòu)建
報告分析
1.jenkins打印輸出:


2.觀察系統(tǒng)性能監(jiān)控,使用htop命令


3、分析問題:
網(wǎng)頁1在CPU超負(fù)荷但內(nèi)存還有空余的情況下,TPS過低,請求響應(yīng)時間過高(超過5S很影響用戶體驗)
網(wǎng)頁2在CPU有空余且內(nèi)存還有空余的情況下,請求響應(yīng)時間超級高,TPS也超級低,但網(wǎng)絡(luò)帶寬又有剩余的。
結(jié)論:網(wǎng)頁1需要優(yōu)化,網(wǎng)頁2性能有嚴(yán)重問題