- 摘要:最近根據公司工作的需求,學習了一些壓力測試的知識,目前,公司使用的是jmeter進行壓力測試。下面就記錄下近期的學習。我想將這次的博文分成三個部分:1、開始測試前的准備(測試環境的搭建)2、在一台linux上測試3、多台linux分布式測試首先來看看測試環境的搭建。我是自己創建的linux虛擬機,所以就用它來說說吧。安裝linux的過程就不多說了,不是本次的重點,有不太明白的朋友,可以自己去百度下,或者我有一篇文章也大概記錄了我的安裝過程,可以參考下。linux安裝好之后,我
-
最近根據公司工作的需求,學習了一些壓力測試的知識,目前,公司使用的是jmeter進行壓力測試。下面就記錄下近期的學習。
我想將這次的博文分成三個部分:
1、開始測試前的准備(測試環境的搭建)
2、在一台linux上測試
3、多台linux分布式測試
首先來看看測試環境的搭建。我是自己創建的linux虛擬機,所以就用它來說說吧。
安裝linux的過程就不多說了,不是本次的重點,有不太明白的朋友,可以自己去百度下,或者我有一篇文章也大概記錄了我的安裝過程,可以參考下。
linux安裝好之后,我們需要安裝jdk,因為jmeter是依賴於jdk運行的。由於我們的測試case都是在windows上利用jmeter寫好之后上傳到linux上跑的,所以,為了避免不必要的錯誤,windows和linux的jdk和jmeter版本要保持一致。
JDK的安裝
找到自己想要的版本,在linux的/usr/下新建一個文件夾,名字自己取,用來放jdk安裝包和安裝jdk使用(我使用的是/usr/java/)。然后將安裝包放到linux的/usr/java/下,然后執行下面命令進行jdk的安裝:
tar -zxf
jdk name 就是你要安裝的jdk安裝包,至此,jdk安裝就完成了。為了節省空間,我們要把安裝包刪掉,執行下面的命令:
rm -f
-f 指明了不需要詢問我,直接刪掉。
接下來,我們需要配置系統變量,就像windows操作系統中配置環境變量一樣,這里我們通過編輯profile文件來配置:
vi /etc/profile
然后按下Ins鍵,當下面出現INSERT時,我們就可以進行編輯了。
在文件的后面追加下面幾行內容:
JAVA_HOME=/usr/java/jdk1.8.0_121 PATH=$JAVA_HOME/bin:$PATH CLASSPATH=.:$JAVA_HOME/lib/tools.jar export JAVA_HOME PATH CLASSPATH
內容中的路徑和jdk版本都要換成自己的,這個是筆者的路徑。
添加完之后,按下Esc鍵,退出編輯模式,然后輸入:wq 再按下回車鍵,這樣就將修改的內容保存並退出,為了讓修改的文件生效,需要執行下面的命令:
source /etc/profile
為了驗證jdk是否成功安裝,我們執行下面的命令,如果出現對應的安裝版本信息,則說明安裝成功,否則請檢查安裝和配置。
[ aliyunzixun@xxx.com java]# java -version
java version "1.8.0_121"
Jmeter的安裝
jdk安裝完成,就開始jmeter的安裝了。安裝過程很簡單,跟jdk類似,現在/etc/下創建jmeter文件夾,將安裝包放到/usr/jmeter/下,執行下面命令:
tar -zxf
安裝好以后,去配置環境變量。依然是修改/etc/profile的內容。添加以下幾行:
JMETER_HOME=/usr/jmeter/apache-jmeter-3.0 CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/logkit-2.0.jar:$CLASSPATH PATH=$JMETER_HOME/bin/:$PATH export JMETER_HOME CLASSPATH PATH
一定要注意,路徑要換成自己的哦。至此,jmeter也已經安裝完畢啦,我們可以執行以下命令要驗證,jmeter是否安裝成功。
jmeter -v
如果正確的安裝,就會出現jmeter的版本相關信息。
執行一條jmeter測試
相信到這里的朋友,測試環境已經搭建好了。那么接下來呢,我們就可以開始執行第一條測試了。
首先,創建一個文件夾來放測試case,因為我是用虛擬機跟本地windows機器創建了一個共享文件夾,所以為了方便,我就直接放在該文件夾下了。(/mnt/hgfs/share/jmeterTest)
然后可以運行下面的命令:
jmeter -n -t test.jmx -l testReport.jtl
jmeter前面我們已經安裝,jmeter在安裝路徑的bin目錄下。
-n 表示沒有界面的運行
-t 后面緊跟指定的需要運行的測試case(測試case在windows上用jmeter圖形界面事先寫好)
-l 指定了測試報告的文件(也可以指定路徑,默認在當前目錄下),生成的報告可以保存到本地windows上在jmeter中打開查看。
需要注意的是:我們的操作是在root身份下進行的,如果你登陸的是其他身份的用戶,可能jmeter不具有x(可執行)權限,我們需要先給它權限。
至此,在linux上通過命令行執行jmeter測試已經成功完成了。但是,對於一個有點兒追求的測試狗來說,這肯定是遠遠不夠的。下面我們就來說下,如何在多台linux上分布式執行jmeter測試。
多台linux分布式測試
先來理解下分布式測試原理,看下圖:

1、Jmeter分布式測試時,選擇其中一台作為調度機(master/Controller),其它機器做為執行機(slave/Agent)。
2、執行時,master會把腳本發送到每台slave上,slave 拿到腳本后就開始執行,slave執行時不需要啟動GUI,應該是通過命令行模式執行的。
3、執行完成后,slave會把結果回傳給master,master會收集所有slave的信息並匯總。
注意:
(1)每一台jmeter遠程服務器(slave機器)都執行相同的測試計划,jmeter不會在執行期間做負載均衡,每一台服務器都會完整地運行測試計划;
(2)采用JMeter遠程模式並不會比獨立運行相同數目的非GUI測試更耗費資源。但是,如果使用大量的JMeter遠程服務器,可能會導致客戶端過載,或者網絡連接發生擁塞;
(3)默認情況下,master機器是不執行參與生成並發數據的;
(4)調度機(master)和執行機(slave)最好分開,由於master需要發送信息給slave並且會接收slave回傳回來的測試數據,所以mater自身會有消耗,所以建議單獨用一台機器作為mater。
下面開始實施吧。
首先,按照前面安裝jmeter的步驟,在其他linux上安裝jdk和jmeter(jdk和jmeter的版本以及安裝路徑要保持一致,不然可能會出錯,無法成功執行)
確保環境搭建完成以后,進入jmeter的安裝目錄,進入bin下,啟動jmeter-server(如果沒有可執行權限,要先添加權限,root用戶沒有權限限制)
所有的slave機器都要啟動jmeter-server,默認端口是1099,可以通過修改jmeter.properties文件進行修改。回到master機器上,修改jmeter.properties文件中的remote_hosts,將slave機器的ip地址添加上去,多個ip之間用逗號隔開。其中127.0.0.1表示master機器本身,為了獨立開master,可以將其去掉,這樣就不會在master上執行測試。
然后在master機器上執行下面的命令:
jmeter -n -t test.jmx -R ip1,ip2,ip3 -l testReport.jtl
其中 -R 指定遠程連接的slave機器的ip地址,多個ip之間用逗號隔開。
至此,分布式jmeter測試也完成了。但是,對,我又要說但是了。很有可能你不會執行成功(因為我就沒有那么容易的成功啊!哈哈哈)
那么問題來了
下面我列舉出一些我在這個過程中出現的一些錯誤,以及后來的解決辦法。
問題1:
在slava機器上執行jmeter-server的時候,會出現以下的問題:(以下為本人遇到的問題)
1、出現 XII DISPLAY 這樣的錯誤,可以先執行下面命令:
echo $DISPLAY
如果內容為空(我就是內容為空),那么,就繼續執行下面的命令:
DISPLAY=:0
#DISPLAY=localhost:0.0
上面兩個都可以
問題2:
jmeter-server啟動失敗。通常有以下兩個錯誤:
1、Unable to get local host IP address
2、xxx is a loopback address
一般上面的兩個問題,都是由host文件引起的,我們需要修改host文件,可以執行下面的命令:
vi /etc/hosts
我是將127.0.0.1替換成本機ip地址的。
問題3:
jmeter-server啟動成功,但是在master上無法執行分布式測試。
我這邊拋出的錯誤是:”No route to host“
這個問題是由防火牆引起的,也就是說,slave上的防火牆沒有關閉,此時,我們需要到slave上關掉防火牆。之后就可以正常運行了。關閉防火牆的方法多種,我這里特別記錄下我自己紅帽子7虛擬機的命令:
#查看防火牆狀態
systemctl status firewalld
#關閉防火牆
systemctl stop firewalld
好了,整個過程就是這樣的額。
偷偷告訴你們一個事情,因為我是個“懶癌患者”,所以上面這些執行測試的操作,都不要重復去做,於是我就想方法將他們寫到了一個shell文件中,下次再跟大家一起分享下這個小腳本,希望大神給我指點!!!!
- 原鏈接:https://www.aliyun.com/jiaocheng/800179.html
