課程:B站大學
記錄軟件測試-性能測試學習歷程、掌握前端性能測試、后端性能測試、服務端性能測試的你才是一個專業的軟件測試工程師
性能測試-jmeter邏輯控制器、定時器妙用
- IF控制器
- **IF 控制器的作用**
- 循環控制器
- 循環控制器的作用
- ForEach控制器
- ForEach 控制器的作用
- **ForEach案例**
- 定時器:
- 同步定時器:
- 常數吞吐量定時器
- 實踐是檢驗真理的唯一標準
IF控制器
IF 控制器(If Controller)?? 是 JMeter 中的一種 ??邏輯控制器??,用于根據指定的條件判斷是否執行其內部的采樣器(如 HTTP 請求)或其它邏輯元件。
IF 控制器的作用
- 1.條件化執行??:僅當指定條件為 true時,才執行控制器內的請求或邏輯(如登錄成功后才執行查詢操作)。
- 2.??動態決策??:基于變量值、響應數據或前置條件動態控制測試流程(如根據用戶角色跳轉到不同頁面)。
- 3.??流程控制??:實現復雜的測試場景(如循環、分支、異常處理等)。
- 4.提升效率??:避免不必要的請求執行(如未登錄時跳過需授權的接口)。
參數名稱 | 類型 | 默認值 | 是否必填 | 作用與說明 |
---|---|---|---|---|
參數名稱 | 文本 | - | 是 | 存儲 JDBC 請求中占位符對應的實際參數值,多個值用逗號分隔 |
參數類型 | 文本 | - | 是 | 指定傳遞給 SQL 語句中占位符的參數的數據類型,如 VARCHAR、INTEGER 等 |
變量名稱 | 文本 | - | 否 | 用于存儲從數據庫查詢結果中提取的變量名,多個變量用逗號分隔,和查詢結果列一一對應 |
結果變量名稱 | 文本 | - | 否 | 把整個 JDBC 查詢結果存為一個 JMeter 變量,該變量為集合類型,可通過索引訪問結果行 |
查詢超時時間 (s) | 數字 | 0 | 否 | 設置 JDBC 查詢超時時間,單位秒,超時 JMeter 會中斷查詢并拋異常,0 表示不限制 |
限制結果集 | 數字 | 0 | 否 | 限制數據庫返回結果集的行數,0 不限制,大于 0 的整數 n 則只返回前 n 行 |
處理結果集 | 下拉選擇 | Store as String | 否 | 指定處理 JDBC 查詢結果集的方式,可選 Store as String(以字符串形式存儲)、Store as Object(以 Java 對象如 ResultSet 存儲,適合復雜操作) |
循環控制器
循環控制器(Loop Controller)?? 是 JMeter 中的一種 ??邏輯控制器??,用于控制其內部包含的 ??采樣器(如 HTTP 請求)或其它邏輯元件?? 按照指定的次數或條件進行 ??重復執行??。它允許您模擬用戶多次執行相同操作(如刷新頁面、重復提交表單等),是構建循環測試流程的核心元件。
循環控制器的作用
- 1.??重復執行??:讓內部的請求或邏輯按固定次數循環(如模擬用戶連續點擊某個按鈕 5 次)。
- 2.流程控制??:與 ??線程組循環次數?? 形成嵌套,實現更靈活的測試場景(如線程組循環 3 次,每個線程組循環內再執行某個請求 10 次)。
- 3.??性能測試??:通過循環模擬高頻率操作,測試系統在持續負載下的表現(如短時間內多次查詢接口)。
- 4.簡化腳本??:避免手動重復添加相同的采樣器,通過循環控制器統一管理重復邏輯。
參數名稱 | 類型 | 默認值 | 是否必填 | 作用與說明 |
---|---|---|---|---|
名稱 | 文本 | Loop Controller | 是 | 循環控制器的顯示名稱,在測試計劃中用于標識該元件(如"查詢接口循環5次") |
注釋 | 文本 | - | 否 | 對循環控制器的功能描述或備注信息(便于團隊協作理解) |
循環次數(Loop Count) | 數值 | 1 | 否 | 指定內部元件循環執行的總次數。 - 填寫具體數字(如5):內部元件會執行5次 - 填寫Forever(或勾選下方選項):無限循環,直到手動停止測試或達到線程組的總循環限制 注意:若線程組本身也設置了循環次數,實際執行次數為線程組循環次數×循環控制器循環次數 |
永遠(Forever) | 布爾(復選框) | 未勾選 | 否 | 若勾選,循環次數設置為無限循環(等同于填Forever),內部元件會一直執行,直到測試計劃停止或達到全局停止條件(如線程組的調度器時間結束) 典型場景:模擬持續不斷的用戶操作(如長連接心跳請求) |
注意點:循環控制器針對子元件,線程組針對所有子元件
ForEach控制器
ForEach 控制器(ForEach Controller)?? 是 JMeter 中的一種 ??邏輯控制器??,用于 ??遍歷一組變量值??,并針對每個值 ??重復執行其內部的采樣器或邏輯元件??。它通常與 ??用戶定義的變量?? 或 ??提取器(如正則表達式提取器、JSON 提取器等)?? 配合使用,實現 ??基于動態數據集合的循環操作??,是處理多值關聯數據的常用元件。
ForEach 控制器的作用
- 1.遍歷多值數據??:對一組相關的變量值(如從響應中提取的多個 ID、Token 等)進行逐個處理。
- 2.動態關聯??:將提取器獲取的多個動態值(如列表頁商品 ID)依次傳遞給后續請求,實現批量操作(如查詢每個商品的詳情)。
- 3.??簡化重復邏輯??:避免為每個值手動添加相同的請求,通過控制器統一管理循環流程。
- 4.??精準控制??:按順序處理每個值,且支持自定義起始索引和結束條件。
參數名稱 | 類型 | 默認值 | 是否必填 | 作用與說明 |
---|---|---|---|---|
名稱 | 文本 | ForEach Controller | 是 | 控制器的顯示名稱,在測試計劃中用于標識該元件(如"遍歷商品ID") |
注釋 | 文本 | - | 否 | 對控制器的功能描述或備注信息(便于團隊協作理解) |
輸入變量前綴(Input Variable Prefix) | 文本 | - | 是 | 定義一組待遍歷變量的 共同前綴。這些變量通常由提取器(如正則提取器、JSON 提取器)生成,格式為 前綴_數字(如 itemId_1, itemId_2)。 示例:若提取器生成的變量為 userId_1, userId_2, userId_3,則此處填寫 userId。 |
Start index for loop (exclusive) | 數值 | 0 | 否 | 遍歷的起始索引(從 0 開始),但不包含該索引對應的值(即從 Start index + 1 開始處理)。 典型值:0(表示從第一個變量開始,如 前綴_1)。 用途:若提取器生成的變量從 前綴_1 開始,通常填 0;若從 前綴_0 開始,可填 0 或調整。 |
End index for loop (inclusive) | 數值 | -1 | 否 | 遍歷的結束索引(包含該索引對應的值)。 - 填寫具體數字(如 3):表示處理到 前綴_數字(如 前綴_3)。 - 填寫 -1:自動遍歷所有存在的變量(直到找不到下一個 前綴_數字變量為止)。 典型值:-1(推薦,自動匹配所有提取到的值)。 |
輸出變量名稱(Output variable name) | 文本 | - | 是 | 定義一個變量名,用于存儲當前正在處理的變量值。在控制器內部的采樣器中,可通過該變量名引用當前值。 示例:填寫 currentUserId,則在循環內可通過 ${currentUserId} 獲取當前遍歷到的 userId_X 的值。 |
ForEach案例
ForEach+用戶定義變量
ForEach+正則表達式提取器
ForEach循環可以搭配各個提取器共同使用
流程:
1、先i請求業務接口a,查看響應數據
2、正則表達式提取器提取值
3、foreach控制器設置
4、業務接口b引用變量進行使用
定時器:
同步定時器:
思考:
- 在電商活動中如何測試秒殺活動(絕對高并發) jmeter軟件線程數可以模擬多用戶,但是并不會在同一時刻瞬間發壓力,怎么辦?
故jmeter有元件:同步定時器(區分sleep含函數)
又叫做集合點(LR 的叫法),保證大量的請求在同一時間進行發送,形成絕對的并發
實現原因:設置同步定時器,有請求要發出時,同步定時器會暫緩請求發送,一直到積攢的請求數達到,將所有的請求同步發送出去,形成絕對的并發(更大的壓力負載)
在100個線程中,??每次觸發20個用戶同時并發請求??(模擬20組用戶同時操作),其余用戶按Ramp-Up逐步加入。超時未湊齊的線程會在5秒后自動執行,保證測試流程不卡死。
常數吞吐量定時器
??吞吐量(Throughput)?? 是衡量系統性能的關鍵指標之一,表示 ??單位時間內系統處理的請求數量??,通常用 ??"請求/秒"(Requests/Second)?? 或 ??"事務/秒"(Transactions/Second, TPS)?? 來衡量。
常數吞吐量定時器(Constant Throughput Timer)?? 是 JMeter 中用于 ??精確控制測試腳本的吞吐量(即每秒處理的請求數,Requests/Second 或 Transactions/Second)?? 的定時器元件。它的主要作用是 ??通過動態調整請求的發送間隔時間,使得測試整體達到用戶設定的目標吞吐量??,常用于模擬 ??穩定的業務負載?? 或 ??驗證系統在不同吞吐量下的性能表現??。
核心作用
- 1.??精確控制吞吐量??:強制測試計劃以設定的目標速率(如每秒 50 個請求)發送請求,而非單純依賴線程數和循環次數。
- 2.??模擬穩定業務負載??:適用于需要測試系統在 ??恒定業務壓力?? 下的表現(如每分鐘處理 3000 筆訂單)。
- 3.??獨立于線程組配置??:吞吐量控制與線程組的線程數、Ramp-Up 時間等參數解耦,可單獨調整壓力強度。
- 4.??支持動態調整??:通過變量或函數動態修改目標吞吐量,適應復雜測試場景。
此處的是客戶端達不到20QPS(樣本數是1200),此處我更改為測試單線程10QPS的頻率訪問業務接口,進行統計測試
定時器的作用:模擬負載壓力要求,本省不代表性能是否有bug,bug分析需要通過響應時間和監控指標等各個方面分析
下節實操咱們學習分布式壓力測試