大話JMeter4|不同的并發(fā)數(shù)可以自動(dòng)化做壓測(cè)嗎?

上節(jié)課愛畫漫畫的小哥哥用漫畫形式向大家展示了JMeter的進(jìn)階用法:如何搭建InfluxDB,使用更炫酷的Grafana。
看到很多小伙伴覺得看的不過(guò)癮,在強(qiáng)烈的催促下,小哥哥的新文章又出來(lái)了。這次小哥哥又給我們帶來(lái)怎樣的驚喜呢?接著看下去吧!
如果手動(dòng)逐步加壓,不僅需要人肉改并發(fā)數(shù),還需要花大量時(shí)間等待完成,可以用一個(gè)字概括:
完成后看壓測(cè)監(jiān)控記錄,或者坐收?qǐng)?bào)告是最完美的解決方案。
示例:
jmeter -n -t testplan.jmx -l test.jtl
示例含義:
則表示以命令行模式運(yùn)行testplan.jmx文件,輸出的日志文件為test.jtl
具體的參數(shù)信息如下:
-h 幫助 → 打印出有用的信息并退出
-n 非 GUI 模式 → 在非 GUI 模式下運(yùn)行 JMeter
-t 測(cè)試文件 → 要運(yùn)行的 JMeter 測(cè)試腳本文件
-l 日志文件 → 記錄結(jié)果的文件
-r 遠(yuǎn)程執(zhí)行 → 在Jmter.properties文件中指定的所有遠(yuǎn)程服務(wù)器
-H 代理主機(jī) → 設(shè)置 JMeter 使用的代理主機(jī)
-P 代理端口 → 設(shè)置 JMeter 使用的代理主機(jī)的端口號(hào)
我們?cè)O(shè)置并錄制好腳本,此時(shí)可以選擇保存。然后我們就得到了一份jmx文件,于是,就可以用上面的命令加載這個(gè)文件實(shí)現(xiàn)無(wú)UI運(yùn)行啦!
在shell命令中,我們使用nohup來(lái)運(yùn)行jmeter:
nohup是no hang up 的縮寫,就是不掛斷的意思。
如果你正在運(yùn)行一個(gè)進(jìn)程,而且你覺得在退出帳戶時(shí)該進(jìn)程還不會(huì)結(jié)束,那么可以使用nohup命令。
在缺省情況下該作業(yè)的所有輸出都被重定向到一個(gè)名為nohup.out的文件中。& 指在后臺(tái)運(yùn)行
&才是后臺(tái)運(yùn)行,那么,我們可以巧妙的把他們結(jié)合起來(lái)用就是nohup COMMAND &,這樣就能使命令永久的在后臺(tái)執(zhí)行。
是的,小兔說(shuō)的沒(méi)錯(cuò),就像下面的圖片一樣,我們?cè)趈meter的UI界面中配置的參數(shù)信息全在jmx文件中,比如并發(fā)數(shù)為:
11
要解釋一段代碼著實(shí)不容易,這里請(qǐng)?jiān)试S用文字來(lái)表述。下面是shell代碼,將會(huì)挑重點(diǎn)來(lái)解釋,如果對(duì)語(yǔ)法生疏,可以自行網(wǎng)上搜索。
github項(xiàng)目地址:
https://github.com/princeqjzh/iJmeter/blob/master/automation/auto_stress_test.sh 3
運(yùn)行代碼前需要將jmeter目錄設(shè)置為環(huán)境變量,shell才可以知道所運(yùn)行的jmeter在哪個(gè)位置。
首先,用export定義幾個(gè)變量,這些變量后面會(huì)用到,其中jmx_template_filename變量存放的是jmx的臨時(shí)名子,實(shí)際工作中要設(shè)置多個(gè)并發(fā)數(shù),比如10,20,30,40,每一個(gè)并發(fā)數(shù)都要有一個(gè)文件與之對(duì)應(yīng),稱之為臨時(shí)文件,這四個(gè)jmx文件的并發(fā)數(shù)分別為:
10,20,30,40。
我們接著往下看:
遇到了cat命令和killJMeter函數(shù),后面再來(lái)講這兩部分,繼續(xù)往下看。
是并發(fā)數(shù),代碼期望有五個(gè)并發(fā)數(shù),分別為:
10,20,30,40,50。下一步至關(guān)重要,請(qǐng)集中注意!
這就是全部代碼,你可以參考下面的解釋:
我們對(duì)thread_number_array數(shù)組依次遍歷,do和done之間的內(nèi)容就是每次遍歷要執(zhí)行的操作。
這是兩個(gè)變量,jmx_filename就是臨時(shí)jmx文件的名子,${}代表變量,比如${jmx_template}指我們要用jmx_template這個(gè)變量,變量名類似PreClassMenu_auto_10.jmx,PreClassMenu_auto_20.jmx,PreClassMenu_auto_30.jmx等等。
用于清除閑雜文件,如果有當(dāng)前目錄文件與jmx_filename和jtl_filename重名,就刪除它。
是復(fù)制命令,將模板中的內(nèi)容復(fù)制到臨時(shí)文件中,也可以理解為利用模板建立臨時(shí)文件。
用來(lái)判斷是不是mac電腦,mac電腦上輸入uname就能顯示Darwin,如果不顯示則為linux,之所以要判斷,是因?yàn)楹竺娴膕ed命令在mac與linux上稍微有點(diǎn)不同。
這是我們的重頭戲,用來(lái)正則替換,我們用變量num來(lái)替換臨時(shí)文件中的thread_num,它是什么?
請(qǐng)看下面的截圖:
哇!把并發(fā)數(shù)用thread_num替換了,之所以這么做是為了讓正則更方便的找到它,試想一下,如果我使用數(shù)字1或者數(shù)字11,正則會(huì)很難定位到它。
用正則將num替換上去,也就實(shí)現(xiàn)了用命令修改臨時(shí)文件的并發(fā)數(shù),多么偉大的操作!
這個(gè)命令前面介紹過(guò),就不多說(shuō)了,它無(wú)UI運(yùn)行jmeter,在缺省情況下該作業(yè)的所有輸出都被重定向到一個(gè)名為nohup.out的文件中,代碼最開始的cat是為了清空nohup.out文件。換句話說(shuō),每次運(yùn)行shell腳本,都會(huì)清空nohup.out記錄文件,相當(dāng)于清空日志。
65秒后殺掉壓測(cè)進(jìn)程,因?yàn)橛袝r(shí)候JMeter并不能正常退出!
KillJMeter是最開始時(shí)定義的函數(shù),它通過(guò)grep和awk篩選出進(jìn)程并殺掉,不過(guò)多講解了。