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

    • 摘要:最近根據公司工做的需求,學習了一些壓力測試的知識,目前,公司使用的是jmeter進行壓力測試。下面就記錄下近期的學習。我想將此次的博文分紅三個部分:一、開始測試前的準備(測試環境的搭建)二、在一臺linux上測試三、多臺linux分佈式測試首先來看看測試環境的搭建。我是本身建立的linux虛擬機,因此就用它來講說吧。安裝linux的過程就很少說了,不是本次的重點,有不太明白的朋友,能夠本身去百度下,或者我有一篇文章也大概記錄了個人安裝過程,能夠參考下。linux安裝好以後,我
    • 最近根據公司工做的需求,學習了一些壓力測試的知識,目前,公司使用的是jmeter進行壓力測試。下面就記錄下近期的學習。html


      我想將此次的博文分紅三個部分:java


      一、開始測試前的準備(測試環境的搭建)linux


      二、在一臺linux上測試shell


      三、多臺linux分佈式測試apache


      首先來看看測試環境的搭建。我是本身建立的linux虛擬機,因此就用它來講說吧。windows


      安裝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


      一、Jmeter分佈式測試時,選擇其中一臺做爲調度機(master/Controller),其它機器作爲執行機(slave/Agent)。


      二、執行時,master會把腳本發送到每臺slave上,slave 拿到腳本後就開始執行,slave執行時不須要啓動GUI,應該是經過命令行模式執行的。


      三、執行完成後,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的時候,會出現如下的問題:(如下爲本人遇到的問題)


      一、出現 XII DISPLAY 這樣的錯誤,能夠先執行下面命令:


      echo $DISPLAY

      若是內容爲空(我就是內容爲空),那麼,就繼續執行下面的命令:


      DISPLAY=:0
      #DISPLAY=localhost:0.0

      上面兩個均可以


      問題2:


      jmeter-server啓動失敗。一般有如下兩個錯誤:


      一、Unable to get local host IP address


      二、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
相關文章
相關標籤/搜索