自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解Jmeter各類(lèi)線程組

開(kāi)發(fā) 開(kāi)發(fā)工具
了解JMeter的朋友都知道,它不僅能做簡(jiǎn)單的接口測(cè)試、還支持性能測(cè)試。接口類(lèi)型不僅支持Rest、SOAP,也可擴(kuò)展WebSocket、Socket等。

了解JMeter的朋友都知道,它不僅能做簡(jiǎn)單的接口測(cè)試、還支持性能測(cè)試。接口類(lèi)型不僅支持Rest、SOAP,也可擴(kuò)展WebSocket、Socket等。無(wú)論你用Jmeter做哪種測(cè)試,哪種接口類(lèi)型,哪種網(wǎng)絡(luò)協(xié)議,你都必須添加使用Jmeter線程組,線程組在Jmeter中占據(jù)主導(dǎo)地位,它是任何一個(gè)測(cè)試計(jì)劃的起點(diǎn),所有的邏輯控制器、采樣器、處理器、報(bào)告等都必須放在線程組之下,也就是說(shuō)你若使用Jmeter做接口測(cè)試或性能測(cè)試,那么線程組是必不可少的。本文分為三個(gè)方面為大家介紹Jmeter的線程組,主要從:線程組介紹、線程組設(shè)置、線程組分類(lèi)三方面來(lái)闡述。

[[320893]]

一、線程組介紹

線程組元件是任何一個(gè)測(cè)試計(jì)劃的開(kāi)始點(diǎn)。在一個(gè)測(cè)試計(jì)劃中的所有元件都必須在某個(gè)線程組下。所有的任務(wù)都是基于線程組:

通俗理解:

  • 線程組:就是一個(gè)線程組,里面有若干個(gè)請(qǐng)求;
  • 線程:一個(gè)線程就是一個(gè)“虛擬用戶”;
  • 請(qǐng)求:一個(gè)線程組里面有若干個(gè)請(qǐng)求。

對(duì)應(yīng)關(guān)系:

例如:1個(gè)線程組里面有10個(gè)請(qǐng)求,線程數(shù)為10個(gè),跑完后得到:

理解為:(10個(gè)線程數(shù))10個(gè)人,每個(gè)人都要跑這10個(gè)請(qǐng)求,所以:10*10=100:

并發(fā)數(shù):100;線程數(shù):10;

PS:線程組也可以看作是一個(gè)虛擬用戶組。線程組中的每一個(gè)線程都可以理解為一個(gè)虛擬用戶。

二、線程組設(shè)置

我們把線程組的設(shè)置分成3個(gè)區(qū)域:

區(qū)域一:在采樣器失敗后怎么處理(LoadRunner里面也有類(lèi)似的運(yùn)行設(shè)置選項(xiàng),對(duì)比去學(xué)習(xí))

1、continue:繼續(xù)執(zhí)行接下來(lái)的操作;

2、Start Next Thread Loop:開(kāi)始下一次循環(huán);

3、stop Thread:停止線程,退出該線程(不再執(zhí)行此線程的操作);

4、stop Test:等待當(dāng)前執(zhí)行的采樣器結(jié)束后,結(jié)束整個(gè)測(cè)試;

5、Stop Test Now:馬上停止測(cè)試。

區(qū)域二:線程屬性

1、Number of Threads(users):線程數(shù),相當(dāng)于模擬的用戶數(shù)量;

2、Ramp-up Period(in seconds):達(dá)到指定線程需要的時(shí)間,例如線程數(shù)為100,時(shí)間設(shè)定為10s,那么就是10s加載100個(gè)線程,每秒啟動(dòng)的線程數(shù)=100/10=10;

3、Loop Count:如果填具體的數(shù)值,就是循環(huán)對(duì)應(yīng)的次數(shù);如果選擇“Forever”,則一直執(zhí)行下去,直到手動(dòng)停止;

4、Delay Thread creation until needed:延遲線程創(chuàng)建,直到需要才創(chuàng)建。

區(qū)域三:調(diào)度器配置

需要選中調(diào)度器(scheduler),調(diào)度器配置才生效。

【實(shí)例】現(xiàn)用一個(gè)普通的線程組測(cè)試一個(gè)簡(jiǎn)單的http接口測(cè)試,測(cè)試前添加設(shè)置下線程組及其他元件:

第一步:添加一個(gè)線程組,添加后選擇采樣器。因接口、報(bào)文或外部等原因?qū)е陆涌趫?zhí)行錯(cuò)誤后的一個(gè)后置行為,對(duì)于各個(gè)選項(xiàng)多選一,目前我選擇接口執(zhí)行錯(cuò)誤后讓其繼續(xù)執(zhí)行。

第二步:因?yàn)榉切阅軠y(cè)試,所以線程組設(shè)置1即可,即是單個(gè)“虛擬用戶”。

第三步:關(guān)于調(diào)度器配置不同版本的Jmeter會(huì)有不同的改動(dòng),目前Jmeter版本V5.1.1調(diào)度器配置在原有的基礎(chǔ)上容易理解和執(zhí)行,使用調(diào)度器之前需“開(kāi)啟”調(diào)取度按鈕(點(diǎn)擊打勾即可),按照功能提示選擇接口的啟動(dòng)延遲時(shí)間和持續(xù)時(shí)間。注意:使用調(diào)度器后中間循環(huán)次數(shù)則作廢。

第四步:添加http請(qǐng)求并設(shè)置域名、路徑等并填入請(qǐng)求報(bào)文;(添加路徑:線程組→添加→取樣器→HTTP請(qǐng)求)

第五步:添加HTTP信息頭管理器,用于存儲(chǔ)request的head部分,并寫(xiě)入對(duì)應(yīng)接口的request的head部分:(添加路徑:線程組→添加→配置原件→HTTP信息頭管理器)

最后就可以添加察看結(jié)果樹(shù),然后點(diǎn)擊運(yùn)行就可以看到結(jié)果了!(添加路徑:線程組→添加→監(jiān)聽(tīng)器→察看結(jié)果樹(shù))

三、線程組分類(lèi)

從系統(tǒng)的角度來(lái)看,Jmeter的線程組主要分為系統(tǒng)原生線程組和可拓展線程組。原生線程組配合調(diào)度器、定時(shí)器、前后置處理器和邏輯控制器等等已經(jīng)可以滿足大部分測(cè)試的需求,但是若要求多維度來(lái)設(shè)計(jì)用戶并發(fā)數(shù),原生線程組已經(jīng)不能滿足需求。此時(shí),我們可以新增插件的線程組使其更加強(qiáng)大,可自定義設(shè)置多種場(chǎng)景等功能,可以更加接近真實(shí)用戶的使用場(chǎng)景。

(一)原生線程組

1、thread group(線程組)

這個(gè)就是我們通常添加運(yùn)行的線程。通俗來(lái)講一個(gè)線程組,可以看做一個(gè)虛擬用戶組,線程組中的每個(gè)線程都可以理解為一個(gè)虛擬用戶。上文所介紹使用的例子就是此線程組。

2、setup thread group(設(shè)置線程組)

一種特殊類(lèi)型的ThreadGroup,可用于執(zhí)行預(yù)測(cè)試操作。這些線程的行為完全像一個(gè)正常的線程組元件。不同的是,這些類(lèi)型的線程執(zhí)行測(cè)試前進(jìn)行定期線程組的執(zhí)行;類(lèi)似LoadRunner的init,測(cè)試開(kāi)始時(shí)進(jìn)行初始化的工作。

不同的是執(zhí)行順序---它會(huì)在普通線程組執(zhí)行之前被觸發(fā)。

應(yīng)用場(chǎng)景舉例:

A、測(cè)試數(shù)據(jù)庫(kù)操作功能時(shí),用于執(zhí)行打開(kāi)數(shù)據(jù)庫(kù)連接的操作。

B、測(cè)試用戶購(gòu)物功能時(shí),用于執(zhí)行用戶的注冊(cè)、登錄等操作。

3、teardown thread group(拆線組)

一種特殊類(lèi)型的ThreadGroup,可用于執(zhí)行測(cè)試后動(dòng)作。這些線程的行為完全像一個(gè)正常的線程組元件。不同的是,這些類(lèi)型的線程執(zhí)行測(cè)試結(jié)束后執(zhí)行定期的線程組;類(lèi)似LoadRunnner的end,測(cè)試結(jié)束時(shí)進(jìn)行回收工作。

不同的是執(zhí)行順序---它會(huì)在普通線程組執(zhí)行之后被觸發(fā)。

應(yīng)用場(chǎng)景舉例:

A、測(cè)試數(shù)據(jù)庫(kù)操作功能時(shí),用于執(zhí)行關(guān)閉數(shù)據(jù)庫(kù)連接的操作。

B、測(cè)試用戶購(gòu)物功能時(shí),用于執(zhí)行用戶的退出等操作。

(二)可拓展線程組

1、Concurrency Thread Group(遞增式并發(fā)線程組)

這個(gè)可以模仿遞增式并發(fā)(只能遞增不能遞減),并可設(shè)置遞增次數(shù)、遞增時(shí)長(zhǎng)、到達(dá)目標(biāo)遞增數(shù)量保持時(shí)長(zhǎng)等等:

參數(shù)解釋?zhuān)?/p>

  • Target Concurrency:目標(biāo)并發(fā)(總線程數(shù))
  • Ramp Up Time:加速時(shí)間(總加速時(shí)長(zhǎng))
  • Ramp-Up Steps Count:加速步驟計(jì)數(shù)(總加速/遞增次數(shù))
  • Hold Target Rate Time:保持目標(biāo)速率時(shí)間(到達(dá)總線程數(shù)后持續(xù)時(shí)長(zhǎng))
  • Time Unit:時(shí)間單位(分鐘或者秒)
  • Thread Iterations Limit:線程迭代次數(shù)限制(循環(huán)次數(shù))
  • Log Threads Status into File:將線程狀態(tài)記錄到文件中(將線程啟動(dòng)和線程停止事件保存為日志文件);

現(xiàn)設(shè)計(jì)這樣一個(gè)場(chǎng)景:

這意味著:

3分鐘除以5步,每步0.6分鐘;100個(gè)用戶除以5步,每步20個(gè)用戶;每0.6分鐘將添加20個(gè)用戶,直到達(dá)到100個(gè)用戶,達(dá)到100個(gè)線程后,所有這些線程將繼續(xù)運(yùn)行,并一起打到服務(wù)器6分鐘。

2、Stepping Thread Group(逐步線程組)

這個(gè)可以模仿遞增式并發(fā)(不但遞增還可以遞減),并可設(shè)置遞增次數(shù)、遞增啟動(dòng)延遲、遞增時(shí)長(zhǎng)、到達(dá)目標(biāo)遞增數(shù)量保持時(shí)長(zhǎng)等等:

參數(shù)解釋?zhuān)?/p>

1、線程組最大用戶數(shù):100個(gè)

2、初次加載用戶前等待時(shí)間:10秒,此時(shí)沒(méi)有用戶進(jìn)入

3、第一次加載用戶數(shù):10個(gè)用戶開(kāi)始

4和5:每隔10秒加10個(gè)用戶

6、ramp-up在幾秒內(nèi)啟動(dòng)線程組

7、持續(xù)壓測(cè)60秒,一分鐘

8、和9:退用戶,每10秒退出10個(gè)用戶

10、上面各種設(shè)置的圖形表示

3、bzm - Arrivals Thread Group(bzm-到達(dá)線程組)

跟Concurrency Thread Group線程組功能作用大同小異。參數(shù)解釋?zhuān)?/p>

  • Target Rate:目標(biāo)線程數(shù)(總線程數(shù))
  • Ramp Up Time:所需多少加載時(shí)間(總加速時(shí)長(zhǎng))
  • Ramp Up Steps Count:所需多少個(gè)加載梯次(總遞增/加速次數(shù))
  • Hold Target Rate Time:持續(xù)運(yùn)行時(shí)間(到達(dá)總線程數(shù)后持續(xù)時(shí)長(zhǎng))
  • Time Unit:可以選擇用分鐘還是秒來(lái)做單位
  • Thread lterations Limit:線程迭代次數(shù)限制。如果我們只需要運(yùn)行每個(gè)用戶一次以模擬用戶的實(shí)際行為,則可能會(huì)很有用。在我們的例子中,該字段為空,因此每個(gè)用戶將運(yùn)行不確定的迭代,直到調(diào)度結(jié)束。
  • Log Thread Status into File:將線程狀態(tài)記錄到文件中
  • Concurrency Limit:最大并發(fā)數(shù)限制。以避免出現(xiàn)內(nèi)存不足的問(wèn)題。在我們的例子中是1000,這是一個(gè)很大的數(shù)字。

現(xiàn)設(shè)計(jì)這樣一個(gè)場(chǎng)景:

所以以上設(shè)置就等于:3min除以5步,等于每步加速后持續(xù)0.6分鐘,100個(gè)用戶除以5步,等于每步加速20個(gè)用戶,達(dá)到100個(gè)用戶后持續(xù)跑6mn。

4、Ultimate Thread Group(最終線程組)

這個(gè)線程就比較難以理解,但是功能也比較強(qiáng)大。它可以對(duì)負(fù)載中的線程組進(jìn)行復(fù)雜的管理。通過(guò)在線程計(jì)劃中具有無(wú)限數(shù)量的行來(lái)完成此操作,這可以為線程組的不同部分啟用不同的配置。該插件跟Stepping Thread Group線程組有些類(lèi)似,不過(guò)這個(gè)是多個(gè)線程組設(shè)置的結(jié)合。執(zhí)行的時(shí)候,每個(gè)線程組是同時(shí)按照自己的規(guī)則開(kāi)始執(zhí)行的,每一時(shí)刻,得到的結(jié)果都是兩個(gè)線程組的疊加。

形象比喻:

并發(fā)的用戶就像浪花一波一波的不斷涌入系統(tǒng),拍打服務(wù)器,考驗(yàn)我們的系統(tǒng)能否頂住壓力并平穩(wěn)運(yùn)行

我們的網(wǎng)站正在平穩(wěn)運(yùn)行的時(shí)候,突然有一波1000用戶同時(shí)訪問(wèn),我們稱(chēng)之為第一浪潮。訪問(wèn)了30s之后,第一浪潮在15s內(nèi)逐漸退出系統(tǒng)。

在第一浪潮退出系統(tǒng)的同時(shí),第二波2000用戶在極短時(shí)間內(nèi)又突然涌入網(wǎng)站,我們稱(chēng)之為第二浪潮。在訪問(wèn)30s之后,第二浪潮在15s內(nèi)也逐漸退出了系統(tǒng)。

在第二浪潮退出系統(tǒng)的同時(shí),第三波3000用戶又突然涌入網(wǎng)站,我們稱(chēng)之為第三浪潮。在訪問(wèn)30s之后,第三浪潮在15s內(nèi)也逐漸退出了系統(tǒng)。

在第三浪潮退出系統(tǒng)的同時(shí),第四波1000用戶又突然涌入網(wǎng)站,我們稱(chēng)之為第四浪潮。在訪問(wèn)30s之后,第四浪潮在15s內(nèi)也逐漸退出了系統(tǒng)。

添加單個(gè)線程組Row 和 添加多個(gè)線程組Row:

參數(shù)解釋?zhuān)?/p>

  • Start Threads Count:一共要啟動(dòng)的線程數(shù)。圖中本次測(cè)試一共啟動(dòng)100個(gè)線程(用戶/并發(fā))。
  • Initial Delay, sec:最開(kāi)始延遲時(shí)間,單位秒。設(shè)置為0,就是點(diǎn)擊了立即執(zhí)行。
  • Startup Time, sec:?jiǎn)?dòng)設(shè)置的100個(gè)線程并發(fā)一共需要的時(shí)間,單位秒。圖中設(shè)置10秒(線程組的加速期)
  • Hold Load For, sec:保持加壓時(shí)間,單位秒。圖中10秒。
  • Shutdown Time:多久時(shí)間內(nèi)全部釋放關(guān)閉,單位秒。圖中10秒。

【實(shí)例】

1、需求:要求此接口用戶的訪問(wèn)量“分波式”訪問(wèn),每個(gè)時(shí)期、每波都有不同用戶量訪問(wèn),每波的用戶訪問(wèn)量呈現(xiàn)出遞增然后逐次遞減的狀態(tài),單波用戶量最大并發(fā)不可超過(guò)70。

2、分析:根據(jù)需求實(shí)現(xiàn)具體場(chǎng)景,可得出普通線程組并不能實(shí)現(xiàn),普通線程組一般實(shí)現(xiàn)為“直線式”的需求場(chǎng)景(配合其他元件實(shí)現(xiàn)略不同),那么此時(shí)Ultimate Thread Group線程組便可為之實(shí)現(xiàn):

3、步驟:

第一步:根據(jù)需求場(chǎng)景“每個(gè)時(shí)期、每波都有不同用戶量訪問(wèn)”現(xiàn)設(shè)置添加多Row,每Row的Start Threads Count(開(kāi)始線程計(jì)數(shù)),初始用戶的數(shù)量為:10、30、50、70、50、30、10,此時(shí)每波用戶訪問(wèn)量遞增→遞減和單波用戶不可超過(guò)70的需求配合關(guān)閉時(shí)間已經(jīng)滿足。

第二步:每Row的Initial Delay,sec(延遲啟動(dòng)時(shí)間,單位秒)設(shè)置每時(shí)間間隔5s:0s、5s、10s、15s、20s、25s、30s,這樣是為了滿足不同組的啟動(dòng)延遲時(shí)間,若每個(gè)線程組不同的用戶都在同一時(shí)間節(jié)點(diǎn)啟動(dòng)那不是遞增式并發(fā),那是同步式并發(fā)。

第三步:每Row的Startup Time,sec(啟動(dòng)時(shí)間),意指每個(gè)線程組的線程在多少s內(nèi)全部啟動(dòng),目前設(shè)置為1s,即是每組線程組的線程數(shù)從啟動(dòng)開(kāi)始到啟動(dòng)結(jié)束話費(fèi)時(shí)長(zhǎng)為1秒。

第四步:每Row的Hold Load For,sec(持續(xù)運(yùn)行),意指每個(gè)線程組的線程在啟動(dòng)達(dá)到設(shè)置的線程數(shù)后持續(xù)運(yùn)行多長(zhǎng)時(shí)間,單位秒。此時(shí)需求每組線程運(yùn)行后達(dá)到頂峰后呈現(xiàn)出“遞減”狀態(tài),所以持續(xù)運(yùn)行時(shí)間應(yīng)該也是設(shè)置為遞減:30、25、20、15、10、5、0(單位s)。

第五步:Shutwn Time(關(guān)閉時(shí)間),這個(gè)可配合上面四個(gè)可設(shè)置:0、5、10、15、10、5、0。這樣是為了滿足“每波用戶訪問(wèn)量遞增→遞減”的需求

好啦!主功能配置已經(jīng)完成,看下具體線程組效果圖:

此時(shí),運(yùn)行后為了確保線程組的變化運(yùn)行軌跡,添加一個(gè)Active Threads Over Time用來(lái)查看隨時(shí)間變化的活動(dòng)線程:(添加路徑:線程組→添加→監(jiān)聽(tīng)器→jp@gc - Active Threads Over Time)

最后,即可添加察看結(jié)果樹(shù)、聚合報(bào)告、響應(yīng)時(shí)間圖等分析此接口的接口各個(gè)返回指標(biāo)等:

Ultimate Thread Group(最終線程組)實(shí)現(xiàn)原理:TA跟Stepping Thread Group線程組有些類(lèi)似,不過(guò)這個(gè)是多個(gè)線程組設(shè)置的結(jié)合。執(zhí)行的時(shí)候,每個(gè)線程組是同時(shí)按照自己的規(guī)則開(kāi)始執(zhí)行的,每一時(shí)刻,得到的結(jié)果都是兩個(gè)線程組的疊加。

總結(jié),對(duì)于系統(tǒng)原生Jmeter線程組只要下載安裝并配置環(huán)境變量Jmeter即可使用,可拓展線程組需要下載特定的插件進(jìn)行安裝和配置,雖麻煩但是配置好的線程組功能是比較強(qiáng)大的,且可滿足多種類(lèi)型的用戶和需求場(chǎng)景,值的感興趣的小伙伴一試!

【本文是51CTO專(zhuān)欄機(jī)構(gòu)“AiChinaTech”的原創(chuàng)文章,微信公眾號(hào)( id: tech-AI)”】

戳這里,看該作者更多好文 

 

責(zé)任編輯:華軒 來(lái)源: 51CTO專(zhuān)欄
相關(guān)推薦

2011-07-21 13:04:01

組策略GPOAD

2022-06-01 14:35:39

gitjmeter腳本

2023-05-04 10:56:23

JmeterJava

2009-09-16 18:19:34

正則表達(dá)式組

2009-07-03 14:28:03

Tapestry 5組

2010-08-05 13:04:05

路由器

2023-10-31 08:22:31

線程類(lèi)型.NET

2023-12-11 08:03:01

Java線程線程組

2024-11-21 07:00:00

線程池Java開(kāi)發(fā)

2021-10-29 08:19:54

JMeterJava java sample

2021-12-28 09:10:55

Java線程狀態(tài)

2010-03-16 14:32:51

Java系統(tǒng)線程組

2021-08-12 14:49:44

操作系統(tǒng)線程進(jìn)程

2009-07-09 09:28:19

.Net Micro

2009-08-31 16:49:23

WPF線程模型

2011-07-01 13:03:32

QT 線程 串口

2011-06-30 17:21:56

Qt 線程 共享

2022-05-20 10:20:17

Spring事務(wù)MyBatis

2022-04-20 20:54:01

云計(jì)算

2022-07-05 11:13:27

技術(shù)架構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)