🍅?點擊文末小卡片?,免費獲取軟件測試全套資料,資料在手,漲薪更快??
JMeter是Apache軟件基金會的開源項目,主要來做功能和性能測試,用Java編寫。
我們一般都會用JMeter在本地進行測試,但是受到單個電腦的性能影響,往往達不到性能測試的要求,無法有效的模擬高并發的場景,那么這個時候,我們就可以借由JMeter提供的Romote Test來進行遠程的測試。
其工作方式入下圖:
我們可以在多臺電腦上,啟動JMeter的Romote Testing模式,然后用某一臺服務器作為Master端通過RMI控制Slave端來執行我們的測試腳本。當JMeter Slave端執行完測試腳本后,會將執行結果發送回Master控制端進行匯總,得出整體的測試報表。
JMeter的Romote Test模式的好處就是可以用一臺終端、一個測試計劃在多臺服務器端同時對目標服務器進行測試,并且將測試的結果回報給統一的控制終端進行匯總,方便高并發的測試需求。
下面介紹下JMeter這種遠程測試的使用方法。
Step 1: 在Slave端安裝JMeter
JMeter可以從官網下載,下載地址:Apache JMeter - Download Apache JMeter
由于JMeter的運行需要Java環境,所以,服務器端也必須安裝Java。
注意:為了Remote Testing模式能正常工作,盡量保證Slave端和Master端的JMeter和Java版本一致。
Step 2: Slave端運行JMeter
在JMeter的bin目錄下,執行下面命令,就可以以服務的方式啟動JMeter的Slave端:
jmeter-server
JMeter Slave端,默認會啟動RMI(Remote Method Invoke)機制,RMI的默認端口為1029,可以在文件jmeter.properties中進行修改。
另外,從JMeter 4.0開始,RMI默認會使用SSL連接,為了能讓Slave端和Master端正常通訊,我們需要生成對應的keys和certificates。在JMeter的bin目錄下,自帶JKS(Java KeyStore)文件生成命令。
在JMeter的bin目錄下運行如下的命令,并按照提示符輸入相應的內容:
>bin % ./create-rmi-keystore.sh What is your first and last name?[Unknown]: rmiWhat is the name of your organizational unit?[Unknown]: unitWhat is the name of your organization?[Unknown]: orgWhat is the name of your City or Locality?[Unknown]: cityWhat is the name of your State or Province?[Unknown]: provWhat is the two-letter country code for this unit?[Unknown]: cnIs CN=rmi, OU=unit, O=org, L=city, ST=prov, C=cn correct?[no]: yesEnter key password for <rmi>(RETURN if same as keystore password): Re-enter new password: Copy the generated rmi_keystore.jks to jmeter/bin folder or reference it in property 'server.rmi.ssl.keystore.file'
注意:提示符里面的內容,第一條的名字和最后的密碼需要記錄下來,其他的內容可以任意填寫。
例如,我這里的第一條填寫的name是rmi,最后的密碼設置為changeit,如果你這里填了其他的值,那么,你需要將你的值寫到jmeter.properties文件中,分別對應兩個屬性:
server.rmi.ssl.keystore.aliasserver.rmi.ssl.truststore.password
最后,我們還需要按照提示,將生成的rmi_keystore.jks文件復制到需要連接的JMeter的bin目錄下。如果放到其他目錄下,我們需要在jmeter.properties文件中通過server.rmi.ssl.keystore.file指定.jks文件的目錄。
Step 3: Master控制Slave執行測試腳本
在Slave端啟動成功后,我們就可以嘗試在Master端進行連接控制。
首先,我們需要將遠程JMeter服務器(Slave端)的IP:Port添加到本地JMeter中,方式是修改本地bin目錄下的jmeter.properties文件,在其中找到remote_hosts,將自己的遠程JMeter的host和端口添加到這里,如果有多個,使用,分隔。
remote_hosts=<server ip>:1199
配置完成后,我們就可以運行命令來執行我們的測試計劃:
./jmeter.sh -n -t test.jmx -r
-r: 會控制在remote_hosts中配置的所有Slave端來執行我們的測試計劃test.jmx;
你也可以直接在命令行中來指定想要控制的遠程JMeter的具體IP:Port,命令如下:
./jmeter.sh -n -t test.jmx -R<IP>:1099
問題和解決方案
這里可能會出現很多問題,下面列出一些我踩過的坑:
- Master報連接被拒絕,這個時候你需要檢查防火墻設置,是否屏蔽了端口;
- Slave端啟動時,你會發現每次的端口都是隨機的,這個可能會造成每次都需要去修改防火墻的端口策略,我們可以通過修改jmeter.properties中的server.rmi.localport來設置一個固定端口號;
- 某些特殊情況,也會出現客戶端無法連接的問題,比如,有些服務器是有雙網卡的,這個時候,我們可能就需要指定JMeter啟動的服務器端的IP,配置的方式是修改bin/jmeter-server文件,將其中注釋的一行修改如下:
RMI_HOST_DEF=-Djava.rmi.server.hostname=1.2.3.4
這里的1.2.3.4為你要指定的網卡的IP。
最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:
這些資料,對于做【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!凡事要趁早,特別是技術行業,一定要提升技術功底。