獨立外貿(mào)網(wǎng)站建設(shè)電商運營自學(xué)全套教程
初衷
之前在公司做的性能測試基本上都是關(guān)于數(shù)據(jù)庫的,針對接口的性能測試還是比較少一點。考慮到后邊大模型問答產(chǎn)品的推廣,公司方面也要求對相關(guān)接口進行壓測,也趁著這個機會,對jmeter進行深入研究,進一步加強自己性能測試方面的專業(yè)知識。
我希望能夠結(jié)合自己的實際經(jīng)歷與心路歷程,包括踩過的坑,一并與大家進行分享,共同提高自己的技術(shù)。
在這個系列里面,我也會逐步記錄自己成長的歷程
Jmeter介紹
以這個接口為例:
線程組(Thread Group)概述
線程組是 JMeter 中最基本的元素,用于控制模擬用戶的行為。可以把線程組看作是一群虛擬用戶的集合,這些虛擬用戶將按照設(shè)定的規(guī)則來執(zhí)行測試計劃。例如,在測試一個 Web 應(yīng)用時,線程組中的每個線程就代表一個虛擬用戶,這些用戶會并發(fā)地訪問應(yīng)用的各種接口。
線程數(shù)(Number of Threads)
- 含義:
線程數(shù)表示同時執(zhí)行測試任務(wù)的虛擬用戶數(shù)量。例如,將線程數(shù)設(shè)置為 100,就相當(dāng)于有 100 個虛擬用戶同時對目標(biāo)系統(tǒng)進行操作。這個參數(shù)直接決定了壓測的并發(fā)程度。 - 應(yīng)用場景和影響:
在測試一個小型的企業(yè)內(nèi)部系統(tǒng)接口時,如果預(yù)計同時使用該接口的用戶不超過 50 人,那么可以將線程數(shù)設(shè)置為 50 來模擬實際的使用場景,觀察系統(tǒng)在這種負載下的響應(yīng)情況。如果線程數(shù)設(shè)置過高,比如對于一個性能較差的系統(tǒng)設(shè)置了過多的線程數(shù),可能會導(dǎo)致系統(tǒng)崩潰或者響應(yīng)時間過長,因為系統(tǒng)無法承受這么多并發(fā)請求。
Ramp - Up Period(in seconds)
- 含義:
它表示所有線程在多長時間內(nèi)全部啟動完成。例如,設(shè)置線程數(shù)為 100,Ramp - Up Period 為 10 秒,那么 JMeter 會在 10 秒內(nèi)逐步啟動這 100 個線程,平均每秒啟動 10 個線程。 - 應(yīng)用場景和影響:
當(dāng)測試一個新開發(fā)的系統(tǒng)時,如果想慢慢增加負載來觀察系統(tǒng)在不同負載階段的性能變化,可以適當(dāng)設(shè)置較長的 Ramp - Up Period。這樣可以更細致地了解系統(tǒng)從低負載到高負載過程中的性能瓶頸。如果 Ramp - Up Period 設(shè)置得過短,可能會導(dǎo)致系統(tǒng)瞬間承受較大的壓力,出現(xiàn)異常情況,無法準(zhǔn)確評估系統(tǒng)在逐漸增加負載過程中的性能。
循環(huán)次數(shù)(Loop Count)
- 含義:
循環(huán)次數(shù)決定了每個線程執(zhí)行測試任務(wù)的次數(shù)。例如,設(shè)置循環(huán)次數(shù)為 5,表示每個虛擬用戶(線程)會重復(fù)執(zhí)行測試計劃 5 次。如果設(shè)置為 “永遠(Forever)”,則線程會一直循環(huán)執(zhí)行測試任務(wù),直到手動停止壓測。 - 應(yīng)用場景和影響:
在測試一個具有緩存機制的系統(tǒng)時,如果想觀察緩存對系統(tǒng)性能的影響,可以通過設(shè)置不同的循環(huán)次數(shù)來實現(xiàn)。比如,先設(shè)置較低的循環(huán)次數(shù),讓系統(tǒng)有機會緩存部分數(shù)據(jù),然后再設(shè)置較高的循環(huán)次數(shù),觀察緩存是否能夠有效降低系統(tǒng)的響應(yīng)時間。循環(huán)次數(shù)設(shè)置的多少直接影響了總的請求數(shù)量和測試的持續(xù)時間。
調(diào)度器(Scheduler)概述
- 在 JMeter 中,調(diào)度器是用于更精細地控制線程執(zhí)行時間和執(zhí)行策略的工具。它允許用戶根據(jù)特定的時間要求和測試場景來安排線程的啟動、停止以及執(zhí)行的節(jié)奏。
調(diào)度器、線程數(shù)、Ramp-Up Period、循環(huán)次數(shù)的聯(lián)系
與線程數(shù)的聯(lián)系
- 負載控制:
線程數(shù)確定了總的模擬用戶數(shù)量,而調(diào)度器可以決定這些用戶在什么時間范圍內(nèi)參與測試。例如,當(dāng)設(shè)置了較高的線程數(shù)(如 1000 個線程),如果希望這些用戶在特定的時間段(如工作時間 9:00 - 17:00)內(nèi)進行測試,可以通過調(diào)度器來實現(xiàn)。調(diào)度器可以設(shè)置測試的開始時間和結(jié)束時間,從而在這個時間窗口內(nèi)按照線程數(shù)所確定的負載規(guī)模對目標(biāo)系統(tǒng)進行壓測。 - 動態(tài)調(diào)整負載:
在某些復(fù)雜的測試場景中,可能需要根據(jù)系統(tǒng)的響應(yīng)情況動態(tài)調(diào)整負載。例如,在測試一個自適應(yīng)負載均衡的系統(tǒng)時,開始時可以通過調(diào)度器設(shè)置較低的線程數(shù)(如 100 個線程)來觀察系統(tǒng)的基本性能。隨著測試的進行,如果系統(tǒng)性能表現(xiàn)良好,可以通過調(diào)度器在后續(xù)階段增加線程數(shù)(如增加到 500 個線程),以進一步測試系統(tǒng)的負載承受能力。
與 Ramp - Up Period 的聯(lián)系
- 負載增長節(jié)奏控制:
Ramp - Up Period 規(guī)定了線程啟動的速度,調(diào)度器與之相結(jié)合可以更靈活地控制負載增長的節(jié)奏。例如,在一個分布式系統(tǒng)的性能測試中,調(diào)度器可以設(shè)置在系統(tǒng)負載較低的夜間時段開始測試,并且通過 Ramp - Up Period 參數(shù)控制線程的緩慢啟動。如果 Ramp - Up Period 設(shè)置為 60 秒,調(diào)度器可以確保在這個規(guī)定的時間內(nèi),按照設(shè)定的速度逐步增加線程,使得系統(tǒng)能夠平穩(wěn)地從低負載狀態(tài)過渡到高負載狀態(tài),避免系統(tǒng)因為突然的高負載而出現(xiàn)異常。 - 時間依賴的負載增長:
調(diào)度器可以使 Ramp - Up Period 具有時間依賴性。比如,在模擬一個電商平臺的促銷活動場景時,根據(jù)活動開始時間(由調(diào)度器控制),可以設(shè)置在活動開始后的前 5 分鐘內(nèi)完成所有線程的啟動(通過 Ramp - Up Period 來設(shè)置具體的啟動時間),這樣就可以模擬出促銷活動開始時用戶流量逐漸增加的實際情況。
與循環(huán)次數(shù)的聯(lián)系
- 測試持續(xù)時間和負載模式:
循環(huán)次數(shù)決定了每個線程執(zhí)行測試任務(wù)的重復(fù)次數(shù),調(diào)度器可以根據(jù)時間來限制這種重復(fù)。例如,設(shè)置循環(huán)次數(shù)為 “永遠(Forever)”,但通過調(diào)度器可以將測試限制在一個特定的時間范圍內(nèi)(如 2 小時)。這樣,在這 2 小時內(nèi),線程會按照循環(huán)次數(shù)的設(shè)定不斷執(zhí)行測試任務(wù),而一旦超過這個時間,測試就會停止。這對于模擬長時間運行的系統(tǒng)或者進行長時間穩(wěn)定性測試非常有用。 - 階段性測試策略:
調(diào)度器可以結(jié)合循環(huán)次數(shù)來實現(xiàn)階段性的測試策略。比如,在測試一個具有多種功能模塊的系統(tǒng)時,調(diào)度器可以先安排一個階段,在這個階段中設(shè)置較低的循環(huán)次數(shù),讓線程重點測試系統(tǒng)的某個核心功能模塊。然后,通過調(diào)度器切換到下一個階段,增加循環(huán)次數(shù),使線程對系統(tǒng)的其他功能模塊進行更深入的測試。這種方式可以更有針對性地利用循環(huán)次數(shù)來進行全面的系統(tǒng)性能測試。