提問1
如何在大并發測試下,讓登入或者後續接口隻執行一次?
回答
這個問題網上的答案其實很多,但是大多不靠譜。
比如推薦使用僅一次控制器,但是僅一次控制器對線程組無效;比如推薦跨線程組調用,但是這樣比較繁瑣,新人也搞不定;
其實隻要各位對元件熟悉,這個問題很簡單
下圖100線程:

添加一個吞吐量定時器,選擇總數計算
下面這就ok了,是不是很簡單?
提問2
大并發的登入之後,後續接口在做并發的時候有一些session重複了,并發量越大,重複幾率越高。如何保證後續并發的session不重複?
原因其實是因為jmeter的多線程存在競争機制,那麼并發量很大的時候,就會有一部分線程下的請求搶到了同樣的session。
我們可以把這些登入密碼在并發登入的時候先在本地儲存一份哦,用來代替使用者名密碼做登入參數!
比如下圖所示的session
寫個小腳本把這些session儲存下來
後續并發的時候直接引用這些cookie就行了
但是這種也有缺點,腳本會略微的影響吞吐量
提問3
如何識别tps拐點
先分析下面這張圖。下面這張圖上展示了階梯負載量,響應時間,tps三種資料
從圖上能看出來三個趨勢
1:tps升到一個相對高點之後,長期維持穩定,不再升高
2:運作一段時間之後,響應時間開始逐漸升高,但是趨勢不明顯
3:随着負載越來越高,tps長期保持穩定
分析:
在負載逐漸升高的情況下,tps卻長期不變。這并不是說明性能很穩定,而是說明我們機關時間内的單線程tps是在逐漸降低的(機關時間tps/總線程)。
再分析響應時間,我們的響應時間其實也是在逐漸升高,從側面反映出線程的tps是在下降的。
但是具體在多少負載量的時候我們的瓶頸點已經到來?這張圖上不好計算,我們換一個監聽器
這張圖的趨勢就比較明顯了。随着負載升高,線程的tps逐漸達到一個高點,然後開始下降。那麼這個最高點就是我們的性能瓶頸點
提問4
jmeter做壓測的時候,性能監聽圖形毛刺過多,看的想吐怎麼辦
先秀一張圖階梯增壓的圖形,看看什麼是毛刺
這個場景是階梯增壓,每5s加10個,加到200,然後持續運作
可以看出來tps曲線坑坑窪窪,高低不平,慘不忍睹,怎麼給它打磨一下?
修改setting
再回頭看一下圖形是不是沒那麼多毛刺了?
但是tps曲線依然波動很劇烈,這是我們的壓力設定的不合理導緻的
下面把ramp up值改成10s,讓我們的線程壓力沒那麼大
響應時間的劇增總是伴随着tps的大跌
提問5
非GUI模式下做負載測試,修改參數好麻煩的說
把關鍵參數都設定成變量,在非GUI下引用就行了,就像下面介樣子
寫一個shell腳本,參數全部引用一下
bat執行的時候就像下面這個樣子,hin輕松有沒有~
提問6
jmeter4444端口無法監聽遠端伺服器怎麼解決
4444端口在阿裡雲和騰訊雲服務上,是預設不開放的。想要監聽到,有兩種辦法,一種是防火牆開放4444端口,一種是更換端口。指令如下
./startAgent.sh --udp-port 0 --tcp-port 1234
提問7
遠端機執行jmeter腳本,怎麼快速更換csv參數路徑?
隻需要在參數路徑中加入一組函數,就可以實作參數路徑自動定位,如下
${__P(user.dir,)}${__P(file.separator,)}test.txt
這一組函數的作用是,不論在linux還是在本機,都可以自動切換路徑格式,不需要手動修改
Delay Thread creation until needed 是什麼意思?
jmeter的線程組裡面有一個Delay Thread creation until needed選項,如下圖。
很多人不了解這個選項是什麼意思,或者根據官方解釋,認為它是延遲建立線程。但是延遲建立,在哪裡展現出來你?完全搞不清。
我們可以通過jdk的監聽器看一探究竟。
不勾選延遲建立
線程組設定1500線程,ramp up設定10s,不勾選延遲建立,循環次數設定為永遠。如下圖
運作腳本之後,我們在活動線程監聽器裡面可以看到線程确實是10s内建立完成,如下圖
但是我們在jdk工具裡面再看一下線程建立的過程,會發現線程幾乎在1s内就全部啟動完成了,如下圖