JMeter簡介
JMeter基本概念
Apache JMeter是Apache組織開發(fā)的基于Java的壓力測試工具某饰。用于對軟件做壓力測試蹋艺,它最初被設計用于Web應用測試剃袍,但后來擴展到其他測試領域。 它可以用于測試靜態(tài)和動態(tài)資源捎谨,例如靜態(tài)文件民效、Java 小服務程序、CGI 腳本涛救、Java 對象畏邢、數(shù)據(jù)庫、FTP 服務器检吆, 等等舒萎。JMeter 可以用于對服務器、網(wǎng)絡或?qū)ο竽M巨大的負載蹭沛,來自不同壓力類別下測試它們的強度和分析整體性能臂寝。另外,JMeter能夠?qū)贸绦蜃龉δ?回歸測試致板,通過創(chuàng)建帶有斷言的腳本來驗證你的程序返回了你期望的結(jié)果交煞。為了最大限度的靈活性,JMeter允許使用正則表達式創(chuàng)建斷言斟或。
為什么要使用JMeter
- 開源免費素征,基于Java編寫,可集成到其他系統(tǒng)可拓展各個功能插件
- 支持接口測試萝挤,壓力測試等多種功能御毅,支持錄制回放,入門簡單
- 相較于自己編寫框架活其他開源工具怜珍,有較為完善的UI界面端蛆,便于接口調(diào)試
- 多平臺支持,可在Linux酥泛,Windows今豆,Mac上運行
JMeter安裝配置
Windowns下安裝
-
點擊下載,根據(jù)自己將要使用的平臺柔袁,下載相應的文件
Jmeter1.jpg - 安裝JDK力喷,配置環(huán)境變量
- JAVA_HOME【C:\Program Files\Java\jdk1.8.0_73】
- classpath【.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar】
- Path【;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;】
-
解壓下載的JMeter壓縮包比驻,打開/bin/jmeter.bat
Jmeter2.jpg
Jmeter3.jpg
配置環(huán)境變量
JMETER_HOME【E:\1-必備工具\35-JMeter\apache-jmeter-4.0】
Path【;%JMETER_HOME%\bin】
其它平臺安裝
與windowns一致,除打開入口不同,如Linux下/bin/jmeter.sh
JMeter目錄結(jié)構(gòu)
- bin目錄常用文件介紹
- examples:目錄下包含Jmeter使用實例
- ApacheJMeter.jar:JMeter源碼包
- jmeter.bat:windows下啟動文件
- jmeter.sh:Linux下啟動文件
- jmeter.log:Jmeter運行日志文件
- jmeter.properties:Jmeter配置文件
- jmeter-server.bat:windows下啟動負載生成器服務文件
- jmeter-server:Linux下啟動負載生成器文件
- /docs目錄——Jmeter幫助文檔
- /extras目錄——提供了對Ant的支持文件蔼水,可也用于持續(xù)集成
- /lib目錄——存放Jmeter依賴的jar包牺荠,同時安裝插件也放于此目錄
- /licenses目錄——軟件許可文件,不用管
- /printable_docs目錄——Jmeter用戶手冊
JMeter插件安裝
JMeter插件安裝很簡單,只需要下載相應的插件解壓即可酝润。
- 點擊下載
- 下載后解壓放入:apache-jmeter-2.12\lib\ext\目錄下
- 重啟jmeter
數(shù)據(jù)庫鏈接驅(qū)動如果需要需要專門下載,例如mysql需要jdbc的jar包璃弄,地址:http://dev.mysql.com/downloads/file/?id=462850
使用注意事項:添加第三方插件并使用后保存的jmx文件在未添加該插件的運行環(huán)境下會導致無法打開該文件并報錯要销,請保持環(huán)境一致性。
JMeter命令行模式
- 配置環(huán)境變量
JMETER_HOME 【E:\1-必備工具\33-雜亂工具\apache-jmeter-4.0】
path 【;%JMETER_HOME%\bin】 - 命令:
jmeter -n -t <testplan filename> -l <listener filename> - 參數(shù):
-h 幫助 -> 打印出有用的信息并退出
-n 非 GUI 模式 -> 在非 GUI 模式下運行 JMeter
-t 測試文件 -> 要運行的 JMeter 測試腳本文件
-l jtl文件 -> 記錄結(jié)果的文件
-r 遠程執(zhí)行 -> 啟動遠程服務
-H 代理主機 -> 設置 JMeter 使用的代理主機
-P 代理端口 -> 設置 JMeter 使用的代理主機的端口號
-j 日志文件->設置JMeter日志文件的名稱
JMeter分布式測試(windows下)
作為一個純 JAVA 的GUI應用谢揪,JMeter 對于CPU和內(nèi)存的消耗還是很驚人的蕉陋,所以當需要模擬數(shù)以千計的并發(fā)用戶時,使用單臺機器模擬所有的并發(fā)用戶就有些力不從心拨扶,甚至還會引起JAVA內(nèi)存溢出的錯誤。不過茁肠,JMeter 也可以像 LoadRunner 一樣通過使用多臺機器運行所謂的 Agent 來分擔 Load Generator 自身的壓力患民,并借此來獲取更大的并發(fā)用戶數(shù)。
- 在所有期望將JMeter作為Load Generator(負載生成器)的機器上安裝JMeter垦梆,并確定其中一臺作為Controller匹颤,其他的機器作為Agent。然后運行所有Agent機器上的JMeter-server.bat文件(假定使用192.168.0.11和192.168.0.12作為Agent托猩,Agent機器上必須安裝JDK印蓖,并設置環(huán)境變量)
- 在Controller機器的%JMETER_HOME%\bin下,找到JMeter.properties文件京腥,編輯該文件赦肃,查找“remote_hosts=”這個字符串,可以找到這樣一行“remote_hosts=127.0.0.1”公浪。其中的127.0.0.1表示運行JMeter Agent的機器他宛,這里需要修改成為“remote_hosts=192.168.0.11:1099,192.168.0.12:1099”(其中1099為端口號)。一般資料顯示1644為JMeter的Controller和Agent之間進行通訊的RMI端口號欠气,但是在測試時發(fā)現(xiàn)設置的1644運行不成功厅各,改成1099后運行通過。
- 雙擊啟動Controller機器上的jmeter.bat预柒,選擇菜單Rum->Remote Start队塘,將會看到有兩臺Agent。
常見問題:
- 確定在controller機器上安裝jdk宜鸯,版本和jmeter一致憔古,配置環(huán)境變量:Java_home等
在Agent機器上安裝jdk,配置環(huán)境變量:Java_home和JMeter_home - 在Controller端上控制某臺機器Run顾翼,提示"Bad call to remote host"投放。
解決方法:檢查被控制機器上的jmeter-server有沒有啟動,或者JMeter.properties中remote_hosts的端口配置錯誤适贸。 - Agent機器啟動Jmeter_server.bat時灸芳,后臺提示:"could not find ApacheJmeter_core.jar"
解決方法:確定在Agent機器安裝jdk涝桅,并設置環(huán)境變量:java_home、path烙样、classpath和jmeter_home - 查看1099端口是否被占用
netstat -ano | findstr "1099"
tasklist | findstr "1099" -
啟動遠程時冯遂,報錯:
Jmeter6.jpg
只要將本機的jmter-server.bat執(zhí)行即可。要是在jmeter.properties配置的地方寫了127.0.0.1 的話就要開本機的 jmeter-sever.bat.谒获。不寫的話就不用開了蛤肌。
JMeter使用
- 切換中文
-
【Options】--> 【Choose Language】--> 【Chinese】
Jmeter5.jpg - Jmeter_home/bin/jmeter.properties,設置language=zh_CN
-
正則表達式
Jmeter9.jpg
引用名稱:代表下一個請求要引用的參數(shù)名稱批狱,如填寫“openid”裸准,那么則可用“${openid}”引用它。
正則表達式:
()
:括起來的部分就是要取的
.
:匹配任何字符
+
:一次或多次
赔硫?
:在找到第一個匹配項后停止
模板:用$$引起來炒俱,$2$表示取第2個值給openid
匹配:匹配多個值時,0代表隨機取值爪膊,1代表取第一個
缺省值:如果參數(shù)沒有取到值权悟,那就默認給它一個值 -
圖形結(jié)果
圖形結(jié)果.jpg
樣本數(shù)目
:總共發(fā)送到服務器的請求數(shù)。
最新樣本
:代表時間的數(shù)字推盛,是服務器響應最后一個請求的時間峦阁。
吞吐量
:服務器每分鐘處理的請求數(shù)。
平均值
:是總運行時間除以發(fā)送到服務器的請求數(shù)耘成,即每個請求的平均響應時間榔昔。
中間值
:是代表時間的數(shù)字,有一半的服務器響應時間低于該值而另一半高于該值凿跳。
偏離
:表示服務器響應時間變化件豌、離散程度測量值的大小,即數(shù)據(jù)的分布控嗜。 -
聚合報表
聚合報告.jpg
90%line
:90%的響應時間都比這個時間小
Min
:代表時間的數(shù)字,是服務器響應的最短時間茧彤。
Max
:代表時間的數(shù)字,是服務器響應的最長時間。
Error%
:請求的錯誤百分比疆栏。
KB/sec
:是每秒鐘請求的字節(jié)數(shù)曾掂。 操作mysql數(shù)據(jù)庫
操作數(shù)據(jù)庫基本有四個步驟:
- 導入mysql的jdbc的jar包,存放到\apache-jmeter-4.0\lib下壁顶;
-
創(chuàng)建數(shù)據(jù)庫的連接配置珠洗,線程組里添加配置元件-JDBC Connection Configuration;
JDBC.jpg -
線程組里添加jdbc request若专,寫sql語句许蓖;
JDBC_1.jpg -
添加察看結(jié)果樹,點擊啟動按鈕,就能看到執(zhí)行的SQL膊爪。
JDBC_2.jpg
特別說明:jmeter還可以操作oracle自阱、postgreSQL、msSQL米酬、mongodb等等數(shù)據(jù)庫沛豌,同時不同的數(shù)據(jù)庫,JDBC Connection Configuration填寫的Database url格式和JDBC Driver驅(qū)動名稱也不相同赃额。jmeter數(shù)據(jù)庫驅(qū)動列表如下表所示:
JDBC_3.jpg
JDBC Driver class是固定的加派,Jmeter操作各類數(shù)據(jù)的Driver參考下圖;
jdbc_4.jpg
- 利用函數(shù)助手獲取參數(shù)值
選項->函數(shù)助手對話框
__CSVRead
生成的函數(shù)字符串: ${__CSVRead(,)}第一個參數(shù)是文件名(包含路徑)跳芳,第二個參數(shù)是文件中的列(列數(shù)從0開始)芍锦;
csvread.jpg
csvread1.jpg
__Random
生成的函數(shù)字符串:${__Random(,,)}第一個參數(shù)為隨機數(shù)的下限,第二個參數(shù)為隨機數(shù)的上限筛严,第三個參數(shù)為儲存隨機數(shù)的變量名醉旦;
-
利用配置元件(CSV Data Set Config)
選中線程組,右擊桨啃,添加->配置元件->CSV Data Set Config
csv.jpg
選中線程組,右擊檬输,添加->sampler->HTTP 請求照瘾,在http請求參數(shù)中引用變量
-
用戶自定義變量
選中純種組,右擊丧慈,添加->配置元件->用戶自定義變量
用戶自定義變量.jpg
- HTTP Cookie Manager
用于需要登錄cookie的接口中
JMeter使用注意事項
變量問題
使用過程中析命,一定要注意控件的執(zhí)行順序以及變量的作用域。路徑問題
Windows下支持"/"""并存模式逃默,推薦使用"/"鹃愤,方便跨平臺使用。
在linux格式下支持"/"格式完域。Jmeter自身性能問題
命令行模式:命令相同软吐。
UI模式:操作方式相同,但會存在windows下能打開linux下打不開的情況吟税,暫不知道原因凹耙。
監(jiān)控內(nèi)存及CPU等(jconsole)
-
直接點擊:開始——》運行——》輸入cmd——》然后在出現(xiàn)的命令行界面輸入“jconsole”即可彈出一個【java監(jiān)視和管理控制臺】
3.jpg - 選擇本地進程,并點擊一下sun.tools.jconsole.JConsole這一行肠仪,然后點擊連接