一、gui
jmeter的gui主要用來調試腳本
1、先gui創建腳本
先做一個腳本
演示:如何做混合場景的腳本?
用211的業務比例
①啟動數據庫服務
數據庫服務:包括mysql、redis
mysql端口默認3306
netstat -lntp | grep 3306
處于監聽狀態,6379是redis的默認端口
netstat -lntp | grep 6379
項目服務端口18089
netstat -lntp | grep 18089
②訪問接口文檔swagger
211可以轉換出兩個壓測的業務
一個是注冊,一個是注冊登錄添加商品
兩個分別是50%
③添加線程組
jmeter—添加線程組–添加–線程–用戶–線程組
轉換出兩個壓測業務
④添加吞吐量控制器
jmeter—添加-邏輯控制器–吞吐量控制器
轉換出兩個壓測業務.
第一個壓測業務是包括注冊、登錄、添加商品
第二個壓測時業務是注冊
各自50%
⑤添加取樣器http請求
jmeter—添加-取樣器–http請求
轉換出兩個壓測業務
第一個壓測業務是包括注冊、登錄、添加商品
第二個業務是注冊
根據注冊swagger、來寫,入參
一般插入id可以不用填寫
addtime也可以不用填寫
復制粘貼入參數據到jmeter中
路徑根據url
⑥添加http信息頭管理器、
都是傳json
⑦添加http請求默認值
根據接口文檔填寫ip和端口
⑧添加監聽器,查看結果樹
⑨添加斷言
斷言最好都添加上
二、非gui
-n非gui模式執行jmeter
-t執行測試文件所在的位置,指定要運行jmeter的腳本,不在當前路徑,需要將完整路徑寫出
-l指定生成的結果文件,即就是jtl文件
-e測試結束后,生成測試報告
-o指定測試報告html的存放位置
-r遠程啟動
1.單機壓力機
①申請壓力機
linux壓力機上安裝jdk、jmeter
在usr/local下安裝
直接將window上的jmeter上傳到linux壓力機上,因為調試腳本涉及到的插件也可用上
②腳本上傳到壓力機
注:如果腳本涉及到csv參數文件,需要將csv’參數文件上傳至linux下jmeter的bin目錄下
上傳前需要將聚合報告,監聽器禁用
5個線程,每30s加一個,即就是150
持續時間需要大于Rang up時間150,再運行50秒,就設置200
jmeter上傳成功后驗證一下jmeter版本、是否可用
③初始化
有兩個地方
第一個,存放測試腳本的路徑需要創建一個存放html報告的目錄
在運行腳本之前,res目錄下必須為空
第二,再不考慮存量數據的情況下,將數據庫表中的數據清理
④執行腳本
⑤查看結果
結果
在13s內完成548次請求
打開聚合報告
ko失敗的請求數量
resopntime響應時間
tps
怎么查看jtl文件?
jtl可以在任意監聽器打開,如查看結果樹、聚合報告、tps、響應時間。
如在聚合報告中打開,點擊瀏覽
如tps、響應時間
先看tps
添加tps
點擊瀏覽
響應時間
2.分布式
有的時候一個壓力機達不到目標,就需要用到分布式
畢竟單機資源有限,比較難以支持較大的并發,單機的壓力機也是有瓶頸
2.1分布式原理
官網:https://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html
一臺服務機作為控制機
其余機器都是作為負載機
targe請求的服務
控制器通過發送信號遠程控制負載機的啟動和停止,同時收集負載機數據及匯總
負載機主要是啟動線程來訪問服務器,及被壓測服務器target
一般在worker一般是啟動jmeter-server控制機遠程控制負載機,負載機啟動線程請求target獲取數據后回傳給控制機
分布式時腳本放在哪里?
一個controller多個worker
執行非gui時,腳本傳到服務器上,現在是分布式,腳本應該傳到哪里?
會將腳本傳到controller控制機上,執行時會把腳本發到每個負載機即每個worker,負載獲取到腳本后開始執行腳本,執行完后將數據傳給控制機進行匯總。
2.2分布式壓測注意事項
防火墻需要進行關閉,防火墻若不關閉,端口需要打開。
所有的客戶端要在同一子網上。
確保jmeter可以訪問server
確保jmeter與java版本一樣
禁用ssl
2.3環境準備
需要3個虛擬機
用 181做Controller(控制機)
用182,183做Worker (負載機)
同時這三個虛擬機都要安裝jdk,jmeter
查看jdk版本
三臺虛擬機安裝jmeter
本機的jmeter傳到虛擬機的usr/local目錄下
上傳完后查看jmeter版本
2.4 分布式配置
①Worker
182、182
先備份配置文件jmeter.properties
server_port可以修改,也可以不修改默認為1099
禁用ssl
server.rmi.ssl.disable=false,將false改為true
啟動jemter
./jmeter-server
在182上看端口是否處于監聽狀態
驗證
控制機telnet負載機,看端口通不通
②Controller
配置控制機前先在window上的jmeter上進行調試
win:用于調試
先備份配置文件jmeter.properties
默認是本機作為負載機
現在的負載機是遠程負載機,將remote_hosts=127.0.0.1改成remote_hosts=192.168.117.182:1099
這里必須寫遠程負載機的ip和端口,多個就以逗號分隔
禁用ssl
將server.rmi.ssl.disable=false改成server.rmi.ssl.disable=true
先通過本機調試一下
jmeter重啟一下,重新讀取配置文件
在window上調試完后就去linux下進行配置
181上進行配置
先備份配置文件jmeter.properties
現在的負載機是遠程負載機,將remote_hosts=127.0.0.1
改成remote_hosts=192.168.117.182:1099
這里必須寫遠程負載機的ip和端口,多個就以逗號分隔
server.rmi.ssl.disable=false
將server.rmi.ssl.disable=false
改為server.rmi.ssl.disable=true
腳本傳到控制機上,會自動將腳本分發到各個負載機上。
單獨的測試單場景登錄
上傳完腳本、執行腳本
通過遠程負載去進行執行
/usr/local/apache-jmeter-5.1.1/bin/jmeter -n -r -t test.jmx
每個work負載機(壓力機)5個線程,到總的控制機匯總10個線程
環境準備
兩個虛擬機。1個master,兩個slave,Windows本機作為1個master,slave就用虛擬機。
原理:https://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html
出現的問題:
java.rmi.RemoteException: Cannot start. localhost.localdomain is a loopback address
Created remote object: UnicastServerRef2 [liveRef: [endpoint:127.0.0.1:43474,objID:[-5a8dd143:17e2852fe88:-7fff, 3673082414768940798]]]
Server failed to start: java.rmi.RemoteException: Cannot start. localhost.localdomain is a loopback address.
An error occurred: Cannot start. localhost.localdomain is a loopback address.
異常信息:服務器啟動異常:java遠程方法調用拋出異常:無法啟動服務。localhost.localdomain是一個本地環回地址
通過hostname命令獲取到的主機名是localhost
通過命令cat /etc/hosts查看hosts配置,localhost localhost.localdomain localhost4…指向的是127.0.0.1
解決方法:
指定遠程服務器主機的IP地址(rmi.server.hostname)
通過終端命令指定來啟動
./jmeter-server -Djava.rmi.server.hostname=192.168.2.2