每天15分鐘JMeter入門篇(二):使用JMeter實(shí)現(xiàn)并發(fā)測(cè)試

文章已遷移到CSDN:博客地址:https://blog.csdn.net/xiaomacaicai/category_11196823.html
文章歡迎轉(zhuǎn)載,還請(qǐng)注明出處http://www.reibang.com/nb/50563030户辫,十分感謝

通過(guò)閱讀以下內(nèi)容拔鹰,你可以:

  1. 使用JMeter實(shí)現(xiàn)一個(gè)真實(shí)的并發(fā)腳本爪瓜;
  2. 了解JMeter并發(fā)中的基本設(shè)置;
  3. 了解JMeter中的事物控制器和聚合報(bào)告

在這篇文章的開(kāi)始我們要先統(tǒng)一一個(gè)并發(fā)的概念,就是絕對(duì)并發(fā)和相對(duì)并發(fā)溢吻。純粹意義上的絕對(duì)并發(fā)是不存在或者很難實(shí)現(xiàn)的,性能測(cè)試?yán)锏慕^對(duì)并發(fā)果元,是指加了集合點(diǎn)的并發(fā)促王,也就是集合點(diǎn)上的請(qǐng)求在【極短】的時(shí)間內(nèi)發(fā)送給服務(wù)器;相對(duì)并發(fā)就是多個(gè)線程不停的執(zhí)行業(yè)務(wù)腳本而晒,并不強(qiáng)調(diào)集合點(diǎn)蝇狼,是否并發(fā)由線程的自由碰撞產(chǎn)生。對(duì)于這部分內(nèi)容不同的公司倡怎、不同的文章迅耘、不同的作者都有不同的表述,這里不做概念上的爭(zhēng)論监署,我只希望大家能明白颤专,這篇文章里沒(méi)有集合點(diǎn),所以我們都是所謂的相對(duì)并發(fā)钠乏,大家理解一致就好栖秕。

讓我們開(kāi)始吧

首先回憶一下我們上一次實(shí)現(xiàn)的那個(gè)JMeter測(cè)試腳本,你應(yīng)該已經(jīng)有了一個(gè)可用的JMeter環(huán)境缓熟,并且具備了初步的手寫代碼的能力累魔。在介紹并發(fā)測(cè)試的時(shí)候摔笤,我們?nèi)匀皇褂檬謱懩_本的方式。不過(guò)一定要知道垦写,JMeter做性能測(cè)試的時(shí)候吕世,腳本生成效率最高的方式是通過(guò)代理錄制的方式。這個(gè)以后會(huì)介紹梯投。這里我們重點(diǎn)關(guān)注JMeter如何實(shí)現(xiàn)并發(fā)測(cè)試命辖。

構(gòu)建并發(fā)測(cè)試的腳本

首先把上次的腳本翻出來(lái),它是用簡(jiǎn)書(shū)的首頁(yè)作為目標(biāo)系統(tǒng)的分蓖,我們?cè)僭黾右粋€(gè)線程:進(jìn)入IT技術(shù)尔艇,增加后類似以下這個(gè)樣子


script_1.png

現(xiàn)在這個(gè)性能測(cè)試腳本,有一個(gè)測(cè)試場(chǎng)景(打開(kāi)首頁(yè)加載測(cè)試)么鹤,這個(gè)場(chǎng)景下有兩個(gè)測(cè)試用例分別是打開(kāi)首頁(yè)和進(jìn)入IT技術(shù)终娃。
我們先點(diǎn)擊“首頁(yè)加載測(cè)試”,右側(cè)顯示線程組設(shè)置界面:


sciprt_2.png

這個(gè)界面里是并發(fā)測(cè)試的所有設(shè)置選項(xiàng)蒸甜,都需要了解并且熟練掌握棠耕,你需要知道:它是什么、它是干什么的柠新、它怎么用窍荧。這個(gè)階段如果有概念弄不明白,后面的性能測(cè)試場(chǎng)景就會(huì)有卡殼的地方恨憎。
  • 【名稱】:當(dāng)前測(cè)試線程組的名稱蕊退,建議寫成有一定業(yè)務(wù)意義的場(chǎng)景名稱,例如用戶注冊(cè)并發(fā)場(chǎng)景憔恳、用戶登錄并發(fā)場(chǎng)景瓤荔、訂單查詢場(chǎng)景等,方便管理和使用
  • 【注釋】 線程組的說(shuō)明信息喇嘱,寫在這里的任何東西都不會(huì)影響腳本的執(zhí)行
  • 【在取樣器錯(cuò)誤后要執(zhí)行的動(dòng)作】
    繼續(xù):線程組下的多個(gè)線程(例如“打開(kāi)簡(jiǎn)書(shū)首頁(yè)”和"進(jìn)入簡(jiǎn)書(shū)-IT技術(shù)"線程)茉贡,如果失敗塞栅,則其他的線程會(huì)繼續(xù)執(zhí)行者铜。設(shè)置繼續(xù)就可以滿足大部分的性能測(cè)試場(chǎng)景
    啟動(dòng)下一進(jìn)程循環(huán):如果執(zhí)行過(guò)程中線程出現(xiàn)失敗,則整個(gè)線程組下剩余的線程不再執(zhí)行放椰,重新回到線程組的第一個(gè)線程開(kāi)始從頭執(zhí)行作烟。最常見(jiàn)的如提交一篇文章、瀏覽文章砾医、刪除文章拿撩,如果提交文章都失敗了,后面的線程就不要再執(zhí)行了如蚜,執(zhí)行了也是增加異常率
    停止線程: 如果線程組下的線程出現(xiàn)錯(cuò)誤压恒,則其他線程全部停止影暴。也就是【當(dāng)前】線程組就涼涼了。如果你的測(cè)試計(jì)劃下有多個(gè)線程組探赫,其他線程組不受影響型宙。勾選這個(gè)選項(xiàng)很容易導(dǎo)致負(fù)載降低。目前還沒(méi)有碰到需要停止線程的場(chǎng)景
    停止測(cè)試 : 當(dāng)有線程出現(xiàn)錯(cuò)誤時(shí)伦吠,【所有】線程組及正在執(zhí)行的線程在運(yùn)行完畢后妆兑,整個(gè)測(cè)試停止。也就是任意一個(gè)線程出問(wèn)題后毛仪,其他線程在執(zhí)行完畢后整個(gè)測(cè)試涼涼
    立即停止測(cè)試: 有線程出現(xiàn)錯(cuò)誤搁嗓,不管有沒(méi)有正在執(zhí)行的線程,即刻停止整個(gè)測(cè)試箱靴。
    在我所做過(guò)的性能測(cè)試中腺逛,90%以上的場(chǎng)景都是“繼續(xù)”,其他四個(gè)選項(xiàng)只有在腳本的調(diào)試階段和http接口的自動(dòng)化測(cè)試中偶爾用到衡怀。是的屉来,你沒(méi)看錯(cuò),用JMeter實(shí)現(xiàn)的http接口功能自動(dòng)化測(cè)試狈癞。這部分內(nèi)容在這個(gè)系列里不詳細(xì)展開(kāi)茄靠。
  • 【線程數(shù)】 你可以理解他就是并發(fā)數(shù),你設(shè)置了10個(gè)線程蝶桶,就相當(dāng)于有10個(gè)終端在同時(shí)執(zhí)行你的腳本慨绳,也就是10個(gè)并發(fā)。有的文章只管集合點(diǎn)叫并發(fā)真竖,沒(méi)有集合點(diǎn)的叫相對(duì)并發(fā)脐雪,概念不糾結(jié),事兒都一樣的事兒恢共,就是由這么多的虛擬用戶同時(shí)訪問(wèn)系統(tǒng)战秋。
  • 【Ramp-Up時(shí)間(秒)】:線程從開(kāi)始運(yùn)行到完成加載的時(shí)間,例如100個(gè)線程你設(shè)置這個(gè)值為10秒讨韭,那么JMeter就會(huì)在10秒內(nèi)完成100個(gè)線程的加載脂信,也就是每秒加載10個(gè);設(shè)置為0是所有的線程立即啟動(dòng)透硝。在實(shí)際的壓測(cè)中狰闪,100及以上的線程不建議設(shè)置立即啟動(dòng),瞬發(fā)壓力會(huì)影響性能測(cè)試的結(jié)果濒生,例如你設(shè)置300線程立即執(zhí)行埋泵,有可能一啟動(dòng)就先把壓測(cè)機(jī)搞阻塞了。另一個(gè)應(yīng)用場(chǎng)景是加載時(shí)間足夠長(zhǎng),可以實(shí)現(xiàn)加載10個(gè)線程運(yùn)行10分鐘再加載10個(gè)線程運(yùn)行10分鐘丽声,這種就是階梯式加壓礁蔗。
  • 【循環(huán)次數(shù)】 勾選”永遠(yuǎn)“,則線程組一直循環(huán)執(zhí)行雁社,取消勾選則可以在后面輸入循環(huán)次數(shù)瘦麸。在實(shí)際的壓測(cè)中選擇”永遠(yuǎn)“,然后配合下面調(diào)度器中的”持續(xù)時(shí)間“歧胁,就可以實(shí)現(xiàn)測(cè)試場(chǎng)景運(yùn)行時(shí)間的控制
  • 【Same user on each iteration】 :新版本JMeter增加滋饲,老的5.1.1和5.2.1沒(méi)有。在每次的迭代循環(huán)中使用相同的用戶名喊巍,如果是多用戶并發(fā)測(cè)試時(shí)這個(gè)選項(xiàng)一定不要勾選屠缭。
  • 【延遲創(chuàng)建線程直到需要】:不勾選時(shí),JMeter會(huì)在測(cè)試開(kāi)始時(shí)立即創(chuàng)建所有的線程崭参,有時(shí)這會(huì)導(dǎo)致在啟動(dòng)測(cè)試時(shí)測(cè)試機(jī)的CPU直接飆到100%呵曹,影響后續(xù)測(cè)試的執(zhí)行,如果勾選何暮,則JMeter會(huì)在需要的時(shí)候分配線程奄喂,至于什么是需要的時(shí)候,這個(gè)官方文檔我也沒(méi)看明白海洼,暫時(shí)不討論跨新,以免誤導(dǎo)大家。實(shí)際的壓測(cè)中會(huì)根據(jù)效果調(diào)整坏逢,如果CPU沒(méi)有瞬時(shí)飆升域帐,這個(gè)復(fù)選框不勾選也可以。
  • 【調(diào)度器】
    勾選調(diào)度器復(fù)選框后是整,持續(xù)時(shí)間和啟動(dòng)延遲可選肖揣,持續(xù)時(shí)間就是整個(gè)測(cè)試計(jì)劃的持續(xù)運(yùn)行時(shí)間,就算你設(shè)置了線程組永遠(yuǎn)執(zhí)行浮入,這個(gè)持續(xù)時(shí)間一到龙优,整個(gè)測(cè)試也會(huì)結(jié)束。啟動(dòng)延遲的目的是把不同線程組的啟動(dòng)時(shí)間間隔開(kāi)事秀,避免瞬時(shí)壓力過(guò)大彤断。啟動(dòng)延遲也根據(jù)實(shí)際情況來(lái)設(shè)置就好,原則就是腳本啟動(dòng)時(shí)如果CPU消耗在接受的范圍內(nèi)就不用調(diào)整秽晚,除非有其他特定的測(cè)試需求瓦糟。
    這幾個(gè)選項(xiàng)花點(diǎn)時(shí)間去掌握一下是有意義的筒愚,建議大家自己多設(shè)置幾種不同的參數(shù)組合赴蝇,運(yùn)行一下觀察它的運(yùn)行效果,做到熟練應(yīng)用巢掺。
    這里給出一個(gè)演示用的配置界面句伶。


    config_group.png

    配置10個(gè)線程并發(fā)劲蜻,5秒內(nèi)加載完,也就是每秒加載2個(gè)線程考余,持續(xù)運(yùn)行60秒先嬉。

事務(wù)控制器和聚合報(bào)告

在這里我們要給腳本增加一個(gè)事務(wù)控制器和聚合報(bào)告。性能測(cè)試?yán)锼^的【事務(wù)】楚堤,就是指一組連續(xù)的http請(qǐng)求疫蔓。例如你打開(kāi)首頁(yè)時(shí),其實(shí)瀏覽器和服務(wù)器之間有多次請(qǐng)求身冬,會(huì)下載多個(gè)靜態(tài)文件衅胀,請(qǐng)求多個(gè)服務(wù)資源,我們會(huì)建一個(gè)事務(wù)控制器把這多個(gè)請(qǐng)求都放在一個(gè)事務(wù)控制器里酥筝,然后起一個(gè)有業(yè)務(wù)意義的名稱滚躯。
增加事務(wù)控制器的作用是為了度量性能,增加聚合報(bào)告是為了查看性能嘿歌。不增加事務(wù)控制器的話掸掏,聚合報(bào)告其實(shí)沒(méi)有意義。
在線程組”首頁(yè)加載測(cè)試“上右鍵——添加——邏輯控制器——事務(wù)控制器宙帝,起名”簡(jiǎn)書(shū)首頁(yè)展示“丧凤,注意一定要勾選Generate parent sample,不然聚合報(bào)告會(huì)看得很痛苦步脓。添加事務(wù)控制器后息裸,選中“打開(kāi)簡(jiǎn)書(shū)首頁(yè)”和"進(jìn)入簡(jiǎn)書(shū)-IT技術(shù)",剪切復(fù)制或者直接拖到事務(wù)控制器里沪编。
在測(cè)試計(jì)劃”簡(jiǎn)書(shū)性能測(cè)試“上右鍵——添加——監(jiān)聽(tīng)器——聚合報(bào)告呼盆。

JMeter我們走!

到這里為止蚁廓,一個(gè)簡(jiǎn)單的并發(fā)測(cè)試場(chǎng)景就建立起來(lái)了访圃。更復(fù)雜性能測(cè)試場(chǎng)景會(huì)用到JMeter更多的特性,但是任何并發(fā)場(chǎng)景的基礎(chǔ)都是剛才說(shuō)的這些相嵌。
點(diǎn)擊Run按鈕腿时,執(zhí)行一下看看:


reuslt.png

按照剛才的設(shè)置,你的聚合報(bào)告應(yīng)該只有兩行饭宾,一行總計(jì)一行事務(wù)批糟,如果發(fā)現(xiàn)測(cè)試結(jié)果出現(xiàn)三行的,是因?yàn)槟銢](méi)有勾選Generate parent sample看铆,導(dǎo)致JMeter把每個(gè)請(qǐng)求都度量出來(lái)了徽鼎。是不是瞬間明白Generate parent sample的用途了,這就是所謂的說(shuō)一百看一百不如親手做一遍吧 (^_^)

簡(jiǎn)單的性能分析

我們可以簡(jiǎn)單的分析一下:

  • 在60秒里一共執(zhí)行了4090個(gè)樣本(請(qǐng)求),也就是tps是 4090 / 60 = 68.16/秒否淤,跟后面的吞吐量是計(jì)算一致的悄但。吞吐量還是不錯(cuò)的。
  • 90%的時(shí)間是154毫秒石抡,響應(yīng)非抽芟快。注意那個(gè)平均值一般沒(méi)什么用啰扛,反正我很少看平均值榨婆。
  • 異常率為0%本冲,GOOD~所有的測(cè)試都完成了赎懦,說(shuō)明服務(wù)狀態(tài)良好把介,網(wǎng)站性能很高,其實(shí)這是廢話厢漩,這可是簡(jiǎn)書(shū)的網(wǎng)站啊膜眠,各種高并發(fā)設(shè)計(jì)各種緩存各種消息隊(duì)列,抗10個(gè)并發(fā)簡(jiǎn)直是毛毛雨溜嗜,不過(guò)你也別為了好玩整上幾萬(wàn)的并發(fā)宵膨,大部分的網(wǎng)站都有防DDoS攻擊的策略的。再次強(qiáng)調(diào)炸宵,【以學(xué)習(xí)為目的辟躏,別亂并發(fā)】!
  • 接收數(shù)據(jù)明顯高于發(fā)送數(shù)據(jù)土全,這也因?yàn)槲覀兊哪_本訪問(wèn)的都是網(wǎng)站數(shù)據(jù)捎琐,接收高于發(fā)送這倒是正常的。但是要注意一個(gè)現(xiàn)象裹匙,每秒2495KB的傳輸量瑞凑,說(shuō)明JMeter的腳本很可能沒(méi)有304緩存或者本地緩存,導(dǎo)致每個(gè)線程都是從服務(wù)器重新下載的靜態(tài)數(shù)據(jù)概页∽延【注意這對(duì)我們剛才的腳本來(lái)說(shuō)不是問(wèn)題】:因?yàn)槲覀冊(cè)L問(wèn)的是/和/techareas,并沒(méi)有什么可以緩存的資源惰匙,這就是實(shí)際的網(wǎng)絡(luò)消耗技掏。單獨(dú)提出來(lái)這一點(diǎn),是希望跟剛?cè)腴T性能測(cè)試的朋友交流個(gè)心得项鬼,對(duì)于性能測(cè)試人員要時(shí)刻關(guān)注這種數(shù)據(jù)上的反逞剖幔現(xiàn)象,要刨根究底搞清楚為什么绘盟。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鸠真,一起剝皮案震驚了整個(gè)濱河市悯仙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌弧哎,老刑警劉巖雁比,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稚虎,死亡現(xiàn)場(chǎng)離奇詭異撤嫩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蠢终,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門序攘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人寻拂,你說(shuō)我怎么就攤上這事程奠。” “怎么了祭钉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵瞄沙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我慌核,道長(zhǎng)距境,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任垮卓,我火速辦了婚禮垫桂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘粟按。我一直安慰自己诬滩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布灭将。 她就那樣靜靜地躺著疼鸟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪庙曙。 梳的紋絲不亂的頭發(fā)上愚臀,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音矾利,去河邊找鬼姑裂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛男旗,可吹牛的內(nèi)容都是我干的舶斧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼察皇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼茴厉!你這毒婦竟也來(lái)了泽台?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤矾缓,失蹤者是張志新(化名)和其女友劉穎怀酷,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體嗜闻,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蜕依,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了琉雳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片样眠。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖翠肘,靈堂內(nèi)的尸體忽然破棺而出檐束,到底是詐尸還是另有隱情,我是刑警寧澤束倍,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布被丧,位于F島的核電站,受9級(jí)特大地震影響绪妹,放射性物質(zhì)發(fā)生泄漏甥桂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一喂急、第九天 我趴在偏房一處隱蔽的房頂上張望格嘁。 院中可真熱鬧,春花似錦廊移、人聲如沸糕簿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)懂诗。三九已至,卻和暖如春苗膝,著一層夾襖步出監(jiān)牢的瞬間殃恒,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工辱揭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留离唐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓问窃,卻偏偏與公主長(zhǎng)得像亥鬓,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子域庇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容