JMeter使用學習記錄
一、安裝
1.下載JMeter
https://jmeter.apache.org/download_jmeter.cgi
下載安裝文件到本地
2.安裝JDK
https://www.oracle.com/java/technologies/downloads/
3.切換中文
- 進入bin文件夾
- 打開jmeter.properties
#language=en下增加#language=zh_CN
二、使用
1.進入安裝文件夾 -> bin文件夾
2.點擊jmeter.bat(windows)
三、腳本錄制
1.打開JMeter圖形界面
2.新建線程組
- 選中Test Plan,Add -> Threads(線程) -> Thread Group(線程組)
3.新增HTTP代理服務器
- 選中Test Plan,Add -> Non-Test Elements(非測試元件) -> HTTP(s) Test Script Recorder(HTTP代理服務器)
- 點擊【HTTP(s) Test Script Recorder】,查看端口號
4. 新增錄制控制器
- 選中Thread Group(線程組),Add -> Logic Controller(邏輯控制器) -> Recording Controller(錄制控制器)
5.安裝證書
- 進入bin文件夾
- 雙擊【ApacheJMeterTemporaryRootCA.crt】
- 根據安裝引導,把證書存儲到【受信任的根證書頒發機構】下
6.瀏覽器添加代理
- chrome瀏覽器安裝SwitchyOmega插件,用于管理代理
- SwitchyOmega插件設置:
- 新建情景模式,勾選代理服務器
- 代理服務器填入127.0.0.1,端口號為8888(代理服務器端口號)
7.啟動代理服務器
- 點擊【HTTP(s) Test Script Recorder】下的【start】
8.查看錄制的請求
- 請求在Recording Controller(錄制控制器)下
9.請求篩選
- 進入HTTP代理服務器
- Requests Filtering
- 包含模式添加想選取的域名等(使用正則表達式)
- URL Pattern to Include(包含模式)
- Add
.*baidu.com
- 排除模式添加想過濾的域名等(使用正則表達式)
- URL Pattern to Exclude(排除模式)
- Add
.*\.(js|css|woff|jpg).*
10. 停止錄制
11.添加 察看結果樹,查看請求的返回內容
- 選中線程組,Add -> Listener(監聽器) -> View Results tree(察看結果樹)
12.屏蔽部分錄制的部分請求
- 選中要屏蔽的請求后,點擊 工具欄的【Toggle(切換)】
13.再次運行錄制的請求
- 進入 察看結果樹
- 點擊 工具欄的【Start(開始)】
- 在 察看結果樹 可以看到返回內容
四、壓力測試
1.新增線程組
- 選中Tset Plan,Add -> 線程 -> 線程組
2.新增HTTP請求
- 選中線程組,Add -> Sampler(取樣器) -> HTTP Request(HTTP請求)
3.填寫web服務器信息
- 進入 HTTP請求 頁面
- 填寫web服務器的 【協議】 【服務器名稱】 【路徑】等
4.添加 察看結果樹
- 選中線程組,Add -> 監聽器 -> 察看結果樹
5.查看返回結果
- 點擊【開始】,在 察看結果樹 查看返回結果
6.跑多個線程
- 進入 線程組
- 修改 線程數
- 修改循環次數
- 循環執行
- 勾選Infinite(永遠)
- 設置循環時長
- 勾選 Specify Thread lifetime(調度器)
- Duration(seconds)(持續時間) 設置時長
7.添加聚合報告
- 選中 線程組,Add -> Listener(監聽器) -> Aggregate Report(聚合報告)
8.聚合報告數據
- Label:每個 JMeter 的 element(例如 HTTP Request)都有一個 Name 屬性,這里顯示的就是 Name 屬性的值
- Samples(樣本):表示這次測試中一共發出了多少個請求
- Average(平均值):平均響應時間——默認情況下是單個 Request 的平均響應時間(單位ms),當使用了 Transaction Controller 時,也可以以Transaction 為單位顯示平均響應時間(應該為單個線程時間)
- Median:中位數,也就是 50% 用戶的響應時間
- 90% Line:90% 用戶的響應時間l
- Min:最小響應時間
- Max:最大響應時間
- Error%(異常):本次測試中出現錯誤的請求的數量/請求的總數
- Throughput(吞吐量):默認情況下表示每秒完成的請求數(Request per Second),當使用了 Transaction Controller 時,也可以表示類似 LoadRunner 的 Transaction per Second 數
- 接收KB/Sec:每秒從服務器端接收到的數據量,相當于LoadRunner中的Throughput/Sec
9.TPS計算公式
TPS即服務器每秒處理的事務數
(1/Average)*1000*線程數
10.teardown線程組
- 選中測試計劃,Add -> Threads -> tearDown Thread Group
- 最后執行的線程組
11.setUP線程組
- 選中測試計劃,Add -> Threads -> setUp Thread Group
- 最新執行的線程組
五、分布式壓力測試
1.Slave節點
-
關閉服務器的SSL(因為測試在局域網內,不需要ssl)
- 在服務器A打開apache-jmeter-5.4.3\bin下的jmeter.properties
- 修改
server.rmi.ssl.disable=true
-
修改hostname為本機地址(如果有多個網卡,不指定hostname會報錯)
- 在服務器A打開apache-jmeter-5.4.3\bin下的system.properties
java.rmi.server.hostname=192.168.2.1
-
運行jmeter-server
2.Master節點
- 端口 udp 4445
- 添加負載機IP
- 打開jmeter.properties
- remote_hosts=192.168.2.1,192.168.2.2 ( Slave節點的ip地址)
- 關閉SSL
- 打開jmeter.properties
- server.rmi.ssl.disable=true
- 運行jmeter
- 設置test plan 線程組
- 點擊【運行】-【遠程啟動所有】
六、性能測試指標
1.每秒請求數 QPS
2.請求響應時間(最大、最小、平均)
3.錯誤率
4.機器性能 CPU idle 30%、內存memory無劇烈抖動或飆升
5.壓測過程接口功能是否正常
6.壓測過程
- 環境檢查:記錄機器參數
- 起壓:根據被壓情況,調節并發量到合適的情況
- 查看記錄各項性能指標
1. nginx日志查看每秒請求數
2. 查看nginx錯誤請求
3. 查看機器參數: cpu idle、men等
4. 查看db、cache等數據是否寫入正常
5. 訪問接口,查看功能是否正常
七、實戰
1.訪問接口
2.使用前置處理器動態生成參數
- 1.選中線程組
- 2.add -> Pre Processors-> JSR223 PreProcessor
- 3.添加腳本
import java.util.Random;
String phone_pre = '171';
Random random = new Random();
int rand01 = random.nextInt(10);
int rand02 = random.nextInt(10);
String timestamp = System.currentTimeMillis().toString();
String phone_end = rand01.toString() + timestamp.substring(7) + rand02.toString();
vars.put('phone_num',phone_pre+phone_end);
3.創建HTTP Request Defaults,統一設置ip地址
- 選中線程組
- ADD -> config Element(配置元件) -> HTTP Request Defaults(HTTP請求默認值)
- 填入協議、ip地址等
4.設置CSV Data Set Config,數據驅動
- 創建
5.訪問第二個接口
6.從上一個接口獲取參數傳遞給第二個接口(驗證碼)
- 選擇第一個接口的HTTP Requeest Defaults
- ADD -> POST Processors(后置處理器) -> JSON Extractor(JSON提取器)
- Names of created variables 輸入 auth_code
- JSON Path expressions 輸入 .data
7.創建全局的用戶變量(批量生成用戶名)
- 點擊進入 test plan 測試計劃
- 在【用戶定義的變量】ADD增加參數 user_prefix ,值設置為input_name
8.使用counter的方式去變量賦值
- 選中線程組
- ADD -> config element -> Counter
- 設置區間
- 【Exported Variable Name】 設置為user_id
9.第二個接口創建參數
- 參數名 username
- 值 ${user_prefix}${user_id}
10.對接口返回值進行驗證
- 選中HTTP Request
- ADD -> Assertion -> JSON Assertion
- Assert JSON Path exists 輸入 $.code
- Expected Value 輸入200
- 勾選 Additionally assert value
11.解析token
- ADD -> POST Processors -> JSON Extractor
- Names of created variables 輸入 【token】
- JSON Path expressions 輸入 【.data.token】
八、使用HTTP Cookie管理器
1.增加Cookie管理器
2.添加Debug Sampler調試
3.修改jmeter.properties的CookieManager.save.cookies為true,之后重啟jmeter

4.添加察看結果數
5. 添加http請求1
6. 添加http請求2
7. 運行請求,可以看到http請求2自動帶cookie(http請求1獲得的cookie)


浙公網安備 33010602011771號