JMeter簡介
JMeter基本概念
Apache JMeter是Apache組織開發(fā)的基于Java的壓力測試工具。用于對軟件做壓力測試,它最初被設(shè)計用于Web應(yīng)用測試,但后來擴展到其他測試領(lǐng)域。 它可以用于測試靜態(tài)和動態(tài)資源,例如靜態(tài)文件、Java 小服務(wù)程序、CGI 腳本、Java 對象、數(shù)據(jù)庫、FTP 服務(wù)器, 等等。JMeter 可以用于對服務(wù)器、網(wǎng)絡(luò)或?qū)ο竽M巨大的負載,來自不同壓力類別下測試它們的強度和分析整體性能。另外,JMeter能夠?qū)?yīng)用程序做功能/回歸測試,通過創(chuàng)建帶有斷言的腳本來驗證你的程序返回了你期望的結(jié)果。為了最大限度的靈活性,JMeter允許使用正則表達式創(chuàng)建斷言。
為什么要使用JMeter
- 開源免費,基于Java編寫,可集成到其他系統(tǒng)可拓展各個功能插件
- 支持接口測試,壓力測試等多種功能,支持錄制回放,入門簡單
- 相較于自己編寫框架活其他開源工具,有較為完善的UI界面,便于接口調(diào)試
- 多平臺支持,可在Linux,Windows,Mac上運行
JMeter安裝配置
Windowns下安裝
-
點擊下載,根據(jù)自己將要使用的平臺,下載相應(yīng)的文件
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下啟動負載生成器服務(wù)文件
- jmeter-server:Linux下啟動負載生成器文件
- /docs目錄——Jmeter幫助文檔
- /extras目錄——提供了對Ant的支持文件,可也用于持續(xù)集成
- /lib目錄——存放Jmeter依賴的jar包,同時安裝插件也放于此目錄
- /licenses目錄——軟件許可文件,不用管
- /printable_docs目錄——Jmeter用戶手冊
JMeter插件安裝
JMeter插件安裝很簡單,只需要下載相應(yīng)的插件解壓即可。
- 點擊下載
- 下載后解壓放入:apache-jmeter-2.12\lib\ext\目錄下
- 重啟jmeter
數(shù)據(jù)庫鏈接驅(qū)動如果需要需要專門下載,例如mysql需要jdbc的jar包,地址:http://dev.mysql.com/downloads/file/?id=462850
使用注意事項:添加第三方插件并使用后保存的jmx文件在未添加該插件的運行環(huán)境下會導(dǎo)致無法打開該文件并報錯,請保持環(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í)行 -> 啟動遠程服務(wù)
-H 代理主機 -> 設(shè)置 JMeter 使用的代理主機
-P 代理端口 -> 設(shè)置 JMeter 使用的代理主機的端口號
-j 日志文件->設(shè)置JMeter日志文件的名稱
JMeter分布式測試(windows下)
作為一個純 JAVA 的GUI應(yīng)用,JMeter 對于CPU和內(nèi)存的消耗還是很驚人的,所以當(dāng)需要模擬數(shù)以千計的并發(fā)用戶時,使用單臺機器模擬所有的并發(fā)用戶就有些力不從心,甚至還會引起JAVA內(nèi)存溢出的錯誤。不過,JMeter 也可以像 LoadRunner 一樣通過使用多臺機器運行所謂的 Agent 來分擔(dān) 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,并設(shè)置環(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)設(shè)置的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,并設(shè)置環(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,設(shè)置language=zh_CN
-
正則表達式
Jmeter9.jpg
引用名稱:代表下一個請求要引用的參數(shù)名稱,如填寫“openid”,那么則可用“${openid}”引用它。
正則表達式:
():括起來的部分就是要取的
.:匹配任何字符
+:一次或多次
?:在找到第一個匹配項后停止
模板:用$$引起來,$2$表示取第2個值給openid
匹配:匹配多個值時,0代表隨機取值,1代表取第一個
缺省值:如果參數(shù)沒有取到值,那就默認給它一個值 -
圖形結(jié)果
圖形結(jié)果.jpg
樣本數(shù)目:總共發(fā)送到服務(wù)器的請求數(shù)。
最新樣本:代表時間的數(shù)字,是服務(wù)器響應(yīng)最后一個請求的時間。
吞吐量:服務(wù)器每分鐘處理的請求數(shù)。
平均值:是總運行時間除以發(fā)送到服務(wù)器的請求數(shù),即每個請求的平均響應(yīng)時間。
中間值:是代表時間的數(shù)字,有一半的服務(wù)器響應(yīng)時間低于該值而另一半高于該值。
偏離:表示服務(wù)器響應(yīng)時間變化、離散程度測量值的大小,即數(shù)據(jù)的分布。 -
聚合報表
聚合報告.jpg
90%line:90%的響應(yīng)時間都比這個時間小
Min:代表時間的數(shù)字,是服務(wù)器響應(yīng)的最短時間。
Max:代表時間的數(shù)字,是服務(wù)器響應(yīng)的最長時間。
Error%:請求的錯誤百分比。
KB/sec:是每秒鐘請求的字節(jié)數(shù)。 操作mysql數(shù)據(jù)庫
操作數(shù)據(jù)庫基本有四個步驟:
- 導(dǎo)入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這一行,然后點擊連接

















