JMeter是Apache下一款在國外很是流行和受歡迎的開源性能測試工具,JMeter可用於模擬大量負載來測試一臺服務器,網絡或者對象的健壯性或者分析不一樣負載下的總體性能。html
一、壓測不一樣的協議和應用java
1) Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)mysql
2) SOAP / REST Webserviceslinux
3) FTPsql
4) Database via JDBC數據庫
5) LDAP 輕量目錄訪問協議apache
6) Message-oriented middleware (MOM) via JMSjson
7) Mail - SMTP(S), POP3(S) and IMAP(S)windows
8) TCP等等bash
二、使用場景
1)功能測試
2)壓力測試
3)分佈式壓力測試
三、優勢
1)純java開發
2)上手容易,高性能
3)提供測試數據分析
4)各類報表數據圖形展現
四、本地快速安裝Jmeter4.x
(1)須要安裝JDK8或者JDK9,JDK10
(2)快速下載
windows: http://mirrors.tuna.tsinghua....
mac或者linux:http://mirrors.tuna.tsinghua....
(3)、文檔地址:http://jmeter.apache.org/user...
(4)、配置環境變量(mac):
> vi .bash_profile export JMETER_HOME=/Users/xxx/applications/apache-jmeter-5.3 export PATH=.:$JMETER_HOME/bin:$PATH >source .bash_profile
簡介:講解jmeter解壓文件裏面的各個目錄,文件等
一、目錄
bin:核心可執行文件,包含配置
jmeter.bat: windows啓動文件:
jmeter: mac或者linux啓動文件:
jmeter-server:mac或者Liunx分佈式壓測使用的啓動文件
jmeter-server.bat:mac或者Liunx分佈式壓測使用的啓動文件
jmeter.properties: 核心配置文件
extras:插件拓展的包
lib:核心的依賴包
ext:核心包
junit:單元測試包
二、Jmeter語言切換
Jmeter默認是英文版本的,你想改爲中文版本能夠在控制檯:
固然若是你閒每次都手動修改語言麻煩,那麼能夠經過修改配置文件,直接設置成中文,設置方式:
右擊-->添加-->Threads(Users)-->線程組
下面對比較重要的幾個參數,講解下:
名稱: 就是給你這個線程組起名字。
線程數:指壓力測試時候模擬幾個用戶測試接口。
Ramp-Up:這裏指幾秒運行完上面的模擬用戶數。
循環次數:指循環幾回線程數。
總的理解下:上面的意思是2秒內模擬5個用戶請求API,循環2次。
在線程組上右擊-->添加-->Sampler-->HTTP請求
在java代碼中添加API接口
@RequestMapping(value = "users", method = RequestMethod.GET) @ResponseBody public Object users() { List<String> userList = new ArrayList<>(); userList.add("張三"); userList.add("李四"); userList.add("王五"); System.out.println("獲取用戶接口......"); return userList; }
在線程組
上右擊-->添加-->監聽器-->察看結果樹
運行JMter查看結果:
經過測試能夠發現,已經向users接口請求10次,10次都成功,也都有返回數據。
響應斷言: 斷言用於檢查測試中獲得的相應數據等是否符合預期,斷言通常用來設置檢查點,用以保證性能測試過程當中的數據交互是否與預期一致。
增長斷言: 在線程組上右擊--> 添加--> 斷言 --> 響應斷言
apply to(應用範圍):
Main sample only: 僅當前父取樣器 進行斷言,通常一個請求,若是發一個請求會觸發多個,則就有sub sample(比較少用)
經常使用響應字段:
響應文本:即響應的數據,好比json等文本
響應代碼:http的響應狀態碼,好比200,302,404這些
響應信息:http響應代碼對應的響應信息,例如:OK, Found
Response Header: 響應頭
模式匹配規則:
包括:包含在裏面就成功
equals:徹底匹配,區分大小寫
再次運行JMeter,查看結果:
發現http請求報錯,由於返回數據不包含斷言中所設定的數據。(通常調試階段能夠設置斷言,但真實壓力測試狀況下建議不要開啓斷言和查看結果樹,由於會由於性能問題,使測試結果不十分準確)
線程組右擊-->添加->監聽器->聚合報告(Aggregate Report)
lable: sampler的名稱
Samples: 一共發出去多少請求,例如5個用戶,循環2次,則是 10
Average: 平均響應時間
Median: 中位數,也就是 50% 用戶的響應時間
90% Line : 90% 用戶的響應不會超過該時間 (90%的樣本不超過這個時間。 剩下的樣本至少與此同樣長)
95% Line : 95% 用戶的響應不會超過該時間
99% Line : 99% 用戶的響應不會超過該時間
min : 最小響應時間
max : 最大響應時間
Error%:錯誤的請求的數量/請求的總數
Throughput: 吞吐量——默認狀況下表示每秒完成的請求數(Request per Second) 可類比爲qps
KB/Sec: 每秒接收數據量
爲何使用:不少變量在全局中都有使用,或者測試數據更改,能夠在一處定義,四處使用好比服務器地址你若是每個裏面都手動輸入127.0.0.1,那萬一那天服務器地址變了,總不能在一個一個改服務器地址
吧,那麼這裏咱們能夠寫在全局配置文件中。
線程組->add -> Config Element(配置原件)-> User Definde Variable(用戶定義的變量)
上面配置了兩個全局變量:
引用方式${XXX},在接口中變量中使用:
做用:你在API接口傳入參數的時候,不可能100次請求都傳同樣的參數,爲了更真是的模擬用戶,所傳的參數固然也是隨機的,這樣才更真實。
線程組右擊-->add -> Config Element(配置原件)--> CSV data set config (CSV數據文件設置)
比較關鍵的參數:
文件名:就是你引用的文件地址(由於大量的數據都會寫在外部文件中)
變量名稱:若是有多個用逗號隔開
分隔符:csv默認用逗號,若是是txt文件這個須要設置符號
一、user.csv文件
二、HTTP請求
三、API接口
@RequestMapping(value = "login", method = RequestMethod.POST) @ResponseBody public Object login(String name, String pwd) { List<String> userList = new ArrayList<>(); userList.add(name); userList.add(pwd); userList.add(name.length()+""); //輸出客戶端傳來的值 System.out.println("name:"+name+"----pwd:"+pwd); return userList; }
測試運行(看java控制檯)
在測試計劃(Test Plan)頁面添加jar包
添加線程組右擊-->添加(add)-->配置元件(config element)-->JDBC connection configuration
核心配置
variable name for created pool(已建立池的變量名稱)
Max Number of connections : 最大鏈接數
MAX wait :最大等待時間
Auto Commit: 是否自動提交事務
DataBase URL : 數據庫鏈接地址 jdbc:mysql://127.0.0.1:3306/blog
JDBC Driver Class : 數據庫驅動,選擇不一樣數據庫對應的驅動
username:數據庫用戶名
password:數據庫密碼
首先是添加線程組,而後右擊-->添加-->Samplar-->JDBC Request
參數講解:(注意:上面的sql結尾不要加";")
variable name of pool declared in JDBC connection configuration(注意:這裏要和上面的variable name for created pool裏面一致)
Query Type :查詢類型
parameter values: 參數值
parameter types :參數類型
variable names :sql執行結果變量名
result variable names: 全部結果當作一個對象存儲
query timeouts: 查詢超時時間
handle results :處理結果集
執行不一樣語句選擇不一樣的Query Type
數據庫信息
說明數據庫壓測成功