『壹』 今天安裝了Jmeter,如何測試Jmeter是否安裝成功呢
linux環境還是windows環境?
如果是linux環境,到bin目錄下:./jmeter.sh XX.jmx(所要運行的測試腳本,沒有的話,examples目錄下有個)
如果有進程啟動,且jmeter.log中沒有錯誤信息就安裝成功了;
如果是windows環境,雙擊「jmeter.bat」文件,如果彈出對話框,就成功了
『貳』 Jmeter 問題錦集
java.io.FileNotFoundException:rmi_keystore.jks
文件校驗問題
1、不進行文件校驗,打開 [ jmeter 安裝目錄 ]\bin\jmeter-server.bat 文件
2、運行 create-rmi-keystore.bat (Windows)/ create-rmi-keystore.sh (Linux) 文件並自行填寫相關信息,運行後,bin 目錄下會多出一個 rmi_keystore.jks 文件,然後將這個文件拷貝到想要運行的 slave 機上,就可以不使用方法1
Error in rconfigure() method java.rmi.ConnectException: Connection refused to host: 192.168.xxx.xxx; nested exception is:
java.net.ConnectException: Connection timed out: connect
1、192.168.xxx.xxx 這個IP 可能是虛擬網卡的 IP,關閉所有的虛擬網卡,只保留本地網路
2、檢查slave伺服器的防火牆是否打開,需要關閉
3、通信雙方的機器沒有識別到有效的遠程IP,考慮將遠程方法調用伺服器的主機IP進行固定設置,再作效果檢查
4、開始測試,但是測試速度非常慢,測試結果也是非常大的值,檢查slave伺服器和被測試伺服器之間是否可以 ping 通地址
第3點分析相應解決方法:
Master機修改 jmeter.bat (windows)/ jmeter.sh (Liunx)
Error in rconfigure() method java.rmi.ConnectException:Connection refused to host
1、查看埠是否被佔用
1、更換埠
java.net.ConnectException:Connection timed out:connect
由於連接被拒絕,這意味著防火牆可能已切斷連接
需要在JMeter和目標伺服器之間打開埠
Response too large to be displayed. Size: 412152 > 204800
未設置察看結果樹的大小
1、打開 [ jmeter 安裝目錄 ]\bin\user.property 文件
2、右擊測試用例——添加——監聽器——保存響應到文件, 填寫要保存的文件名
3、將文件中的返回結果粘貼到此用例的響應斷言中
Not able to find Java executable or version. Please check your Java installation. errorlevel=2
1、errorlevel=1,當前系統安裝的 jdk 版本過低
2、errorlevel=2,沒有配置 jdk 環境變數所致
3、errorlevel=3,當前系統安裝的 jdk 版本過低,不符合 jmeter 要求所致
通用方法:
配置對應這個 jmeter 版本的 jdk 版本的環境變數
第1點分析,其他解決方法:
打開 jmeter.bat 文 件,注釋 set DUMP=-XX:+HeapDumpOnOutOfMemoryError
Bad call to remote host
1、檢查 salve 機器上的 jmeter-server 是否啟動
2、檢查 JMeter.properties 中 remote_hosts 的配置是否錯誤
1、啟動 salve 機器上的 jmeter-server
2、正確配置 JMeter.properties 中 remote_hosts
1、Non HTTP response message: The target server failed to respond
2、Non HTTP response code: java.net.SocketException
調整超時時間,jmeter 的 http 請求中,工具會默認勾選 Use KeepAlive ,在運行時,jmeter.properties 中的 httpclient.timeout 設置默認是注銷的,也就是連接空閑,立馬斷開
打開 [ jmeter 安裝目錄 ]\bin\jmeter.properties 文件
根據情況設置10-60毫秒,能解決報錯問題,問題還是沒有真正解決
Server failed to start: java.rmi.RemoteException: Cannot start. *** is a loopback address.
An error occurred: Cannot start. *** is a loopback address.
沒有指定主機導致這個錯誤
1、修改 hosts 文件
2、打開 [ jmeter 安裝目錄 ]\bin\jmeter.properties 文件
Waiting for possible shutdown message on port 4445
在 master 跑測試腳本時,會一直提示如下信息,導致測試一直跑不起來
這個是用於監聽shutdown message的,如果不需要,可以直接設置為0即可
打開 [ jmeter 安裝目錄 ]\bin\jmeter.properties 文件
Could not reserve enough space for 2097152KB object heap
errorlevel=1
Jmeter 內存不足
打開 [ jmeter 安裝目錄 ]\bin\jmeter.bat 文件
could not find ApacheJmeter_core.jar
找不到 jdk 環境
1、正確安裝對應版本的 jdk
2、正確設置環境變數
jmeter.gui.action.RemoteStart: Failed to initialise remote engine java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
配置了 127.0.0.1,但是未開啟本機的 jmeter-sever.bat/jmeter-sever
開啟本機的 jmeter-sever.bat/jmeter-sever
運行成功,響應斷言也正確通過,但是察看結果樹里為空
模式(Mode)(采樣結果發送模式)默認是Standard,在采樣結果產生後立即發送
打開 [ jmeter 安裝目錄 ]\bin\jmeter.properties 文件
Response code: Non HTTP response code: java.net.SocketTimeoutException
Response message: Non HTTP response message: connect timed out
發生該錯誤時,jmeter已經連接上伺服器,查看load time沒有超過設定的request timeout時間,錯誤可能的原因是,伺服器那邊未處理該線程的請求,或者為保證服務能力,斷掉了連接。
為了驗證該猜想,持續大於半小時向伺服器發送該並發數量的請求,一段時間後,request收到503的response,證明猜想
無
Java.NET.BindException: Address already in use: connect
短時間內new socket操作很多,而socket.close()操作並不能立即釋放綁定的埠,而是把埠設置為TIMEWAIT 狀態,過段時間(默認240s)才釋放,(用netstat -na可以看到),最後系統資源耗盡(windows上是耗盡了pool of ephemeral ports ,這段區間在1024-5000之間)
在運行 JMeter agent 的機器上,添加註冊表條目HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
jmeter腳本運行的過程中,伺服器性能參數沒有明顯變化 (CPU,內存,I/O),但request的響應時間很長。
觀察jmeter agent機器網路使用情況,網路使用持續達到帶寬的限制峰值。request 發送的過程中pending在網路中,實際並發的request並沒有同一時間到達伺服器,所以伺服器沒有明顯變化。
提高jmeter agent機器網路帶寬。
java.io.IOException: Error writing to server
java.net.SocketException: Connection reset
可能是本機的 JVM 太小了
打開 [ jmeter 安裝目錄 ]\bin\jmeter.bat 文件
java.net.SocketException: Unrecognized Windows Sockets error: 0: recv failed
無
打開 [ jmeter 安裝目錄 ]\bin\jmeter.properties 文件
java.net.SocketTimeoutException: Read timed out
無
打開 [ jmeter 安裝目錄 ]\bin\jmeter.properties 文件
For performance it is advised to check "Interpret Condition as Variable Expression"
and use __jexl3 or __groovy evaluating to true or false or a variable that contains true or false.
${JMeterThread.last_sample_ok) can be used to test if last sampler was successful
對於4.x之後的版本 JMeter 中的 If Controller,在Expression輸入框中直接輸入判斷的表達式,如1 == 1、${threadNum} > 2,而不做求值計算(true/false)就執行JMeter是沒有效的,達不到預期的效果。採用JMeter比較早期的版本(如:2.x版本),直接就寫判斷的表達式,並沒有作真假求值運算也能被識別
1、在Expression輸入框中,建議將判斷條件解釋為變數表達式,並使用__jexl3函數或__groovy函數對該變數表達式求值為true/false
2、可輸入值為true/false的變數
3、${JMeterThread.last_sample_ok}可用於檢測最後一個取樣器是否成功執行
java.lang.IllegalStateException: Engine is busy - please try later
1、可能是防火牆規則被阻止
2、控制機、執行機未設置需要連接的IP
1、關閉控制機、執行機的防火牆
2、打開 [ jmeter 安裝目錄 ]\bin\jmeter-server 文件
3、打開 [ jmeter 安裝目錄 ]\bin\system.properties 文件
Response code: Non HTTP response code:org.apache.http.conn.ConnectTimeoutException
Response message: Non HTTP responsemessage: Connect to 10.15.107.112:9089 timed out
Non HTTPresponse code 說明沒有收到來自伺服器的 response。
導致 ConnectTimeoutException 錯誤的可能有 JMeter 本身問題,也可能是伺服器問題。
通過分布式運行 JMeter 的方式來消除 JMeter 本身的影響
『叄』 JMeter基礎
一、Jmeter簡介
—-->生成不同格式的測試報告
以WEB性能測試為例:jmeter可以作為web伺服器與瀏覽器之間的代理網關,以便捕獲瀏覽器的請求和web伺服器的響應,如此就可以很容易地生成性能測試腳本。有了性能測試腳本,jmeter就可以通過線程來模擬真實用戶對web伺服器的訪問壓力。這與LoadRunner的工作原理基本一致( 向伺服器提交請求;從伺服器獲取請求返回的結果 )
二、JMeter下載安裝
1、安裝環境要求
Unix(Solaris,Linux,etc) 、 Windows(98,NT,2000,XP,WIN8)
2、JDK下載、安裝
右鍵計算機屬性->高級系統設置->系統屬性->高級->環境變數->添加如下的系統變數:
變數值:D:Program FilesJavajdk1.8.0_92【jdk安裝路徑】
變數值: .;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar;
運行cmd->輸入java -version->顯示java版本就表示jdk安裝成功
3、JMeter下載安裝
4、JMeter環境配置
變數值:E:apache-jmeter-4.0 (就是jmeter保存的路徑,即jmeter解壓路徑)
如:JMETER_HOME=D:apache-jmetesapache-jmeter-4.0
變數值:
;%JMETER_HOME%/lib/ext/ApacheJMeter_core.jar;%JMETER_HOME%/lib/jorphan.jar;%JMETER_HOME%/lib/logkit-2.0.jar
5、Jmeter 的Bin目錄下的幾個重要文件
6、啟動Jmeter
三、JMeter組件介紹 (JMeter常用組件)
1、測試計劃(Test Plan)
註:什麼是元素?
JMeter的不同組件稱為Elements。 每個元素都是為特定目的而設計的。
2、線程組(Threads)
例如,如果將線程數設置為100; JMeter將創建並模擬100個用戶對被測伺服器的請求
所有的控制器和取樣器都是在某個線程組下;
3、邏輯控制器(Logic controller)
邏輯控制器允許在線程中定義處理請求的順序。它允許控制「何時」將用戶請求發送到Web伺服器。例如,可以使用隨機控制器隨機向伺服器發送HTTP請求
例如:我們在收郵件時,只需要登錄一次郵箱既可查看多封郵件。如果這個場景我們在Jmeter中實現,我們需要控制登錄的次數,如何實現呢?Jmeter邏輯控制器中的僅一次控制器就可以完成。當然了,控制器不只是這一個,還有很多其他的控制器來完成我們的各種需求。
除了為「線程組」指定的循環值之外,循環控制器使取樣器運行一定次數。例如,如果你
將一個HTTP請求添加到循環控制器,循環計數為50
將「線程組」循環計數配置為2
然後,JMeter將發送總共50 * 2 = 100個HTTP請求。
除了循環值= 2,你為上面的線程組指定。所以JMeter將發送總共2 * 50 = 100個HTTP請求。
又如:線程組中設置循環次數3,循環控制器中設置循環測試2,
即:線程組的循環與循環控制器為父子關系,且循環控制器只對子請求有效
註:錄制腳本的循環按循環控制器中的調協循環
作為循環控制器的子節點,僅一次控制器在每循環的第一次迭代時均會被執行
HTTP請求、FTP請求、JDBC請求
這3個請求應該運行5次; JMeter將向伺服器發送總共5個用戶請求。
按順序,按以下順序依次發送請求:HTTP請求 - > FTP請求 - > JDBC請求,對於每個循環按隨機順序,請求隨機發送,FTP請求 - > HTTP請求 - > JDBC請求 或 JDBC請求 - > FTP請求 - > HTTP請求等
4、配置元件(Config element)
比如CVS Data Set Config,它可以幫助我們從文件中讀取測試數據。另外Jmeter也提供了眾多的函數來幫我們生成動態數據。
緩存管理器),自動記錄伺服器返回的Cache信息。簡單說就是它為取樣器提供預備數據,然後由取樣器
發出請求。
入不同的登錄憑據。 該登錄信息(例如,用戶名,密碼)可以存儲在文本文件中。 JMeter有一個元素,允許您從該文本文件中讀取不同的參數。 它是「CSV數據集配置」,用於從文件中讀取行,並將它們拆分為變數。
這是CSV數據的示例。 這是一個文本文件,其中包含用於登錄目標網站的用戶和密碼
密碼將作為cookie存儲在計算機中。下次訪問 www..com 時 ,無需再次登錄,因為在瀏覽器將使用您的Cookie作為用戶數據登錄。
Cookie管理器會自動存儲該cookie,並將其用於將來對該特定網站的所有請求。
此元素允許您設置HTTP請求控制器使用的默認值
server name = google.com
PS:在執行順序方面有個例外,配置元件"用戶定義的變數"無論它處於測試樹的哪個位置,總是在測試的初始階段執行。所以個人建議把它放在線程組的開始部分。
5、定時器(Timer)( 固定定時器:思考時間 )
JMeter向http://www..com創建一個用戶請求100次
每個用戶請求之間的延遲為5000毫秒
6、前置處理器(Per processors)
7、取樣器(Samples)
您將FTP「下載文件」或「上載文件」請求發送到FTP伺服器。
JMeter將FTP命令發送到FTP伺服器ftp.example.com ,然後從該伺服器下載文件Test.txt。
您可以配置JMeter將SQL查詢發送到此伺服器以檢索數據。
如果要測試郵件伺服器,可以使用SMTP采樣器。 此采樣器用於使用SMTP協議發送電子郵件
8、後置處理器(post processors)
9、斷言(Assertions)
用過LR的讀者應該會知道檢查點這個功能,可以幫助我們來判斷請求是否成功返回且是否符合要求,在Jmeter中我們不叫檢查點,我們叫斷言,接觸過selenium的也會懂這個概念。就是用一個預設的結果(值、表達式、時間長短等條件)與實際結果匹配,匹配到則成功,反之失敗。
APPly to: 適用范圍
Main sample and sub-samples:作用於父節點取樣器及對應子節點取樣器
Main sample only:僅作用於父節點取樣器
Sub-samples only:僅作用於子節點取樣器
JMeter Variable:作用於jmeter變數(輸入框內可輸入jmeter的變數名稱)
要測試的響應欄位: 要檢查的項
響應報文
Documeng(text):測試文件
URL樣本
響應代碼
響應信息
Response Headers:響應頭部
Ignore status:忽略返回的響應報文狀態碼
模式匹配規則:
包括:返回結果包括你指定的內容
匹配:(好像跟Equals查不多,弄不明白有什麼區別)
Equals:返回結果與你指定結果一致
Substring:返回結果是指定結果的字串
否:不進行匹配
要測試的模式: 即填寫你指定的結果(可填寫多個),按鈕【添加】、【刪除】是進行指定內容的管理
10、監聽器(Listener)
「圖形結果」偵聽器在圖形上顯示伺服器響應時間
「查看結果樹」以基本HTML格式顯示用戶請求的結果(View Results Tree)
通過察看結果樹,我們可以看到每個請求的結果,其中紅色的是出錯的請求,綠色的為通過。
Thread Name:線程組名稱
Sample Start: 啟動開始時間
Load time:載入時長
Latency:等待時長
Size in bytes:發送的數據總大小
Headers size in bytes:發送數據的其餘部分大小
Sample Count:發送統計
Error Count:交互錯誤統計
Response code:返回碼
Response message:返回信息
Response headers:返回的頭部信息
這里綠色的就說明請求是通過的,返回值是200,如果出現紅色的 就說明請求失敗,這時候可以通過右邊的取樣器結果和響應數據來查看結果。
用表格可看結果(View Results in Table)
四、組件執行順序
在同一作用域名范圍內(不考慮邏輯控制器),測試計劃中的元件按照如下順序執行。
(1)配置元件(config elements )
(2)前置處理程序(Per-processors)
(3)定時器(timers )
(4)取樣器(Sampler)
(5)後置處理程序(Post-processors) (除非Sampler 得到的返回結果為空)
(6)斷言(Assertions)(除非Sampler 得到的返回結果為空)
(7)監聽器(Listeners)(除非Sampler 得到的返回結果為空)
問題
1、為什麼要使用jmeter?他可以幫我們解決那些事情?
jmeter主要是做介面測試和性能測試,它支持的協議也不少,用來測試http,資料庫並發都是很方便快捷的工具,相對於lr來說更靈活與實用,等等
2、我們在什麼時候會使用jmeter?
· 在一個項目中我們可能前段還沒有開發完畢我們想看一下伺服器的相應數據。
· 比如我們校驗資料庫有沒有做校驗,我們可以繞過前端
· 我們想看一下這個介面或者多個介面的並發量是多少,性能怎麼樣
3、.誰在使用?為什麼是他在使用?
一般使用者為開發人員或者測試人員。
開源免費,基於Java編寫,可集成到其他系統可拓展各個功能插件
支持介面測試,壓力測試等多種功能,支持錄制回放,入門簡單
相較於自己編寫框架活其他開源工具,有較為完善的UI界面,便於介面調試
多平台支持,可在Linux,Windows,Mac上運行
4、使用jmeter需要了解什麼?介面與介面之間的聯系怎麼處理?
· 我們必須了解介面的工作原理
· 需要掌握http中的get和post請求原理
· 需要掌握請求頭,響應頭,請求體個個欄位代表什麼意思,並且欄位的返回值的各代的含義是什麼?
· 響應的狀態碼各代表什麼含義·
· json是什麼?
· 介面測試用例的設計方法,以及測試時點
介面之間的聯系:
介面與介面之間存在聯系,比如上個介面的返回值是下一個介面的入參,那我們就要在上個介面返回值賦值變數,供下一個介面調用。
5、在使用jmeter中我想要的預期結果和實際結果是怎樣對比的?
· 我們做所有的測試無非就是預期結果和實際結果作對比,如果預期結果和實際結果作對比,那麼這個介面就是可用的,不相等那麼這個介面就是有問題的。
·在jmeter中我們的用斷言做實際結果和預期結果的對比,它提供了許多斷言方法,其中最常用的就是響應斷言,在後面我會專門的寫一下響應斷言以及一些常用斷言的用法。
· 我們還需要知道在jmeter中我們斷言的內容是啥?這點是很重要的
7、使用jmeter的是的我們的有哪些方面的提升,jmeter的主流方向是什麼?
· 對整個前端與後端的一個相互傳輸數據原理有了進一步了解
· 可以提高測試效率,可以提早的參與進來,較早的發現問題,減少開發成本,縮短整個產品的上線周期,可以給測試流出充裕的時間,保證產品質量。
·掌握了介面測試的測試點,已及用例的設計方法。
jmeter測試的主流方向:
· 用於性能測試,壓力測試
· 介面測試
『肆』 linux下怎麼打開JmeterGUI界面 解壓完成 win下直接雙擊jmeter.bat 在Linux下呢
Ubuntu下啟動已安裝的軟體可以通過終端進入該軟體目錄,命令運行,或者建快捷方式(跟Windows下類似),這里以Firefox為例:
終端啟動軟體方法:
1.把Firefox安裝文件拷貝到/usr/local目錄下
1
sudo mv Firefox**.tar.gz /usr/local
2.進入/usr/local,解壓Firefox**.tar.gz
1
sudo tar -jxvf Firefox**.tar.gz
3.進入Firefox目錄,運行firefox
12
cd Firefox./firefox
建立桌面快捷方式:
1.創建一個文件名為Firefox.desktop文件,將下面的代碼拷貝進去
12345678910111213141516171819
[Desktop Entry]Categories=Development;Comment[zh_CN]=Comment=Exec=/usr/local/Firefox #Exec=軟體執行文件的路徑GenericName[zh_CN]=IDEGenericName=IDEIcon=/usr/local/Firefox/icon.xpm #Icon=快捷方式圖標MimeType=Name[zh_CN]=eclipseName=火狐瀏覽器 #Name=快捷方式名稱Path=StartupNotify=trueTerminal=falseType=ApplicationX-DBUS-ServiceName=X-DBUS-StartupType=X-KDE-SubstituteUID=falseX-KDE-Username=owen
2.給文件添加可執行許可權
1
chmod +x Firefox.desktop
3.將該文件復制到桌面
註:在ubuntu11.04之前的版本中,有更簡單的方法來創建桌面快捷方式:右鍵點擊桌面-創建啟動器即可。