使用JMeter進行負載測試——終極指南

jopen 10年前發布 | 152K 次閱讀 JMeter 性能測試和優化

這篇教程討論的是JMeter,它是一款基于Java的、集合了幾個應用程序、具有特定用途的負載和性能測試工具。

本篇主要涉及的內容:

  • 解釋一下JMeter的用途
  • JMeter的實現方式以及采用的技術
  • 安裝與配置
  • 介紹用戶界面的基本特征
  • 詳細介紹不同的測試計劃的配置方法
  • 如何分析結果數據
  • 涉及幾個重要的最佳實踐
  • </ul>

    所有的例子都是基于Java 8 update 0.20,Eclipse Luna 4.4, JMeter 2.11, MySQL Community Server 5.6.21的開發環境。那我們就開始吧!

    目錄

    引言
    采用的技術
    教程內容簡介
    安裝
    用戶界面
    可用的請求
    測試計劃和測試組件
    執行順序
    啟動與停止
    HTTP請求的測試計劃
    MySQL測試計劃
    JUnit Request測試計劃
    記錄測試
    插件
    最佳實踐
    總結
    下載
    資源

    引言

    JMeter使用了不同技術和協議,是一款可以進行配置和執行負載測試、性能測試和壓力測試的工具。

    它能夠模擬不同類型的請求,例如各種類型的數據庫,FTP, HTTP, HTTPS 或者其他的服務端應用。

    最好先來了解一下如下概念:

    • 負載測試: 這類測試使系統或者應用程序在預先設計好的極端場景下測試運行。這類測試用來評估系統或者程序在極端條件下的行為。
    • 性能測試: 這種測試被用來檢測系統的性能表現,包括特定情況下,系統的響應能力和穩定性。
    • 壓力測試: 這類測試通過載入更多的外部資源,并使系統組件超越其所設定的能力范圍,試圖使系統掛掉。
    • </ul>

      JMeter最初的用途是用來測試web應用的,但是它的功能已得到擴展,如今已經可以針對絕大部分的程序進行測試,同時可以在你的程序中進行功能測試。

      采用的技術

      JMeter是一款Java桌面應用程序,它的用戶界面采用Swing Java API實現。基于這兩點,JMeter是一個跨平臺工具,能夠運行在任何安裝了Java虛擬機的操作系統(Windows, Linux, Mac)的設備上。
      它的框架支持并發和多線程或者線程組的執行。這對于配置負載測試和壓力測試非常有用。
      它是可擴展的,提供了大量的可用插件。
      JMeter是Apache軟件基金會下的一個子項目,是完全免費和開源的(http://www.apache.org/licenses/)。

      教程內容簡介

      這篇文章是針對那些沒有JMeter使用經驗的開發人員和軟件設計人員,介紹如何使用JMeter的教程。

      同時針對可能不同的配置和測試計劃,提供了一些例子和使用說明。在下一個章節中,我們將會看到如何安裝JMeter,并配置、運行它,如何保存和分析不同測試計劃的結果。

      安裝

      為了JMeter在你的電腦上安裝并運行,你需要按照如下步驟進行操作:

      • 首先必須安裝java環境。需要在你的電腦上安裝JRE 1.6或者更高版本。只要到Oracle官網下載并安裝適合您的系統的安裝包: http://www.oracle.com/technetwork/java/javase/downloads/index.html
      • 設置JAVA_HOME環境變量,使其指向jre的安裝目錄。Windows用戶而言:
      • </ul>

        JAVA_HOME=C:\Program Files\Java\jdk1.8.0_20

        注意設置正確你的Java版本。

        • 將java編譯路徑添加到系統路徑下。Windows用戶而言,將C:\Program Files\Java\jdk1.7.0_25\bin添加到系統變量Path尾部。
        • </ul>

          然后測試java環境在你的設備上是否安裝成功,使用如下命令行:

          java -version

          應該輸出類似如下信息:

          java version "1.8.0_20"
          Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
          Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)

          • http://jmeter.apache.org/download_jmeter.cgi下載最新版本的JMeter,
          • 將它解壓到例如C:\JMeter下(Windows)。
          • 文件夾的結構應該這樣:
          • </ul>

            apache-jmeter-2.9
            apache-jmeter-2.9bin
            apache-jmeter-2.9docs
            apache-jmeter-2.9extras
            apache-jmeter-2.9lib
            apache-jmeter-2.9libext
            apache-jmeter-2.9libjunit
            apache-jmeter-2.9printable_docs

            • 然后你就可以進入到C:\jmeter\apache-jmeter-2.11\bin(對于Windows用戶),執行jmeter.bat
            • 可以看到JMeter GUI的啟動界面:
            • </ul>

              使用JMeter進行負載測試——終極指南

              GUI概述

              JMeter的GUI非常直觀易用。有文件處理的通用菜單,例如:新建,打開,保存,另存為等。還有啟動和停止測試計劃,配置的可用的菜單項。每一個測試計劃,線程組,測試計劃節點(我們將會在下一章看到更多這方面的內容)都可以通過點擊鼠標右鍵,提供不同的上下文菜單選項。

              也可以改變用戶界面的語言,有許多語言可供選擇。

              正如我們所說的,圖形用戶界面是非常直觀和易用的,為每個菜單和動作提供了易用理解的工具提示。除此之外,暫且不談它的質量,那為什么JMeter是如此廣泛使用?因為它很容易理解,并且易學。

              可用的請求

              JMeter幾乎提供任何一種系統的測試配置。總的來說,下列協議被包含在內:

              • Web: HTTP, HTTPS網站 ‘web 1.0′ web 2.0 (ajax, flex 和 flex-ws-amf): 我們以后會看到如何測試一個潛在的網頁及其行為
              • Web 服務: SOAP / XML-RPC.
              • 通過JDBC驅動的數據庫。幾乎支持任何一種數據庫,你需要的就是一個合適的驅動程序包,并放到在JMeter安裝目錄的正確位置。我們后續將做一個MySQL數據庫測試。
              • 路徑: LDAP.
              • 基于JMS的面向消息的服務
              • 使用POP3, IMAP, SMTP協議的郵件服務.
              • FTP服務
              • 使用JUnit和Java應用程序的進行的功能測試
              • </ul>

                測試計劃與組件

                基本上,使用JMeter可以進行如下操作:創建,配置,執行測試計劃及結果分析。測試計劃是對已配置的本地或遠程服務器(或客戶端)的請求集執行的具體說明。

                在一個測試計劃的配置中,你可以指定多個輸入和輸出參數,可以配置使測試計劃成功執行或失敗的基本條件。

                JMeter測試計劃是由不同的組件組成。這里有一個最重要組件的列表,指導你如何使用JMeter的用戶界面添加它們以及這些插件的作用:

                線程組(ThreadGroup

                一個線程組基本上是不同的測試計劃元素的組合,它是一個測試計劃的核心,它控制著基本核心參數。

                為了創建一個測試計劃,首先你不得不去創建一個線程組,配置如下參數:線程數量,過渡時期,循環次數和正常情況或者錯誤情況下的行為:

                • 線程數:執行測試計劃的線程數,這個參數對于配置負載和壓力測試非常重要。
                • 過渡期:JMeter開始啟動所有線程所需時間。
                • 循環次數:即迭代次數,也就是測試計劃被執行的次數
                • 錯誤行為:錯誤場景下的行為模式:阻止當前線程,停止整個測試,繼續執行…
                • </ul>

                  一個線程組也有配置選項的開始和結束時間。通過單擊復選框“Scheduler”,彈出帶有調度參數的面板,可以為你的測試配置開始和結束時間。

                  一旦配置完成,你就可以開始添加其他測試計劃元素到線程組,例如采樣器,偵聽器和定時器。我們將在下一章解釋這一切。

                  采樣器(Samplers)

                  采樣器用于發送請求到不同類型的服務器。它們是每一個測試計劃的基本要素,一切都圍繞這些采樣器而工作:采樣器執行請求(基于配置的請求),這些請求產生一個或多個響應,后續將被分析。

                  這里有一個在JMeter可用的采樣器列表(在本教程我們將看到其中一些):

                  • 訪問日志采樣器
                  • AJP采樣器
                  • Bean shell取樣器
                  • BSF采樣器
                  • 調試采樣器
                  • FTP采樣器
                  • HTTP采樣器
                  • Java采樣器
                  • JDBC采樣器
                  • JMS(幾個)采樣器
                  • JSR223采樣器
                  • JUnit采樣器
                  • LDAP(幾個)采樣器
                  • 郵件閱讀器
                  • MongoDB采樣器
                  • 操作系統進程取樣器
                  • SMTP采樣器
                  • SOAP
                  • TCP采樣器
                  • 測試行動
                  • </ul>

                    在上面的列表中我們可以看到,有很多不同類型的采樣器。這個清單是不完整的,因為存在多種其他不同于JMeter插件的實現技術。每個采樣器的配置取決于它所執行的請求;這意味著一些采樣器有一些共性的配置,而另外一些采樣器由于它們各自請求的不同而完全不同。

                    邏輯控制器(Logic Controllers)

                    邏輯控制器允許你配置一個線程組內不同采樣器的執行順序。該列表包含了在JMeter所有可用的邏輯控制器:

                    • 簡單控制器
                    • 循環控制器
                    • 一次性控制器
                    • 交錯控制器
                    • 隨機控制器
                    • 隨機順序控制器
                    • 流量控制器
                    • 運行時控制器
                    • I控制器
                    • While控制器
                    • Switch控制器
                    • ForEach控制器
                    • 模塊控制器
                    • include控制器
                    • 事務控制器
                    • 記錄控制器
                    • </ul>

                      監聽器(Listeners)

                      監聽器提供不同的方式查看由采樣器請求產生的結果。監聽器以報表、樹型結構、或簡明的日志文件的形式分析結果。

                      還可以在測試計劃中的任何地方添加監聽器,但他們只會在各自的應用范圍內解析和收集來自采樣器的數據。

                      這些都是JMeter可用的監聽器:

                      • 樣品結果配置保存
                      • 全圖景結果集
                      • 圖表結果集
                      • 樣條線可視化工具
                      • 斷言結果集
                      • 樹形結果集
                      • 整合報告
                      • 表格結果集
                      • 簡單數據輸出
                      • 監測結果集
                      • 分布圖(alpha)
                      • 整合圖
                      • Mailer可視化工具
                      • Beanshell監聽器
                      • 總結報告
                      • </ul>

                        定時器(Timers)

                        可以使用定時器來定義請求之間的等待時間。如果不指定,JMeter會一個請求完成后立即執行下一個請求,沒有任何等待時間。

                        可在JMeter使用的計時器如下:

                        • 恒定的定時器
                        • 高斯隨機定時器
                        • 均勻隨機定時器
                        • 恒定吞吐量定時器
                        • 同步定時器
                        • jsr223定時器
                        • Beanshell定時器
                        • BSF定時器
                        • 泊松隨機定時器
                        • </ul>

                          斷言(Assertions)

                          斷言通過驗證采樣器請求產生的響應,來驗證測試計劃的有效性。它基本上類似于單元測試斷言,用來檢測被測試應用程序的響應質量。你可以為每個測試計劃配置任何生效的斷言。

                          這里是一個在JMeter可以使用的斷言列表:

                          • Bean shell斷言
                          • BSF斷言
                          • 比較斷言
                          • jsr223斷言
                          • 響應斷言
                          • Duration斷言
                          • XML Assertion
                          • BeanShell Assertion
                          • MD5Hex Assertion
                          • HTML Assertion
                          • XPath Assertion
                          • XML Schema Assertion
                          • </ul>

                            配置節點(Configuration nodes)

                            通過使用配置元素你可以將不同的參數傳遞給取樣器請求。他們提供了創建變量(不同的和動態的)的一種方式,這些參數之后被采樣器所使用。在采樣器被執行前,參數所屬節點啟動時,這些參數被執行;這就是為什么采樣器可以依賴這些變量。

                            這里是一個在JMeter使用的所有配置節點列表:

                            • 計數器
                            • CSV數據集配置
                            • FTP請求缺省值
                            • HTTP授權管理
                            • HTTP緩存管理
                            • HTTP cookie管理
                            • HTTP代理服務器
                            • HTTP請求缺省值
                            • HTTP頭部管理
                            • Java請求缺省值
                            • 密鑰庫配置
                            • JDBC連接值
                            • 登錄配置元素
                            • LDAP請求缺省值
                            • LDAP擴展請求缺省值
                            • TCP采樣器配置
                            • 用戶自定義變量
                            • 簡單配置元素
                            • 隨機變量
                            • </ul>

                              前置處理器(Pre processors)

                              在采樣器執行前,前置處理器被觸發。他們可用于從響應中提取變量,這些變量后續將通過配置元素被采樣器所使用。

                              下面都是可以用來作為前置處理器的元素:

                              • HTML鏈接解析器
                              • HTTP URL重寫修改器
                              • HTTP用戶參數修改器
                              • 用戶參數
                              • JDBC前置處理器
                              • jsr223前置處理器
                              • 正則表達式的用戶參數
                              • Beanshell前置處理器
                              • BSF的前置處理器
                              • </ul>

                                后置處理器(Post processors)

                                后置處理器是取樣器被執行后被觸發執行的元素。他可用于解析響應數據,提取變量,以便后續使用
                                下列元素可用于后置處理器:

                                • 正則表達式提取器
                                • XPath提取器
                                • Result status動作處理器
                                • jsr223 后置處理器
                                • JDBC 后置處理器
                                • BSF后置處理器
                                • jQuery/CSS 提取器
                                • Beanshell 后置處理器
                                • Debug后置處理器
                                • </ul>

                                  測試計劃元素執行順序

                                  測試計劃的元素是有序的,通過以下方式執行:

                                  1–配置節點

                                  2–前置處理器

                                  3–定時器

                                  4–取樣器

                                  5–后置處理器(只在有結果可用情況下執行)

                                  6–斷言(只在有結果可用情況下執行)

                                  7–監聽器(只在有結果可用情況下執行)

                                  一個測試計劃可以包含一個或多個測試計劃。通過功能性或者技術邏輯將測試組織在一起是一種常見的做法。

                                  運行/停止測試計劃

                                  運行一個測試計劃,你只需要點擊“play”按鈕:

                                  使用JMeter進行負載測試——終極指南

                                  點擊按鈕“Play no pauses”,開始一個測試并忽略所有暫停:

                                  使用JMeter進行負載測試——終極指南

                                  通過點擊“停止”按鈕,可以停止測試:

                                  使用JMeter進行負載測試——終極指南

                                   

                                  也可以禁用執行測試計劃。你只需要“切換”的測試計劃的狀態:

                                  使用JMeter進行負載測試——終極指南

                                   

                                  你可以看到在上面的截圖中看到,不可執行的計劃呈現灰色,但可以修改他們或重新配置。

                                  Web(HTTP)測試計劃

                                  在這一章中,我們將看到如何創建一個通過HTTP測試一個特定的網頁的測試計劃。為此目的,我將用http://www.wikipedia.org網站。

                                  有了足夠理論知識,現在我們將看到如何配置一個HTTP請求的測試計劃。

                                  • 重命名“測試計劃”,起一個你喜歡的名字
                                  • </ul>

                                    在這一步中,配置測試計劃可能會影響線程的行為,您可以添加可能使用到的外部類庫。不過我們不打算在這個例子中那樣做。

                                    使用JMeter進行負載測試——終極指南

                                    • 添加線程組
                                    • </ul>

                                      在這一步,你需要創建一個負責執行所有測試組件的線程組,并配置主要屬性:線程數,秒級的過渡時期,迭代次數。
                                      在菜單中這樣操作

                                      Test Plan -> Add -> Thread ->ThreadGroup

                                      使用JMeter進行負載測試——終極指南

                                      你也可以指定錯誤情況下行為模式(繼續,停止,停止當前線程……)

                                      • HTTP請求添加取樣器
                                      • </ul>

                                        在這一步,給要測試HTTP請求添加采樣器:

                                        Add Sampler->HTTP Request

                                        我們需要為這種類請求設置不同的屬性:

                                        在這個例子中,為要測試的服務器設置名稱:www.wikipedia.org(不用指明HTTP或HTTPS協議)。如果需要的話,你應該修改端口,協議,執行方法等。在我們的案例中這是不必要的。這有幾個關于配置代理,超時和不同的頭信息的參數,但在我們的例子中,使用默認值。

                                        使用JMeter進行負載測試——終極指南

                                         

                                        • 添加結果監聽器
                                        • </ul>

                                          為了后續能夠看到結果,這是有必要的;就如我們之前在本教程中看到那樣,對于我們的http請求的測試計劃,有幾種可選配置,我們使用結果樹:

                                          Add Listener -> View Results Tree

                                          在我們的示例中,我們沒有改變任何東西,保留所有配置屬性的默認值。

                                          使用JMeter進行負載測試——終極指南

                                          • 保存并運行測試計劃
                                          • </ul>

                                            File->Save(或單擊“Control + s”)

                                            Run->Start(或單擊“play”)

                                            • 在監聽器中查看結果
                                            • </ul>

                                              使用JMeter進行負載測試——終極指南

                                              我們可以看到,所有的請求已經完成,如預期那樣,他們都提供有意義的響應,如此看來,我們測試的網頁工作正常(如果這是我們的預期行為)。我們可以玩的轉這些結果,檢查所有返回的數據。

                                              我們已經配置了一個測試計劃,它發送大量請求到指定的服務器并解析響應。接下來我們將看到如何使用其他類型的測試組件,如定時器和斷言。

                                              • 添加定時器
                                              • </ul>

                                                為了增加一個定時器,我們只要右擊測試計劃并添加一個定時器:

                                                Add Timer->Constant Timer

                                                我們配置500毫秒。每一個請求都將在上一個請求執行完成后等待500毫秒。

                                                使用JMeter進行負載測試——終極指南

                                                • 添加斷言持續時間
                                                • </ul>

                                                  在測試計劃中,單擊右鍵并添加一個斷言持續時間,如果響應時間超過100毫秒,配置錯誤斷言。針對the main sample only選項的配置如下:

                                                  Add assertion->Duration assertion

                                                  使用JMeter進行負載測試——終極指南
                                                  顯然這是因為我們配置的斷言持續時間只有100毫秒,如果我們改變這個數字到2000毫秒,幾乎所有請求都將按時送達。

                                                  使用JMeter進行負載測試——終極指南

                                                  • 添加size assertion
                                                  • </ul> </div>

                                                    Add assertion->Size Assertion

                                                    我們需確保響應信息的尺寸大于5000字節:

                                                    使用JMeter進行負載測試——終極指南

                                                    如果我們運行測試計劃,我們將會看到響應信息總是大于設定的值,如果響應信息尺寸小于設定值,斷言也會失敗。

                                                    數據庫測試計劃指南

                                                    我們將看到如何配置,運行一個針對MySQL數據庫的測試,并對結果進行分析。這個例子是關于MySQL的,也可以使用任何其他類型的數據庫如Oracle,MongoDB或別的。

                                                    • 安裝MySQL
                                                    • </ul>

                                                      如果你沒有在你的電腦安裝MySQL,你可以從http://dev.mysql.com/downloads/ 下載安裝MySQL服務器,這是很容易的。

                                                      • 下載MySQL驅動程序
                                                      • </ul>

                                                        下載MySQL連接器(mysql-connector-java-5.1.6),將它復制到JMeter安裝目錄下的lib目錄下,本例中是C:\jmeter\apache-jmeter-2.11\lib

                                                        • 啟動MySQL
                                                        • </ul>

                                                          啟動數據庫服務器,你可以對它進行查詢。

                                                          • 創建數據庫
                                                          • </ul>

                                                            你可以創建一個你想要的數據庫,我們這里只是一個非常簡單的例子:

                                                            create database jmeter;

                                                            use jmeter;

                                                            create table jmeter_stuff(id int, name varchar(50), description varchar(50));

                                                            insert into jmeter_stuff(id, name, description)VALUES(1, "dani", "the boss");

                                                            insert into jmeter_stuff(id, name, description)VALUES(2, "topo", "the worker");

                                                            insert into jmeter_stuff(id, name, description)VALUES(3, "tupac", "the other");</pre>

                                                            • 創建一個測試計劃
                                                            • </ul>

                                                              跟上一章節一樣,進行如下操作創建測試計劃:一個新的線程組,一個JDBC類型的配置元素和一個新的JDBC類型請求,以同樣的方式添加一個監聽器來解析和查看結果。

                                                              唯一的區別是采樣器的類型,在這種情況下使用JDBC采樣器。

                                                              select * from jmeter_stuff;
                                                              使用JMeter進行負載測試——終極指南

                                                              • JDBC連接配置
                                                              • </ul>

                                                                添加一個新的JDBC連接配置到采樣器:

                                                                點擊右鍵 JDBC采樣器->添加連接配置

                                                                改變參數如下:

                                                                Variable Bound to Pool= same name as in the sampler
                                                                Database URl=jdbc:mysql://localhost:3306/jmeter
                                                                JDBC Driver.mysql.jdbc.Driver
                                                                username=
                                                                password=

                                                                設置用戶名密碼

                                                                使用JMeter進行負載測試——終極指南

                                                                • 保存并執行。
                                                                • 利用之前配置的監聽器查看結果。
                                                                • </ul>

                                                                  您可以以類似在HTTP請求的測試計劃相同的方式驗證和檢查輸出結果。只要你需要,你也可以添加前置處理器,后置處理器,斷言或其他任何一種元素。

                                                                  您可以以類似在HTTP請求的測試計劃相同的方式驗證和檢查輸出結果。只要你需要,你也可以添加前置處理器,后置處理器,斷言或其他任何一種元素。

                                                                  使用JMeter進行負載測試——終極指南

                                                                  在這種情況下,輸出的是SELECT語句的結果。
                                                                  你可以用這種取樣器用于更新數據,以及修改采樣器配置的SQL語句。
                                                                  在下面的屏幕捕獲的是請求響應結果的基本信息:

                                                                  使用JMeter進行負載測試——終極指南

                                                                  JUnit測試計劃

                                                                  在這一章中,我們將解釋如何結合JUnit使用JMeter。從負載和性能的角度來看,JMeter為執行功能測試,提供了非常強大的機制。

                                                                  首先,需要創建一個像下面的JUnit測試:

                                                                  public class JMeterTest
                                                                  {

                                                                  public JMeterTest()
                                                                  {
                                                                      // just for testing purposes
                                                                      System.out.println( "calling the constructor" );
                                                                  }
                                                                  
                                                                  @Before
                                                                  public void setUp() throws Exception
                                                                  {
                                                                      // just for testing purposes
                                                                      System.out.println( "calling setup" );
                                                                  }
                                                                  
                                                                  @After
                                                                  public void tearDown() throws Exception
                                                                  {
                                                                      // just for testing purposes
                                                                      System.out.println( "calling tearDown" );
                                                                  
                                                                  }
                                                                  
                                                                  @Test
                                                                  public void testMe()
                                                                  {
                                                                      for( int i = 0; i < 30; i++ )
                                                                      {
                                                                          // just asserting randomly in order to check what happens in each case
                                                                          int randomNumber = (int)( Math.random() * 100 );
                                                                          System.out.println( randomNumber );
                                                                          assertEquals( 0, randomNumber % 2 );
                                                                      }
                                                                  }
                                                                  

                                                                  }</pre>

                                                                  為了查看JMeter如何使用他們,本試驗主要包含兩個斷言,當然這本教程的目的不是詳細解釋單元測試或JUnit測試。

                                                                  • 添加JUnit測試路徑
                                                                  • </ul>

                                                                    將單元測試打成一個JAR包,把它復制到JMeter的安裝目錄下的/lib/JUnit下。確保JAR文件包含你想讓JMeter執行的測試類的.class文件。在文章的最后,你可以找到一個帶有pom.xml文件的Java項目,你可以直接使用他去生成的JAR文件。現在你只需要編譯代碼:

                                                                    mvn compile

                                                                    或者直接在Eclipse或你喜歡的其他IDE中導出你的項目,生成包括字節碼JAR文件。

                                                                    • 添加JUnit采樣器請求
                                                                    • </ul>

                                                                      使用JMeter進行負載測試——終極指南

                                                                      入前所述,創建一個測試計劃,添加一個JUnit類型采樣器:Add Sampler->Junit Request ,配置并執行你想要測試的方法。

                                                                      在我們的例子中,我們將運行基于JUnit 4的方法,但你也可以勾選框使用JUnit 3。

                                                                      使用JMeter進行負載測試——終極指南

                                                                      • 就像我們在前幾章一樣,添加一個監聽器,以查看結果
                                                                      • 運行測試計劃
                                                                      • 查看結果
                                                                      • </ul>

                                                                        在這里,可以看到我們剛剛創建的JUnit測試結果:

                                                                        使用JMeter進行負載測試——終極指南

                                                                        如上述截圖所示,我們所有的測試(一個測試,10次循環)都失敗了。這是預期的行為,因為我們希望我們的測試失敗。其實我們只是寫了個單元測試,沒有功能上的意義,是無用的。它的目的是要說明如何配置JMeter去執行這些類的單元測試。

                                                                        在這一章所解釋的內容 有助于你使用JMeter提供的便利性的功能進行應用程序的功能測試和業務邏輯的測試.它也很有趣,因為它可以將Java語言的所有優勢與JMeter的多線程能力相結合。

                                                                        HTTP測試記錄

                                                                        現在我們將說明如何配置JMeter記錄HTTP請求。為此我們需要Firefox安裝在我們的機器,我是用版本32。

                                                                        • 讓Firefox使用JMeter代理
                                                                        • </ul>

                                                                          進入Firefox網絡設置,選擇手動代理選項和設置為本地主機服務器和端口8080(實際上,這加深了對你的JMeter配置)。之后選中“為所有協議使用代理服務器”。

                                                                          使用JMeter進行負載測試——終極指南

                                                                          • 跟以前一樣,首先我們創建一個測試計劃。
                                                                          • </ul>

                                                                            我們添加了一個新的線程組,給它起名。配置線程組線程數量為50,過渡時期為10秒,循環次數等于1。

                                                                            使用JMeter進行負載測試——終極指南

                                                                            • 添加HTTP請求默認值
                                                                            • </ul>

                                                                              在剛剛創建的線程組中添加一個新的配置元素,選擇“HTTP Request Defaults”。

                                                                              使用JMeter進行負載測試——終極指南

                                                                              在這里你應該填寫你想測試服務器名稱。

                                                                              • 添加記錄控制器
                                                                              • </ul>

                                                                                現在我們添加一個記錄控制器到工作臺。

                                                                                選擇工作臺,不是測試計劃,并添加一個非測試元件的”Test Script Recorder”。

                                                                                使用JMeter進行負載測試——終極指南

                                                                                你現在應該讓工作臺保存起來,并且與你的測試計劃無關。保存測試計劃不意味著保存了工作臺。

                                                                                配置記錄如下:

                                                                                使用JMeter進行負載測試——終極指南

                                                                                • 添加定時器
                                                                                • </ul>

                                                                                  如果你想為你的記錄器添加一個定時器(常量類型),那么該定時器將由每個被記錄的HTTP請求所使用。

                                                                                  • 開始記錄
                                                                                  • </ul>

                                                                                    通過點擊記錄器啟動按鈕,你將啟動JMeter代理服務器。

                                                                                    使用JMeter進行負載測試——終極指南

                                                                                    • 記錄顯示
                                                                                    • </ul>

                                                                                      如果你為了生成一個HTTP請求而訪問一個網頁,例如使用Firefox(配置為在本章的第一步解釋之后)訪問http://www.oviedin.com,那么你會看到不同的請求入口出現在你的測試計劃記錄控制器中。

                                                                                      使用JMeter進行負載測試——終極指南

                                                                                      這些記錄實際上是之前訪問的web頁面的HTTP請求。那些包含在過濾器配置測試腳本配置過的記錄將被保存。可以在你的后續測試計劃中重新配置使用。

                                                                                      JMeter插件

                                                                                      不同的插件應用的場景和用戶不同,其中的一些需要安裝,有些不需要安裝。

                                                                                      一些非常有用的插件,它們通過一些高級選項來解析結果,并利用圖表分析結果 例如http://jmeter-plugins.org/wiki/GraphsGeneratorListener/

                                                                                      也有一些可用插件,能夠將JMeter與你的持續集成工具連接,直接從CI軟件運行JMeter,執行測試計劃,例如”https://wiki.jenkins-ci.org/display/JENKINS/Performance+Plugin“。

                                                                                      正如我所說的,隨著插件數量的上升,不可能列出所有的插件。所以你在實現自己的插件功能時,盡可能的去互聯網上查找一下是否有可用的插件,這對自己是非常有價值的。

                                                                                      你也可以創建你自己的JMeter插件,但這超出了本文的范圍。

                                                                                      JMeter最佳實踐

                                                                                      在文章末尾,我們要寫下兩個很有用的技巧和最佳實踐:

                                                                                      • 雖然JMeter UI是一個用于配置和創建不同測試計劃非常有用和直觀的工具,但是有經驗的用戶更想使用非GUI模式執行測試計劃,存儲他們的結果。
                                                                                      • </ul>

                                                                                        你可以通過命令行:

                                                                                        jmeter -n -t test.jmx -l test.jtl.

                                                                                        • 假設該測試就是你想要執行的測試計劃。你必須提供該測試計劃的完整存儲路徑。
                                                                                        • 監聽器對解析結果是非常棒的,但他們也都是資源密集型,需要消耗大量內存,在你的配置使用盡可能少的監聽器是有好處的。標記 -l 表示刪除所有監視器,如果還沒添加監視器,那么這個選項是不需要的。
                                                                                        • 如果你對測試期間發生了的錯誤感興趣,可以在結果樹視圖中查看”View only errors“標記。
                                                                                        • 使用變量和循環在相同的采樣代替配置幾個類似的樣品中的變量和參數,他們使用的是唯一的區別。
                                                                                        • 使用同一個采樣器的變量和循環變量,而不是創建好幾個這樣的采樣器,他們間只是變量值不同而已。
                                                                                        • 當創建的JUnit測試計劃時,建議提供有意義的錯誤和斷言信息,以便JMeter輸出盡可能被人理解的內容。當進行單元測試時,通常情況下都會給出這樣建議,而且完全適用這種情況。
                                                                                        • 使用Stop(Control + ‘.’)。這將盡可能的立即停止線程。
                                                                                        • 使用Shutdown(Control + ‘,’)。這就要求在當前任何工作結束后的停止線程。其他工具提示在https://wiki.apache.org/jmeter/jmetershortcuts都可以找到。
                                                                                        • </ul> </div>

                                                                                          總結

                                                                                          到這里就結束了。我們講了如何安裝JMeter,以及如何配置它用于執行不同類型的測試,如HTTP請求,數據庫,基于JUnit功能測試。還有很多種JMeter提供的測試類型沒有包含在本教程中。本教程的目的是提供一個完整的應用程序說明,以及教你如何配置你的第一個測試計劃。

                                                                                          我們也解釋了JMeter UI的主要組成部分,以及如何使用它,以及非常好用的JMeter測試計劃元素。在最后一章中,我們提到可以為JMeter安裝不同插件;對于有高級需求的經驗用戶來說這是一個非常有趣的。

                                                                                          下載

                                                                                          所有JMeter模板,本文中使用的SQL腳本和Java代碼可以在下面的鏈接下載: JMeter教程

                                                                                          資源

                                                                   本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
                                                                   轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
                                                                   本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!