一、基礎腳本搭建
🎯?核心目標:用 JMeter 搭性能測試 “骨架”(測試計劃、線程組、取樣器、監聽器)
- 📋?測試計劃:整個測試的 “容器”,所有測試組件都放這里
- 🧵?線程組:模擬多少用戶(線程)、多久發請求(調度),像 “并發用戶軍團”
- 🎲?取樣器:具體發什么請求(HTTP、JDBC 等),是 “真實干活的小兵”
- 👂?監聽器(查看結果樹):調試時看結果(請求是否成功、返回啥數據),但性能測試時要禁用!
→ 為啥?👂監聽器超占資源!圖形界面(GUI)調試用用就行,真跑性能測試得用命令行(CLI),不然 JMeter 資源被分走,測試結果就不準啦~
二、命令行執行
💻?核心目標:真正跑性能測試時,不用圖形界面,用命令行更高效!
- JMeter 默認只給 1G 內存(1g),如果要模擬很多用戶,可能不夠用~
- 兩種命令行玩法:
- 簡單版:
jmeter -n -t 腳本.jmx -l 結果.jtl -e -o 報告文件夾
→ 適合快速跑腳本,生成測試報告 - 進階版:
java -Xms2g -Xmx2g … -jar ApacheJMeter.jar …
→ 手動分配內存(比如給 2G),想咋調就咋調,超靈活!
- 簡單版:
三、腳本咋來的?兩種姿勢
1?? 純手工寫腳本
???適用場景:接口協議清晰(HTTP、TCP 等)、參數簡單,直接對著接口文檔寫
- 要搞懂:用啥協議?接口咋調用?參數咋傳?然后在 JMeter 里一步步填信息,把請求拼出來~
2?? 錄制腳本
🎥?適用場景:接口參數復雜、流程多(比如瀏覽器里點來點去的操作),直接錄更方便!
- 咋錄?
- 📦 先建 “測試計劃”+“線程組”(得有個容器存錄制的請求)
- 🔌 開 “HTTP 代理服務器”:設個端口(比如 8888),選好把錄制的請求存到哪個線程組里
- 🔐 啟動代理 → 生成 CA 證書(讓瀏覽器 / APP 信任這個代理)
- 🎯 在要測試的 APP / 瀏覽器里,填代理信息(IP + 端口),然后正常操作!
→ JMeter 會自動把你操作的接口請求 “錄” 下來,直接變成測試腳本~
四、腳本回放 & 調試
???核心目標:跑一遍腳本,看看請求對不對、結果準不準!
- 👀?查看結果樹:
- 🌱 綠色:網絡請求發出去成功了,但結果對不對還得仔細看(比如返回數據是否符合預期)
- 🔴 紅色:請求直接失敗(網絡不通、參數錯了…)
- 🔄?HTTP 取樣器的 “重定向”:
- 跟隨重定向:顯示跳轉全過程(比如登錄→跳首頁,每一步都記下來)
- 自動重定向:只顯示最終結果(不管中間跳了多少次)
- 🧹?瘦身腳本:回放時,把無關請求(比如頁面廣告、多余的圖片請求)禁用 / 刪掉,讓測試更聚焦!
五、請求編碼:讓 JMeter 發對請求
📦?核心問題:發請求時,參數 / 內容編碼不對,服務器可能看不懂你的請求(比如中文亂碼),得統一編碼規則!
1. 通用編碼:取樣器填 UTF-8
在 JMeter 的 ** 取樣器(比如 HTTP 請求)** 里,把「內容編碼」設為?UTF-8
→ 作用:讓請求體(比如表單、JSON)的編碼統一,避免因編碼不一致導致服務器解析錯誤
2. 表單請求(application/x-www-form-urlencoded)
📝 場景:提交登錄表單、簡單參數時常用這種格式
- 勾上「編碼」選項!
→ 為啥?如果參數里有中文 / 特殊字符(比如?&
?%
),不編碼會亂套~
→ 效果:參數會被?urlencoded
?處理(比如中文轉?%E4%B8%AD%E6%96%87
?),服務器能正確解析
3. JSON 請求(application/json)
📝 場景:接口用 JSON 傳參(現在超常見!)
- 必須加?消息頭管理器,填?
Content-Type: application/json;charset=utf8
→ 作用:告訴服務器 “我發的是 JSON,編碼 UTF-8”,避免 JSON 里的中文 / 特殊字符解析錯誤
4. 文件上傳(multipart/form-data)
📝 場景:傳圖片、Excel 等文件時用
- 請求格式選?
POST multipart/form-data
→ 作用:讓 JMeter 以 “分塊” 方式傳文件 + 參數,確保文件內容、文件名編碼正確
六、響應編碼:解決返回結果亂碼
🔍?核心問題:服務器返回的數據,JMeter 看不懂(亂碼),尤其是 Windows 電腦!
1. 為啥亂碼?
Windows 系統默認編碼是?GBK,JMeter 跟著也用 GBK。但如果服務器返回的是 UTF-8 編碼的內容,JMeter 用 GBK 解析就會亂碼(比如變成?????
?)
2. 咋解決?
改 JMeter 的?全局編碼配置:
- 找到 JMeter 安裝目錄 →?
bin
?文件夾 → 打開?jmeter.properties
?文件 - 搜索?
sampleresult.default.encoding
,改成:properties
sampleresult.default.encoding=UTF-8
- 重啟 JMeter!之后解析響應就用 UTF-8,不亂碼啦~
七、變量 & 參數化:讓腳本更靈活
🔄?核心目標:腳本里的參數不能寫死!要動態變(比如不同用戶用不同賬號,不同請求用不同參數)
1. 三種傳參方式
JMeter 里常用這三類 “變量容器”:
- 📌?用戶定義的變量:全局變量,整個測試計劃都能用(適合固定值,比如環境地址?
https://test-api.com
?) - 📌?用戶參數:線程組內動態傳參(比如每個線程用不同的用戶名、密碼)
- 📌?屬性(Properties):屬于 JMeter 工具本身的 “全局變量”,能跨線程組傳參!
→ 比如:線程組 1 登錄拿到 token,線程組 2 要用這個 token 發請求,就靠屬性傳遞~
2. 性能測試必用:參數化
📝 場景:模擬 100 個用戶登錄,總不能每個用戶的賬號密碼都手寫吧?
- 用?CSV 數據文件設置?或?用戶參數,把賬號、密碼存在文件里,讓 JMeter 循環讀、動態替換
- 效果:每個線程(用戶)用不同的參數,測試更真實(比如模擬 100 個真實用戶操作)
3. 屬性的特殊用法
💡?跨線程組傳參:比如 “登錄線程組” 拿到的 token,想給 “下單線程組” 用
- 用函數?
__setProperty
?把 token 存成屬性 - 再用?
__P
?函數在另一個線程組取這個屬性 - 適合?混合場景測試(比如先登錄、再下單、再付款,不同步驟拆分線程組)