jmeter之對吞吐量定時器的理解與使用

1、jmeter壓測時,如果僅設置線程數20循環10秒如下,那麼得到的併發是一秒20嗎?

——答案肯定不是一秒發送20請求,如圖,發送了3958次請求,接口tps在394左右。並沒有達到我們想要一秒併發請求20的結果。

原因:默認情況下,Jmeter線程在發送請求之間沒有間歇,Jmeter可能會在短時間內產生大量訪問請求,導致服務器被大量請求所淹沒。所以在10秒的情況下究竟發送了多少請求,要看接口處理能力。有些接口可能TPS比較高,有些接口TPS會比較低。這種情況可以壓測出一個接口實際TPS是多少,但是如果要測實際併發情況,需要設置其他定時器或引入變量暫停。

定時器會讓作用域內的每一個採樣器都在執行前等待一個固定時長。如果測試人員爲線程組添加了多個定時器,那麼Jmeter會將這些定時器的時長疊加起來,共同影響作用域範圍內的採樣器。定時器可以作爲採樣器或者邏輯控制器的子項,目的是隻影響作用域內的採樣器。

2、Constant Throughput Timer(常數吞吐量定時器)

Constant Throughput Timer常數吞吐量定時器可以讓JMeter以指定數字的吞吐量(即指定TPS,只是這裏要求指定每分鐘的執行數,而不是每秒)執行。吞吐量計算的範圍可以爲指定爲當前線程、當前線程組、所有線程組,並且計算吞吐量的依據可以是最近一次線程的執行時延。

以下爲該定時器的使用介紹:

1、 名稱:定時器Constant Throughput Timer的描述性名稱,顯示在左邊節點上,並用於命名事務
2、註釋:定時器Constant Throughput Timer註釋信息,非必填項
3、Delay before each affected samler
1)Target throughput(in samples per minute):每分鐘的吞吐量
2) Calculate Throughput based on:有5個選項:
第一: This thread only:控制每個線程的吞吐量,選擇這種模式時,總的吞吐量爲設置的target Throughput 乘以該線程的數量

第二: All active threads:設置的target Throughput 將分配在每個活躍線程上,每個活躍線程在上一次運行結束後等待合理的時間後再次運行。活躍線程指同一時刻同時運行的線程。

第三:All avtive threads(shared):與All active threads的選項基本相同。唯一區別是,每個活躍線程都會在所有活躍線程上一次運行結束後等待合理的時間後再次運行。

第四: All active threads in current thread group:設置的target Throughput 將分配在當前線程組的每一個活躍線程上,當測試計劃中只有一個線程組時,該選項和All active threads 選項的效果完全相同。

第五:All active threads in current thread group(shared):與All active threads in current thread group 基本相同,唯一的區別是,每個活躍線程都會在所有活躍線程的上一次運行結束後等待合理的時間後再次運行。
 

3、如上,其實還是有些疑問,對於一個接口併發20情況下,需要設置多少吞吐量合適呢?

選擇: This thread only:控制每個線程的吞吐量,選擇這種模式時,總的吞吐量爲設置的target Throughput 乘以該線程的數量。

 

Target throughput:目標(期望)吞吐量,注意,這裏的吞吐量不是per second,而是每分鐘;

既然是測試在20 QPS情況下的系統表現,那麼這裏我們應該填 20*60=1200;

——發現填寫1200的時候接口一分鐘處理量非常大,tps還是在300多左右,處理了一萬多請求,所以這麼設置還是有哪裏不正確。

如下發現:

calculate throughput based on:這是一個下拉框,表示以**爲基礎來控制Jmeter的請求吞吐量,
我們這裏選擇All active threads in current thread group;

說明如下:

--This thread only :分別控制每個線程的吞吐量,選擇這種模式時,總的吞吐量爲設置的 target Throughput 乘以線程的數量。

如果我們這裏選擇此種模式,然後設定了是10個線程,那麼我們前面的Target throughput就應該填寫1200/20=60 或 20(QPS)/10(線程數)*60=60了;

 

--All active threads : 設置的target Throughput 將分配在每個活躍線程上,每個活躍線程在上一次運行結束後等待合理的時間後再次運行。活躍線程指同一時刻同時運行的線程。

--All active threads in current thread group :設置的target Throughput將分配在當前線程組的每一個活躍線程上,當測試計劃中只有一個線程組時,該選項和All active threads選項的效果完全相同。

--All active threads (shared ):與All active threads 的選項基本相同,唯一的區別是,每個活躍線程都會在所有活躍線程上一次運行結束後等待合理的時間後再次運行。

--All cative threads in current thread group (shared ):與All active threads in current thread group 基本相同,唯一的區別是,每個活躍線程都會在所有活躍線程的上一次運行結束後等待合理的時間後再次運行。

4、於是設置This thread only ,吞吐量60時——以20QPS發送10秒,20*10=200個,聚合報告中220個,比較接近想要的結果,接口每秒請求20個

 

5、設置多個請求時,比如,下面需要保存信息前設置beanshell獲取手機號,設置吞吐量定時器爲This thread only ,吞吐量60時,發現不正確在10秒20線程情況下,請求只有100個,每秒只有10個請求

所以應該是線程多了一個影響,於是設置吞吐量定時器爲This thread only ,吞吐量120時,發現請求正確

6、根據接口不同,有些接口如果tps很低,達不到20,這個時候即使設置吞吐量60,可能一秒只能處理10個請求時,已經到達接口處理的瓶頸。每個接口可以調整,最終看請求數及tps是否爲想要的值即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章