linux上實現jmeter分布式壓力測試(轉)


    • 摘要:最近根據公司工作的需求,學習了一些壓力測試的知識,目前,公司使用的是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分布式測試


      先來理解下分布式測試原理,看下圖:


      linux上實現jmeter分布式壓力測試的完整教程_Java


      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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM