JMeter多個(gè)線程組的使用說明
如果您的JMeter測試計(jì)劃中包含多個(gè)線程組,本文可幫助您了解如何結(jié)合JMeter和PTS配置參數(shù),合理選擇多線程組并行或串行壓測。
背景信息
Apache JMeter提供三種線程組:
Thread Group:(線程組)是測試計(jì)劃的核心組件之一,用于定義測試的用戶行為模擬。線程組的主要功能是控制虛擬用戶(線程)的數(shù)量以及這些用戶的行為和生命周期。
Setup Thread Group:(設(shè)置線程組)是一種特殊的線程組類型,主要用于在性能測試執(zhí)行之前執(zhí)行一些初始化操作。它通常用于準(zhǔn)備測試環(huán)境或設(shè)置測試所需的前置條件。如打開數(shù)據(jù)庫連接等。
Teardown Thread Group:(拆卸線程組)是一種特殊的線程組類型,專用于在測試計(jì)劃執(zhí)行完畢后進(jìn)行清理操作。它通常用于恢復(fù)測試環(huán)境或收尾工作,以確保測試過程中對(duì)系統(tǒng)所做的任何更改都能被撤銷。如關(guān)閉數(shù)據(jù)庫連接等。
在PTS中配置的并發(fā)數(shù)、循環(huán)次數(shù)會(huì)覆蓋Thread Group(主線程組)在JMeter腳本的配置。但不會(huì)影響Setup Thread Group和Teardown Thread Group。
設(shè)置多線程組并行或串行
如果JMeter腳本中包含多個(gè)Thread Group(主線程組),您可以參照以下說明設(shè)置多線程組的并行和串行關(guān)系。
PTS施壓配置中的循環(huán)次數(shù)會(huì)覆蓋所有的線程組,而壓測時(shí)長如果到達(dá),整個(gè)壓測都會(huì)停止。
多線程組并行
多個(gè)線程組并行時(shí),執(zhí)行的時(shí)間由循環(huán)次數(shù)和壓測時(shí)長中先完成的決定。例如,壓測時(shí)長設(shè)置為10分鐘,而循環(huán)次數(shù)設(shè)置為5次,假設(shè)循環(huán)5次只需要5分鐘,那么壓測在5分鐘時(shí)就停止了。
多個(gè)線程組并行時(shí),在本地JMeter腳本中,請不要勾選Test Plan(測試計(jì)劃)屬性中的Run Thread Groups consecutively (i.e one at a time),即所有線程組將在測試計(jì)劃開始時(shí)同時(shí)啟動(dòng),獨(dú)立運(yùn)行每個(gè)線程組。這種設(shè)置適合于以下情況:
并行負(fù)載測試:當(dāng)你希望模擬多個(gè)用戶群體同時(shí)訪問系統(tǒng)時(shí),可以利用這種并行執(zhí)行的方式。例如,你可以在不同的線程組中配置不同類型的用戶行為。
不同場景的同時(shí)測試:如果你的測試計(jì)劃需要同時(shí)測試不同的場景或功能模塊,并行執(zhí)行線程組是一個(gè)有效的方式。
減少測試時(shí)間:并行執(zhí)行可以減少測試所需的總時(shí)間,因?yàn)樗芯€程組會(huì)同時(shí)開始并運(yùn)行。
多線程組串行
串行的情況會(huì)稍微復(fù)雜一點(diǎn),操作如下:
在本地調(diào)試JMeter腳本時(shí),勾選Test Plan(測試計(jì)劃)屬性中的Run Thread Groups consecutively (i.e. one at a time),這將確保線程組按順序運(yùn)行,即一個(gè)線程組完成后再執(zhí)行下一個(gè)。這對(duì)于需要按階段執(zhí)行的測試特別有用,比如先進(jìn)行某些初始化任務(wù),然后再進(jìn)行負(fù)載測試。
在PTS上設(shè)置循環(huán)次數(shù)。該循環(huán)次數(shù)會(huì)作用于每個(gè)線程組。例如,測試計(jì)劃中有A、B、C三個(gè)線程組,在PTS施壓配置中,設(shè)置循環(huán)次數(shù)為5,那么執(zhí)行順序是先基于A的并發(fā)數(shù)循環(huán)5次,之后基于B的并發(fā)數(shù)循環(huán)5次,最后是C的并發(fā)數(shù)循環(huán)5次。
在PTS上設(shè)置的壓測時(shí)長需要足夠長,避免在壓測中多線程串行的過程中被中斷。
預(yù)估的壓測時(shí)長 = 業(yè)務(wù)請求的RT * 總請求數(shù)
。您可以在預(yù)估的壓測時(shí)長基礎(chǔ)上適當(dāng)延長。