jMeter - 快速指南



jMeter - 概述

在深入瞭解 JMeter 的細節之前,讓我們先了解一些與任何應用程式測試相關的術語。

  • 效能測試 - 此測試在給定的基礎設施配置下設定最佳可能的效能預期。它還在測試過程的早期突出顯示是否需要進行任何更改,然後再將應用程式投入生產。

  • 負載測試 - 此測試主要用於在系統設計的最大負載下測試系統。

  • 壓力測試 - 此測試試圖透過壓垮系統資源來破壞系統。

什麼是 JMeter?

JMeter 是一款可以對不同協議或技術進行負載測試、面向效能的業務(功能)測試、迴歸測試等的軟體。

Apache 軟體基金會的Stefano Mazzocchi 是 JMeter 的最初開發者。他最初編寫它的目的是為了測試 Apache JServ(現在稱為 Apache Tomcat 專案)的效能。Apache 後來重新設計了 JMeter 以增強 GUI 並新增功能測試功能。

JMeter 是一個具有圖形介面的 Java 桌面應用程式,它使用 Swing 圖形 API。因此,它可以在任何接受 Java 虛擬機器的環境/工作站上執行,例如 - Windows、Linux、Mac 等。

JMeter 支援的協議有:

  • Web - HTTP、HTTPS 站點“web 1.0” web 2.0(ajax、flex 和 flex-ws-amf)

  • Web 服務 - SOAP / XML-RPC

  • 透過 JDBC 驅動程式訪問資料庫

  • 目錄 - LDAP

  • 透過 JMS 的面向訊息的服務

  • 服務 - POP3、IMAP、SMTP

  • FTP 服務

JMeter 功能

以下是 JMeter 的一些功能:

  • 作為開源軟體,它是免費提供的。

  • 它具有簡單直觀的 GUI。

  • JMeter 可以對許多不同型別的伺服器進行負載和效能測試 - Web - HTTP、HTTPS、SOAP、透過 JDBC 訪問資料庫、LDAP、JMS、郵件 - POP3 等。

  • 它是一個平臺無關的工具。在 Linux/Unix 上,可以透過點選 JMeter shell 指令碼呼叫 JMeter。在 Windows 上,可以透過啟動 jmeter.bat 檔案來呼叫它。

  • 它具有完整的 Swing 和輕量級元件支援(預編譯的 JAR 使用包 javax.swing.*)。

  • JMeter 將其測試計劃儲存在 XML 格式中。這意味著您可以使用文字編輯器生成測試計劃。

  • 其完整的多執行緒框架允許許多執行緒併發取樣,並允許獨立執行緒組同時取樣不同的函式。

  • 它具有很強的擴充套件性。

  • 它還可以用於執行應用程式的自動化和功能測試。

JMeter 如何工作?

JMeter 模擬一組使用者向目標伺服器傳送請求,並返回統計資料,這些統計資料透過表格、圖表等顯示目標伺服器/應用程式的效能/功能。

請檢視下圖,該圖描述了 JMeter 的工作原理:

JMeter Process

jMeter - 環境

JMeter 是一個 Java 框架,因此首要要求是在您的機器上安裝 JDK。

系統要求

JDK 1.6 或更高版本。
記憶體 沒有最低要求。
磁碟空間 沒有最低要求。
作業系統 沒有最低要求。

步驟 1:驗證 Java 安裝

首先,驗證您的系統中是否安裝了 Java。開啟您的控制檯並根據您正在使用的作業系統執行以下 java 命令之一。

作業系統 任務 命令
Windows 開啟命令控制檯 c:\> java -version
Linux 開啟命令終端 $ java -version
Mac 開啟終端 machine: ~ joseph$ java -version

如果您的系統中安裝了 Java,您將根據您正在使用的作業系統獲得相應的輸出。

作業系統 輸出
Windows

java version "1.7.0_25"

Java(TM) SE Runtime Environment (build 1.7.0_25-b15)

Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)

Linux

java version "1.7.0_25"

Java(TM) SE Runtime Environment (build 1.7.0_25-b15)

Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)

Mac

java version "1.7.0_25"

Java(TM) SE Runtime Environment (build 1.7.0_25-b15)

Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)

如果您的系統中未安裝 Java,請從www.oracle.com/technetwork/java/javase/downloads/index.html安裝 Java 軟體開發工具包 (SDK)。在本教程中,我們假設 Java 1.7.0_25 為已安裝版本。

步驟 2:設定 Java 環境

設定JAVA_HOME環境變數以指向 Java 安裝在您機器上的基本目錄位置。例如:

作業系統 輸出
Windows 將環境變數 JAVA_HOME 設定為 C:\Program Files\Java\jdk1.7.0_25
Linux export JAVA_HOME=/usr/local/java-current
Mac export JAVA_HOME=/Library/Java/Home

將 Java 編譯器位置追加到系統路徑。

作業系統 輸出
Windows 將字串;C:\Program Files\Java\jdk1.7.0_25\bin 追加到系統變數 Path 的末尾。
Linux export PATH=$PATH:$JAVA_HOME/bin/
Mac 不需要

如上所述,使用java -version命令驗證 Java 安裝。

步驟 3:下載 JMeter

https://jmeter.apache.org/download_jmeter.cgi下載最新版本的 JMeter。在本教程中,我們下載了apache-jmeter-2.9並將其複製到 C:\>JMeter 資料夾中。

目錄結構應如下所示:

  • apache-jmeter-2.9
  • apache-jmeter-2.9\bin
  • apache-jmeter-2.9\docs
  • apache-jmeter-2.9\extras
  • apache-jmeter-2.9\lib\
  • apache-jmeter-2.9\lib\ext
  • apache-jmeter-2.9\lib\junit
  • apache-jmeter-2.9\printable_docs

如果需要,您可以重新命名父目錄(即 apache-jmeter-2.9),但不要更改任何子目錄名稱。

步驟 4:執行 JMeter

下載 JMeter 後,轉到bin目錄。在本例中,它是/home/manisha/apache-jmeter-2.9/bin。現在點選以下內容:

作業系統 輸出
Windows jmeter.bat
Linux jmeter.sh
Mac jmeter.sh

短暫暫停後,JMeter GUI 應該會出現,這是一個 Swing 應用程式,如下面的螢幕截圖所示:

JMeter GUI

這是工具的主頁面和預設頁面。

jMeter - 構建測試計劃

什麼是測試計劃?

測試計劃可以看作是執行測試的容器。它定義了要測試的內容以及如何進行測試。完整的測試計劃包含一個或多個元素,例如執行緒組、邏輯控制器、樣本生成控制器、監聽器、計時器、斷言和配置元素。測試計劃必須至少包含一個執行緒組。

編寫測試計劃

按照以下步驟編寫測試計劃:

步驟 1:啟動 JMeter 視窗

透過點選/home/manisha/apache-jmeter-2.9/bin/jmeter.sh開啟 JMeter 視窗。JMeter 視窗將如下所示:

JMeter GUI

這是一個普通的空白 JMeter 視窗,沒有任何額外的元素新增到其中。它包含兩個節點:

  • 測試計劃節點 - 這是儲存實際測試計劃的地方。

  • 工作臺節點 - 它只是提供了一個臨時儲存測試元素的地方,這些元素在不用時用於複製/貼上目的。儲存測試計劃時,工作臺專案不會與其一起儲存。

步驟 2:新增/刪除元素

可以透過右鍵點選測試計劃節點並從“新增”列表中選擇一個新元素來將元素(將在下一章測試計劃元素中討論)新增到測試計劃中。

或者,您可以從檔案中載入元素並透過選擇“合併”或“開啟”選項將其新增。

例如,讓我們將執行緒組元素新增到測試計劃中,如下所示:

Add Thread Group

要刪除元素,請確保選中該元素,右鍵點選該元素,然後選擇“刪除”選項。

Remove Element

步驟 3:載入和儲存元素

要從檔案載入元素:

  • 右鍵點選要新增載入元素的現有樹元素。
  • 選擇合併。
  • 選擇儲存元素的檔案。
  • JMeter 將元素合併到樹中。

預設情況下,JMeter 不會儲存元素,您需要顯式儲存它。

Load Element

要儲存樹元素:

  • 右鍵點選元素。
  • 選擇另存為...選項。

JMeter 將儲存選定的元素及其下面的所有子元素。預設情況下,JMeter 不會儲存元素,您需要像前面提到的那樣顯式儲存它。

步驟 4:配置樹元素

測試計劃中的任何元素都可以使用 JMeter 右側框架中提供的控制元件進行配置。這些控制元件允許您配置特定測試元素的行為。例如,執行緒組可以配置為指定數量的使用者、預熱時間等,如下所示:

Add Thread Group

步驟 5:儲存測試計劃

您可以使用儲存或檔案選單中的“另存為...”來儲存整個測試計劃。

Save Test Plan

步驟 6:執行測試計劃

您可以透過點選執行選單項中的啟動(Control + r)來執行測試計劃。當 JMeter 開始執行時,它會在選單欄正下方的部分右側顯示一個小綠色框。

Run Test Plan

綠色框左側的數字是活動執行緒數/匯流排程數。這些僅適用於本地執行的測試;當使用客戶端-伺服器模式時,它們不包括在遠端系統上啟動的任何執行緒。

步驟 7:停止測試計劃

您可以透過兩種方式停止測試:

  • 使用停止(Control + '.')。如果可能,它會立即停止執行緒。

  • 使用關閉(Control + ',')。它請求執行緒在任何當前工作結束時停止。

jMeter - 測試計劃元素

JMeter 測試計劃包含下面討論的測試元素。測試計劃至少包含一個執行緒組。在每個執行緒組中,我們可以放置一個或多個其他元素的組合:取樣器、邏輯控制器、配置元素、監聽器和計時器。每個取樣器前面可以有一個或多個預處理器元素,後面可以跟有後處理器元素和/或斷言元素。讓我們詳細瞭解每個元素:

執行緒組

執行緒組元素是測試計劃的起點。顧名思義,執行緒組元素控制 JMeter 在測試期間將使用的執行緒數。我們還可以透過執行緒組控制以下內容:

  • 設定執行緒數

  • 設定預熱時間

  • 設定測試迭代次數

執行緒組控制面板如下所示:

Thread Group

執行緒組面板包含以下元件:

  • 取樣器錯誤後要採取的操作 - 如果在測試執行期間發生任何錯誤,您可以讓測試:

    • 繼續到測試中的下一個元素

    • 停止執行緒以停止當前執行緒。

    • 停止測試,如果您想在測試繼續執行之前檢查錯誤。

  • 執行緒數 - 模擬使用者或到伺服器應用程式的連線數。

  • 預熱時間 定義 JMeter 啟動所有執行緒需要多長時間。

  • 迴圈次數 - 定義執行測試的次數。

  • 排程程式複選框 - 選擇後,排程程式配置部分將出現在控制面板的底部。

  • 排程程式配置 - 可以配置測試的開始和結束時間。

控制器

JMeter 有兩種型別的控制器:取樣器邏輯控制器

取樣器

取樣器允許 JMeter 向伺服器傳送特定型別的請求。它們模擬使用者從目標伺服器請求頁面的操作。例如,如果需要對 HTTP 服務執行 POST、GET 或 DELETE 操作,則可以新增 HTTP 請求取樣器。

一些有用的取樣器包括:

  • HTTP 請求
  • FTP 請求
  • JDBC 請求
  • Java 請求
  • SOAP/XML 請求
  • RPC 請求

以下螢幕截圖顯示了 HTTP 請求取樣器控制面板:

Sampler Control Panel

邏輯控制器

邏輯控制器允許您控制執行緒中取樣器的處理順序。邏輯控制器可以更改來自其任何子元素的請求的順序。一些例子包括:ForEach 控制器、While 控制器、迴圈控制器、If 控制器、執行時間控制器、交錯控制器、吞吐量控制器和執行一次控制器。

以下螢幕截圖顯示了迴圈控制器控制面板:

Logic Controller Panel

以下列表包含 JMeter 提供的所有邏輯控制器:

  • 簡單控制器
  • 迴圈控制器
  • 僅一次控制器
  • 交錯控制器
  • 隨機控制器
  • 隨機順序控制器
  • 吞吐量控制器
  • 執行時間控制器
  • If 控制器
  • While 控制器
  • 切換控制器
  • ForEach 控制器
  • 模組控制器
  • 包含控制器
  • 事務控制器
  • 錄製控制器

測試片段

測試片段是一種特殊型別的元素,放置在與執行緒組元素相同的級別。它與執行緒組的區別在於,除非它被模組控制器或包含控制器引用,否則不會執行它。此元素純粹用於測試計劃中的程式碼重用。

監聽器

監聽器允許您以表格、圖形、樹或某些日誌檔案中的簡單文字的形式檢視取樣器的結果。它們提供了對 JMeter 收集的測試用例資料的視覺化訪問,因為 JMeter 的取樣器元件正在執行。

監聽器可以新增到測試中的任何位置,包括直接在測試計劃下。它們只會收集其級別或其以下級別元素的資料。以下列表包含 JMeter 提供的所有監聽器:

  • 取樣結果儲存配置
  • 圖形完整結果
  • 圖形結果
  • 樣條視覺化器
  • 斷言結果
  • 檢視結果樹
  • 聚合報告
  • 檢視結果表
  • 簡單資料寫入器
  • 監控結果
  • 分佈圖(alpha)
  • 聚合圖
  • 郵件視覺化器
  • BeanShell 監聽器
  • 摘要報告

定時器

預設情況下,JMeter 執行緒在每個取樣器之間不暫停就傳送請求。這可能不是您想要的。您可以新增一個定時器元素,它允許您定義每個請求之間等待的時間段。

以下列表顯示了 JMeter 提供的所有定時器:

  • 恆定定時器
  • 高斯隨機定時器
  • 均勻隨機定時器
  • 恆定吞吐量定時器
  • 同步定時器
  • JSR223 定時器
  • BeanShell 定時器
  • BSF 定時器
  • 泊松隨機定時器

以下螢幕截圖顯示了恆定定時器控制面板:

Constant Timer Panel

斷言

斷言允許您在使用取樣器發出的請求的響應上包含一些驗證測試。使用斷言,您可以證明您的應用程式正在返回正確的資料。JMeter 會突出顯示斷言失敗的位置。

以下列表包含 JMeter 提供的所有斷言:

  • BeanShell 斷言
  • BSF 斷言
  • 比較斷言
  • JSR223 斷言
  • 響應斷言
  • 持續時間斷言
  • 大小斷言
  • XML 斷言
  • BeanShell 斷言
  • MD5Hex 斷言
  • HTML 斷言
  • XPath 斷言
  • XML 架構斷言

以下螢幕截圖顯示了響應斷言控制面板:

Response Assertion Panel

配置元件

配置元件允許您建立取樣器將使用的預設值和變數。它們用於新增或修改取樣器發出的請求。

它們在所屬範圍的開始處執行,在同一範圍內的任何取樣器之前執行。因此,配置元件只能從其放置的分支內部訪問。

以下列表包含 JMeter 提供的所有配置元件:

  • 計數器
  • CSV 資料集配置
  • FTP 請求預設值
  • HTTP 授權管理器
  • HTTP 快取管理器
  • HTTP Cookie 管理器
  • HTTP 代理伺服器
  • HTTP 請求預設值
  • HTTP 標頭管理器
  • Java 請求預設值
  • 金鑰庫配置
  • JDBC 連線配置
  • 登入配置元素
  • LDAP 請求預設值
  • LDAP 擴充套件請求預設值
  • TCP 取樣器配置
  • 使用者定義的變數
  • 簡單配置元素
  • 隨機變數

前置處理器

前置處理器是在取樣器執行之前執行的元素。它們通常用於在取樣器請求執行之前修改其設定,或更新未從響應文字中提取的變數。

以下列表包含 JMeter 提供的所有前置處理器:

  • HTML 連結解析器
  • HTTP URL 重寫修改器
  • HTTP 使用者引數修改器
  • 使用者引數
  • JDBC 前置處理器
  • JSR223 前置處理器
  • 正則表示式使用者引數
  • BeanShell 前置處理器
  • BSF 前置處理器

後置處理器

後置處理器在取樣器完成執行後執行。此元素最常用於處理響應資料,例如,檢索特定值以供以後使用。

以下列表包含 JMeter 提供的所有後置處理器:

  • 正則表示式提取器
  • XPath 提取器
  • 結果狀態操作處理程式
  • JSR223 後置處理器
  • JDBC 後置處理器
  • BSF 後置處理器
  • CSS/JQuery 提取器
  • BeanShell 後置處理器
  • 除錯後置處理器

測試元素的執行順序

以下是測試計劃元素的執行順序:

  • 配置元素
  • 前置處理器
  • 定時器
  • 取樣器
  • 後置處理器(除非 SampleResult 為 null)
  • 斷言(除非 SampleResult 為 null)
  • 監聽器(除非 SampleResult 為 null)

jMeter - Web 測試計劃

讓我們構建一個簡單的測試計劃來測試網頁。我們在 Apache JMeter 中編寫一個測試計劃,以便我們可以測試 URL 顯示的網頁的效能:www.tutorialspoint.com

啟動 JMeter

透過點選/home/manisha/apache-jmeter-2.9/bin/jmeter.sh開啟 JMeter 視窗。JMeter 視窗將如下所示:

JMeter GUI

重新命名測試計劃

在“名稱”文字框中將測試計劃節點的名稱更改為示例測試。您需要將焦點更改為工作臺節點,然後返回到測試計劃節點才能看到名稱反映出來。

Sample Test

新增執行緒組

現在我們在視窗中新增我們的第一個元素。我們新增一個執行緒組,它是所有其他元素(如取樣器、控制器和監聽器)的佔位符。我們需要一個,以便我們可以配置要模擬的使用者數量。

在 JMeter 中,所有節點元素都是透過使用上下文選單新增的。

  • 右鍵單擊要新增子節點元素的元素。

  • 選擇合適的選項進行新增。

  • 右鍵單擊示例測試(我們的測試計劃)→新增→執行緒(使用者)→執行緒組。這樣,執行緒組就會新增到測試計劃(示例測試)節點下。

Thread Group Added
  • 將執行緒組命名為使用者。對我們來說,此元素表示訪問 TutorialsPoint 首頁的使用者。

Thread Group User

新增取樣器

我們需要在我們的執行緒組(使用者)中新增一個取樣器。與之前新增執行緒組的操作一樣,這次我們將透過右鍵單擊開啟執行緒組(使用者)節點的上下文選單,並透過選擇新增→取樣器→HTTP 請求選項來新增 HTTP 請求取樣器。

Empty Sampler

它將線上程組(使用者)節點下新增一個空的 HTTP 請求取樣器。讓我們配置此節點元素:

Sampler With Data
  • 名稱 - 我們將更改名稱以反映我們想要實現的操作。我們將將其命名為訪問 TutorialsPoint 首頁

  • 伺服器名稱或 IP - 在這裡,我們必須輸入 Web 伺服器名稱。在我們的例子中是www.tutorialspoint.com。(http:// 部分未寫入,這只是伺服器名稱或其 IP)

  • 協議 - 我們將保持為空,這意味著我們希望 HTTP 作為協議。

  • 路徑 - 我們將路徑鍵入為 /(斜槓)。這意味著我們想要伺服器的根頁面。

新增監聽器

現在我們將新增一個監聽器。讓我們線上程組(使用者)節點下新增“檢視結果樹”監聽器。它將確保取樣器的結果可在此監聽器節點元素中檢視。

新增監聽器的方法如下:

  • 開啟上下文選單

  • 右鍵單擊“執行緒組(使用者)”

  • 選擇“新增”→“監聽器”→“檢視結果樹”選項

Listener

執行測試計劃

現在,在完成所有設定後,讓我們執行測試計劃。線上程組(使用者)的配置中,我們保留所有預設值。這意味著 JMeter 只會執行一次取樣器。這類似於單個使用者只執行一次操作。

這類似於使用者透過瀏覽器訪問網頁,使用 JMeter 取樣器。要執行測試計劃,請從選單中選擇“執行”,然後選擇“啟動”選項。

在實際開始測試之前,Apache JMeter 會要求我們將測試計劃儲存到磁碟檔案。如果您想多次執行測試計劃,這一點很重要。您也可以選擇不儲存直接執行。

Save the Test Plan

檢視輸出

我們已將執行緒組的設定保留為單個執行緒(僅一個使用者)並迴圈 1 次(僅執行一次),因此我們將在“檢視結果樹”監聽器中獲得單個事務的結果。

View Result

上述結果的詳細資訊如下:

  • 訪問 TutorialsPoint 首頁名稱旁邊的綠色表示成功。

  • JMeter 已儲存 Web 伺服器傳送的所有標頭和響應,並準備以多種方式向我們顯示結果。

  • 第一個選項卡是“取樣器結果”。它顯示 JMeter 資料以及 Web 伺服器返回的資料。

  • 第二個選項卡是“請求”,它顯示作為請求的一部分發送到 Web 伺服器的所有資料。

Request Tab

最後一個選項卡是“響應資料”。在此選項卡中,監聽器以文字格式顯示從伺服器接收到的資料。

Response Tab

這只是一個簡單的測試計劃,它只執行一個請求。但 JMeter 的真正優勢在於傳送相同的請求,就像許多使用者都在傳送一樣。要使用多個使用者測試 Web 伺服器,我們需要更改“執行緒組(使用者)”設定。

jMeter - 資料庫測試計劃

在本節中,我們將學習如何建立一個簡單的測試計劃來測試資料庫伺服器。為了測試目的,我們使用 MYSQL 資料庫伺服器。您可以使用任何其他資料庫進行測試。有關在 MYSQL 中安裝和建立表的說明,請參閱 MYSQL 教程

安裝完 MYSQL 後,請按照以下步驟設定資料庫:

  • 建立一個名為“tutorial”的資料庫。

  • 建立一個名為tutorials_tbl的表。

  • 將記錄插入到tutorials_tbl中,如下所示:

mysql> use TUTORIALS;
Database changed
mysql> INSERT INTO tutorials_tbl 
   ->(tutorial_title, tutorial_author, submission_date)
   ->VALUES
   ->("Learn PHP", "John Poul", NOW());
  
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO tutorials_tbl
   ->(tutorial_title, tutorial_author, submission_date)
   ->VALUES
   ->("Learn MySQL", "Abdul S", NOW());
 
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO tutorials_tbl
   ->(tutorial_title, tutorial_author, submission_date)
   ->VALUES
   ->("JAVA Tutorial", "Sanjay", '2007-05-06');

Query OK, 1 row affected (0.01 sec)
mysql>
  • 將相應的 JDBC 驅動程式複製到/home/manisha/apache-jmeter-2.9/lib

建立 JMeter 測試計劃

讓我們從/home/manisha/apache-jmeter-2.9/bin/jmeter.sh啟動 JMeter。

新增使用者

要建立執行緒組,

  • 右鍵單擊“測試計劃”。

  • 選擇“新增”→“執行緒(使用者)”→“執行緒組”。

  • 這樣,執行緒組就會新增到“測試計劃”節點下。

  • 將此執行緒組重新命名為JDBC 使用者

Thread Group Added

我們不會更改執行緒組的預設屬性。

新增 JDBC 請求

現在我們定義了使用者,是時候定義他們將執行的任務了。在本節中,指定要執行的 JDBC 請求。

  • 右鍵單擊“JDBC 使用者”元素。

  • 選擇新增”→“配置元件”→“JDBC 連線配置”

  • 設定以下欄位(我們使用名為 tutorial 的 MySQL 資料庫):

    • 繫結到池的變數名稱。這需要唯一地標識配置。JDBC 取樣器使用它來識別要使用的配置。我們將其命名為test

    • 資料庫 URL:jdbc:mysql://:3306/tutorial。

    • JDBC 驅動程式類:com.mysql.jdbc.Driver。

    • 使用者名稱:root。

    • 密碼:root 的密碼。

螢幕上的其他欄位保留預設值,如下所示:

JDBC Configuration Pool

現在新增一個 JDBC 請求,它引用上面定義的 JDBC 配置池。選擇“JDBC 使用者”元素。

  • 單擊滑鼠右鍵以獲取“新增”選單

  • 選擇新增”→“取樣器”→“JDBC 請求”。

  • 選擇此新元素以檢視其控制面板。

  • 編輯屬性,如下所示:

    • 繫結到池的變數名稱。這需要唯一地標識配置。JDBC 取樣器使用它來識別要使用的配置。命名為test

    • 名稱:Learn。

    • 輸入池名稱:test(與配置元素中相同)。

    • 查詢型別:Select 語句。

    • 輸入 SQL 查詢字串欄位。

JDBC Request

建立監聽器

現在新增監聽器元素。此元素負責將所有 JDBC 請求的結果儲存到檔案中,並呈現資料的視覺化模型。

  • 選擇“JDBC 使用者”元素

  • 新增“檢視結果樹”監聽器(新增”→“監聽器”→“檢視結果樹”)。

JDBC Test Listener

儲存並執行測試計劃

現在將上述測試計劃儲存為db_test.jmx。使用執行”→“啟動”選項執行此測試計劃。

驗證輸出

JDBC Test Output1

JDBC Test Output2

JDBC Test Output3

在最後一張圖片中,您可以看到選擇了兩個記錄。

jMeter - FTP 測試計劃

在本節中,我們將學習如何使用 JMeter 測試 FTP 站點。讓我們建立一個測試計劃來測試 FTP 站點。

重新命名測試計劃

  • 透過單擊 /home/manisha/apache-jmeter-2.9/bin/jmeter.sh 開啟 JMeter 視窗

  • 單擊“測試計劃”節點。

  • 將此“測試計劃”節點重新命名為 TestFTPSite。

新增執行緒組

新增一個執行緒組,它是所有其他元素(如取樣器、控制器和監聽器)的佔位符。

  • 右鍵單擊 TestFTPSite(我們的測試計劃)

  • 選擇“新增”→“執行緒(使用者)”→“執行緒組”。“執行緒組”將新增到“測試計劃”(TestFTPSite)節點下。

  • 修改執行緒組的預設屬性以適合我們的測試,如下所示:

    • 名稱:FTPusers

    • 執行緒數(使用者):4

    • Ramp-Up 期間:保留 0 秒的預設值。

    • 迴圈次數:1

FTP Test Users

新增取樣器:FTP 請求

現在我們定義了使用者,是時候定義他們將執行的任務了。新增 FTP 請求元素。我們添加了兩個 FTP 請求元素,一個用於檢索檔案,另一個用於將檔案放到 FTP 站點上。

  • 選擇“FTP 使用者”元素。

  • 右鍵單擊滑鼠以獲取“新增”選單

  • 選擇“新增”→“取樣器”→“FTP 請求”。

  • 在樹中選擇“FTP 請求”元素。

  • 編輯以下屬性,如下所示:

FTP Request Get

在此元素中輸入以下詳細資訊:

  • 名稱:FTP 請求獲取

  • 伺服器名稱或 IP:184.168.74.29

  • 遠端檔案:/home/manisha/sample_ftp.txt

  • 本地檔案:sample_ftp.txt

  • 選擇獲取(RETR)

  • 使用者名稱:manisha

  • 密碼:manisha123

現在像上面一樣新增另一個 FTP 請求,並編輯屬性,如下面的螢幕截圖所示:

FTP Request Put

在此元素中輸入以下詳細資訊:

  • 名稱:FTP 請求放置

  • 伺服器名稱或 IP:184.168.74.29

  • 遠端檔案:/home/manisha/examplefile.txt

  • 本地檔案:/home/manisha/work/examplefile.txt

  • 選擇放置(STOR)

  • 使用者名稱:manisha

  • 密碼:manisha123

新增監聽器

您需要新增到測試計劃中的最後一個元素是監聽器。此元素負責將所有 FTP 請求的結果儲存到檔案中,並呈現資料的視覺化模型。

  • 選擇“FTP 使用者”元素。

  • 透過選擇“新增”>“監聽器”>“檢視結果樹”新增“檢視結果樹”監聽器。

FTP Test Listener

執行測試計劃

現在將上述測試計劃儲存為ftpsite_test.jmx。使用執行”→“啟動”選項執行此測試計劃。

檢視輸出

監聽器中可以看到以下輸出。

FTP Get Result1

FTP Test Result2

FTP Put Result

FTP Get Result

您可以看到對每個 FTP 請求都進行了四個請求,並且測試成功。GET 請求的檢索檔案儲存在 /bin 資料夾中。在我們的例子中,它是/home/manisha/apache-jmeter-2.9/bin/。對於 PUT 請求,檔案上傳到路徑/home/manisha/

jMeter - Web服務測試計劃

在本節中,我們將學習如何建立測試計劃以測試 Web 服務。為了測試目的,我們建立了一個簡單的 Web 服務專案並將其部署到本地 Tomcat 伺服器上。

建立 Web 服務專案

要建立 Web 服務專案,我們使用了 Eclipse IDE。首先在包com.tutorialspoint.ws下編寫服務端點介面HelloWorld。HelloWorld.java 的內容如下:

package com.tutorialspoint.ws;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

//Service Endpoint Interface
@WebService
@SOAPBinding(style = Style.RPC)

public interface HelloWorld {
   @WebMethod String getHelloWorldMessage(String string);
}

此服務有一個方法getHelloWorldMessage,它接受一個 String 引數。

接下來,在包com.tutorialspoint.ws下建立實現類HelloWorldImpl.java

package com.tutorialspoint.ws;

import javax.jws.WebService;

@WebService(endpointInterface="com.tutorialspoint.ws.HelloWorld")
public class HelloWorldImpl  implements HelloWorld  {
   @Override
   public String getHelloWorldMessage(String myName) {
      return("Hello "+myName+" to JAX WS world");
   }
}

現在讓我們透過建立端點發布者並在伺服器上公開服務來在本地釋出此 Web 服務。

publish 方法接受兩個引數:

  • 端點 URL 字串。

  • 實現者物件,在本例中為 HelloWorld 實現類,它作為 Web 服務公開,位於上述引數中提到的 URL 標識的端點。

HelloWorldPublisher.java 的內容如下:

package com.tutorialspoint.endpoint;

import javax.xml.ws.Endpoint;
import com.tutorialspoint.ws.HelloWorldImpl;

public class HelloWorldPublisher {
   public static void main(String[] args) {
      Endpoint.publish("https://:9000/ws/hello", new HelloWorldImpl());
   }
}

修改 web.xml 內容,如下所示:

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, 
   Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">

<web-app>
   <listener>
      <listener-class>
         com.sun.xml.ws.transport.http.servlet.WSServletContextListener
      </listener-class>
   </listener>
	
   <servlet>
      <servlet-name>hello</servlet-name>
      <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>
	
   <servlet-mapping>
      <servlet-name>hello</servlet-name>
      <url-pattern>/hello</url-pattern>
   </servlet-mapping>
	
   <session-config>
      <session-timeout>120</session-timeout>
   </session-config>
	
</web-app>

要將此應用程式部署為 Web 服務,我們需要另一個配置檔案sun-jaxws.xml。此檔案的內容如下:

<?xml version = "1.0" encoding = "UTF-8"?>
<endpoints
   xmlns = "http://java.sun.com/xml/ns/jax-ws/ri/runtime"
   version = "2.0">
   
   <endpoint name = "HelloWorld" 
      implementation = "com.tutorialspoint.ws.HelloWorldImpl" 
      url-pattern = "/hello"/>
</endpoints>

現在所有檔案都準備就緒,目錄結構將如下面的螢幕截圖所示:

WebService Dir structure
  • 現在建立此應用程式的 WAR 檔案。

  • 選擇專案→右鍵單擊→匯出→WAR 檔案。

  • 將其儲存為hello.war檔案,放在 Tomcat 伺服器的webapps資料夾下。

  • 現在啟動 Tomcat 伺服器。

  • 伺服器啟動後,您應該能夠使用以下 URL 訪問 Web 服務:https://:8080/hello/hello

建立 JMeter 測試計劃

現在讓我們建立一個測試計劃來測試上述 Web 服務。

重新命名測試計劃

  • 透過單擊 /home/manisha/apache-jmeter2.9/bin/jmeter.sh 開啟 JMeter 視窗。

  • 單擊“測試計劃”節點。

  • 將此“測試計劃”節點重新命名為 WebserviceTest。

WS Test Plan

新增執行緒組

新增一個執行緒組,它是所有其他元素(如取樣器、控制器和監聽器)的佔位符。

  • 右鍵單擊 WebserviceTest(我們的測試計劃)→新增”→“執行緒(使用者)”→“執行緒組”。“執行緒組”將新增到“測試計劃”(WebserviceTest)節點下。

  • 接下來,讓我們修改執行緒組的預設屬性以適合我們的測試。更改以下屬性:

    • 名稱:Web 服務使用者

    • 執行緒數(使用者):2

    • Ramp-Up 期間:保留 0 秒的預設值。

    • 迴圈次數:2

WS Test Users

新增取樣器:SOAP/XML-RPC 請求

現在我們定義了使用者,是時候定義他們將執行的任務了。

我們將新增 SOAP/XML-RPC 請求元素:

  • 右鍵單擊滑鼠以獲取“新增”選單。

  • 選擇“新增”→“取樣器”→“SOAP/XML-RPC 請求”。

  • 在樹中選擇“SOAP/XML-RPC 請求”元素

  • 編輯以下屬性,如下圖所示:

  • 在此元素中輸入以下詳細資訊:

    • 名稱:SOAP/XML-RPC 請求

    • URL:https://:8080/hello/hello?wsdl

    • Soap/XML-RPC 資料:輸入以下內容

<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" 
   xmlns:web = "http://ws.tutorialspoint.com/">
   <soapenv:Header/>
	
   <soapenv:Body>
      <web:getHelloWorldMessage>
         <arg0>Manisha</arg0>
      </web:getHelloWorldMessage>
   </soapenv:Body>
   
</soapenv:Envelope>
WS Test request

新增監聽器

您需要新增到測試計劃中的最後一個元素是監聽器。此元素負責將所有 HTTP 請求的結果儲存到檔案中,並呈現資料的視覺化模型。

  • 選擇“Web 服務使用者”元素。

  • 透過選擇“新增”→“監聽器”→“檢視結果樹”新增“檢視結果樹”監聽器。

WS Test request

執行測試計劃

現在將上述測試計劃儲存為test_webservice.jmx。使用“執行”→“啟動”選項執行此測試計劃。

檢視輸出

監聽器中可以看到以下輸出。

WS Sample Result

WS Result Request

WS Response Data

在最後一張圖片中,您可以看到響應訊息“Hello Manisha to JAX WS world”。

jMeter - JMS 測試計劃

在本章中,我們將學習如何編寫一個簡單的測試計劃來測試Java訊息服務(JMS)。JMS支援兩種型別的訊息傳遞:

  • 點對點訊息傳遞 − 佇列訊息通常用於傳送方期望響應的事務。訊息傳遞系統與普通的HTTP請求大不相同。在HTTP中,單個使用者傳送請求並獲得響應。

  • 主題訊息傳遞 − 主題訊息通常稱為釋出/訂閱訊息傳遞。主題訊息通常用於生產者釋出訊息並由多個訂閱者消費的情況。

讓我們分別檢視每個測試示例。測試JMS的先決條件是:

  • 在示例中,我們使用Apache ActiveMQ。還有各種JMS伺服器,如IBM WebSphere MQ(以前稱為MQSeries)、Tibco等。從Apache ActiveMQ網站下載二進位制檔案。

  • 解壓縮存檔,進入解壓縮目錄,並在命令控制檯中執行以下命令以啟動ActiveMQ伺服器:

.\bin\activemq  start

您可以透過訪問以下地址的管理介面來驗證ActiveMQ伺服器是否已啟動https://:8161/admin/。如果要求進行身份驗證,則輸入使用者 ID 和密碼為admin。螢幕類似於如下所示:

ActiveMQ Server
  • 現在將activemq-all-x.x.x.jar(XXX取決於版本)從ActiveMQ解壓縮目錄複製到/home/manisha/apache-jmeter-2.9/lib。

有了上述設定,讓我們構建以下測試計劃:

jMeter - 監控測試計劃

在本章中,我們將討論如何使用JMeter建立測試計劃來監控Web伺服器。監控測試的用途如下:

  • 監控器對於壓力測試和系統管理很有用。

  • 與壓力測試一起使用時,監控器提供了有關伺服器效能的更多資訊。

  • 監控器使更容易檢視伺服器效能與客戶端響應時間之間的關係。

  • 作為系統管理工具,監控器提供了一種簡單的方法來從一個控制檯監控多個伺服器。

我們需要Tomcat 5或更高版本進行監控。出於測試目的,我們將監控Tomcat 7.0.42伺服器。您可以測試任何支援Java管理擴充套件(JMX)的servlet容器。讓我們編寫一個測試用例來監控Tomcat伺服器。讓我們首先設定我們的tomcat伺服器。

設定Tomcat伺服器

我們從開啟Tomcat服務狀態開始。為此,請編輯使用者的配置檔案,<TOMCAT_HOME>/conf/tomcat-users.xml。此檔案包含一個tomcat-users部分(已註釋),如下所示:

<tomcat-users>

<!--
   <role rolename = "tomcat"/>
   <role rolename = "role1"/>
   <user username = "tomcat" password = "tomcat" roles = "tomcat"/>
   <user username = "both" password = "tomcat" roles = "tomcat,role1"/>
   <user username = "role1" password = "tomcat" roles = "role1"/>
-->

</tomcat-users>

我們需要更改此部分以新增管理員角色、manager、manager-gui並分配使用者“admin”。修改後的檔案如下所示:

<tomcat-users>

   <role rolename = "manager-gui"/>
   <role rolename = "manager-script"/>
   <role rolename = "manager-jmx"/>
   <role rolename = "manager-status"/>
   <user username = "admin" password = "admin" roles = "manager-gui,manager-script,manager-jmx,manager-status"/>

</tomcat-users>

現在啟動tomcat伺服器<TOMCAT_HOME>/bin/startup.sh(Linux)和<TOMCAT_HOME>/bin/startup.bat(Windows)。啟動後,透過在瀏覽器中輸入以下連結來檢查Tomcat監控是否有效:

https://:8080/manager/status?XML=true

瀏覽器中會出現一個身份驗證視窗。輸入關聯的Tomcat登入名和密碼(在本例中為admin)。然後,瀏覽器顯示Tomcat的執行狀態,如下所示:

Tomcat Manager Status

從上面的螢幕截圖中,我們可以注意到一些事情:

  • 在URL中,請注意XML = true(注意大小寫敏感性)允許清晰顯示JMeter功能所需的Tomcat監控資訊。

  • 還要注意,有兩個預設聯結器。AJP聯結器通常與mod_jk Apache HTTPD前端模組一起使用,而HTTP聯結器是透過埠8080直接訪問Tomcat的常用聯結器。

編寫JMeter測試計劃

讓我們透過編寫測試計劃來監控Tomcat伺服器:

重新命名測試計劃

  • 透過單擊 /home/manisha/apache-jmeter2.9/bin/jmeter.sh 開啟 JMeter 視窗。

  • 單擊“測試計劃”節點。

  • 新增執行緒組,如下一步所述。

新增執行緒組

  • 右鍵單擊測試計劃→新增→執行緒(使用者)→執行緒組。執行緒組將新增到測試計劃節點下。

  • 將迴圈次數更改為永遠(或某個較大的數字),以便生成足夠的樣本。

Monitor Test Users

HTTP 授權管理器

  • 透過選擇新增→配置元素→HTTP授權管理器,將HTTP授權管理器新增到執行緒組元素。此元素管理瀏覽器請求檢視Tomcat伺服器狀態時所需的身份驗證。

  • 選擇HTTP授權管理器。

  • 編輯以下詳細資訊:

    • 使用者名稱 − admin(取決於tomcat-users.xml檔案中的配置)

    • 密碼 − admin(取決於tomcatusers.xml檔案中的配置)

    • 其他欄位保持為空。

HTTP Authorization Manager

新增取樣器-HTTP請求

現在我們已經定義了使用者,是時候定義他們將執行的任務了。我們新增HTTP請求元素。

  • 右鍵單擊滑鼠以獲取新增選單。

  • 選擇新增→取樣器→HTTP請求。

  • 然後,在樹中選擇HTTP請求元素。

  • 編輯以下屬性,如下圖所示:

  • 在此元素中輸入以下詳細資訊:

    • 名稱 − 伺服器狀態

    • 伺服器名稱或IP − localhost

    • − 8080

    • 路徑 − /manager/status

    • 引數 − 新增一個名為“XML”(大寫)的請求引數。為其提供一個“true”(小寫)的值。

    • 可選任務 − 在取樣器的底部選中“用作監控器”。

Monitor Test Sampler

新增恆定定時器

要定期請求伺服器的狀態,請新增一個恆定定時器,它將允許每個請求之間的時間間隔。透過選擇新增→定時器→恆定定時器,將定時器新增到此執行緒組。

執行緒延遲框中輸入5000毫秒。通常,使用小於5秒的間隔可能會給伺服器帶來壓力。在您在生產環境中部署監控器之前,請了解可接受的間隔。

Monitor Constant Timer

新增監聽器

您需要新增到測試計劃中的最後一個元素是監聽器。我們新增兩種型別的監聽器。一種將結果儲存在檔案中,另一種顯示結果的圖形檢視。

  • 選擇執行緒組元素。

  • 新增一個簡單資料寫入器監聽器新增→監聽器→簡單資料寫入器。

  • 指定輸出檔案的目錄和檔名(在本例中,為/home/manisha/work/sample.csv)

Monitor Simple Data Writer
  • 讓我們透過選擇測試計劃元素新增→監聽器→監控結果來新增另一個監聽器。

Monitor Results

執行測試計劃

現在將上述測試計劃儲存為monitor_test.jmx。使用執行→啟動選項執行此測試計劃。

檢視輸出

結果將儲存在/home/manisha/work/sample.csv檔案中。您還可以在監控結果監聽器中看到圖形結果,如下面的影像所示。

Monitor Test Result1

Monitor Test Result2

請注意,圖形在圖形的兩側都有標題。左側是百分比,右側是死/健康。如果記憶體線快速上下波動,則可能表示記憶體抖動。在這些情況下,最好使用Borland OptimizeIt或JProbe對應用程式進行分析。您希望看到的是負載、記憶體和執行緒的常規模式。任何不穩定的行為通常都表示效能低下或某種錯誤。

jMeter - 監聽器

監聽器提供對JMeter在執行時收集的測試用例資訊進行訪問。監聽器收集的結果或資訊可以以以下形式顯示:

  • 表格
  • 圖形
  • 日誌檔案

當指定一個輸出檔案時,所有監聽器都會將相同的基本資料寫入輸出檔案。

預設配置

要儲存的預設專案可以透過以下兩種方式之一定義:

  • jmeter.properties(或user.properties)檔案中。此檔案位於JMeter的/bin資料夾中。要更改預設格式,請在jmeter.properties中找到以下行:

jmeter.save.saveservice.output_format=
  • 使用以下螢幕截圖中顯示的配置彈出視窗:

JMeter Config PopUp

JMeter建立測試執行的結果作為JMeter文字日誌(JTL)。這些通常稱為JTL檔案,因為這是預設副檔名,但可以使用任何副檔名。

如果使用相同的輸出檔名執行多個測試,則JMeter會自動將新資料追加到檔案的末尾。

監聽器可以將結果記錄到檔案,但不能記錄到UI。它旨在透過消除GUI開銷來提供一種有效的資料記錄方法。

在以下模式下執行時:

  • GUI模式 − 使用監聽器簡單資料寫入器

  • 非GUI模式 − 可以使用-l標誌建立資料檔案。

如果樣本很多,監聽器可能會使用大量記憶體。為了最大程度地減少所需的記憶體量,請將簡單資料寫入與CSV格式一起使用。

CSV日誌格式

CSV日誌格式取決於配置中選擇了哪些資料項。只有指定的資料項記錄在檔案中。列的出現順序是固定的,如下所示:

欄位 描述 值示例
timeStamp 自1970年1月1日以來的毫秒數 1354223881017
elapsed 以毫秒為單位 1858
label 取樣器標籤 HTTP 請求
responseCode 例如200、404 200
responseMessage 例如OK OK
threadName 執行緒組1-1
dataType 例如text text
success true或false true
failureMessage 如果有
bytes 樣本中的位元組數 34908
grpThreads 此執行緒組中活動執行緒的數量 1
allThreads 所有組中活動執行緒的總數 1
URL https://tutorialspoint.tw
Filename 如果使用了“將響應儲存到檔案”
latency 首次響應時間 132
encoding utf-8
SampleCount 樣本數量(1,除非多個樣本聚合) 1
ErrorCount 錯誤數量(0或1,除非多個樣本聚合) 0
Hostname 生成樣本的位置 LaptopManisha
IdleTime '空閒'時間(毫秒數)(通常為0)
Variables 如果指定

儲存響應資料

如果需要,響應資料可以儲存在 XML 日誌檔案中。但是它不允許儲存大型檔案和影像。在這種情況下,請使用後處理器 Save_Responses_to_a_file。這會為每個樣本生成一個新檔案,並將檔名與樣本一起儲存。然後,檔名可以包含在樣本日誌輸出中。當重新載入樣本日誌檔案時,如果需要,將從檔案中檢索資料。

載入(讀取)響應資料

要檢視現有的結果檔案,您可以使用“瀏覽...”按鈕選擇檔案。如有必要,只需建立一個包含相應監聽器的虛擬測試計劃。

儲存監聽器 GUI 資料

JMeter 能夠將任何監聽器儲存為 PNG 檔案。為此,

  • 透過選擇“編輯”→“另存為影像”在左側面板中選擇監聽器。將出現一個檔案對話方塊。

  • 輸入所需名稱。

  • 儲存監聽器。

jMeter - 函式

JMeter 函式和使用者變數

JMeter 函式是特殊值,可以填充測試樹中任何取樣器或其他元素的欄位。

  • 函式呼叫如下所示:

${__functionName(var1,var2,var3)}
  • _functionName 與函式名稱匹配。例如 ${__threadNum}

  • 如果函式引數包含逗號,則確保使用“\”對其進行轉義,如下所示:

${__time(EEE\, d MMM yyyy)}
  • 變數引用如下:

${VARIABLE}

函式列表

下表列出了按型別大致分組的一組函式:

函式型別 名稱 註釋
資訊 threadNum 獲取執行緒號。
資訊 samplerName 獲取取樣器名稱(標籤)。
資訊 machineIP 獲取本地機器的 IP 地址。
資訊 machineName 獲取本地機器名稱。
資訊 time 以各種格式返回當前時間。
資訊 log 記錄(或顯示)訊息(並返回該值)。
資訊 logn 記錄(或顯示)訊息(空返回值)。
輸入 StringFromFile 從檔案讀取一行。
輸入 FileToString 讀取整個檔案。
輸入 CSVRead 從 CSV 分隔符檔案中讀取。
輸入 XPath 使用 XPath 表示式從檔案讀取。
計算 counter 生成遞增的數字。
計算 intSum 新增整數。
計算 longSum 新增長整數。
計算 Random 生成隨機數。
計算 RandomString 生成隨機字串。
計算 UUID 生成隨機型別 4 UUID。
指令碼 BeanShell 執行 BeanShell 指令碼。
指令碼 javaScript 處理 JavaScript(Mozilla Rhino)。
指令碼 jexl, jexl2 評估 Commons Jexl 表示式。
屬性 property 讀取屬性。
屬性 P 讀取屬性(簡寫方法)。
屬性 setProperty 設定 JMeter 屬性。
Variables split 將字串拆分為變數。
Variables V 評估變數名稱。
Variables eval 評估變量表達式。
Variables evalVar 評估儲存在變數中的表示式。
字串 regexFunction 使用正則表示式解析上一個響應。
字串 escapeOroRegexpChars 引用 ORO 正則表示式使用的元字元。
字串 char 從數字列表生成 Unicode 字元值。
字串 unescape 處理包含 Java 跳脫字元(例如 \n 和 \t)的字串。
字串 unescapeHtml 解碼 HTML 編碼的字串。
字串 escapeHtml 使用 HTML 編碼對字串進行編碼。
字串 TestPlanName 返回當前測試計劃的名稱。
  • 函式有兩種:

    • 使用者定義的靜態值(或變數)

    • 內建函式

  • 使用者定義的靜態值允許使用者定義變數,以便在編譯測試樹並提交以執行時替換為其靜態值。

  • 變數不能巢狀;即 ${Var${N}} 不起作用。

  • __V(變數)函式(2.2 之後的版本)可以用來做到這一點:${__V(Var${N})}。

  • 這種型別的替換無需函式即可實現,但不太方便且不直觀。

函式和變數的用法

函式和變數可以寫入任何測試元件的任何欄位。

以下函式在測試計劃中效果很好:

  • intSum
  • longSum
  • machineName
  • BeanShell
  • javaScript
  • jexl
  • random
  • time
  • 屬性函式
  • 日誌函式

在測試計劃中使用的函式有一些限制。在處理函式時,JMeter 執行緒變數尚未完全設定,因此作為引數傳遞的變數名稱將不會設定,並且變數引用將不起作用。因此,split()regex() 以及變數評估函式將不起作用。threadNum() 函式將不起作用,並且在測試計劃級別沒有意義。

引用變數和函式

  • 引用測試元素中的變數是透過用 '${' 和 '}' 括起變數名稱來完成的。

  • 函式以相同的方式引用,但按照慣例,函式的名稱以“__”開頭,以避免與使用者值名稱衝突。

  • 某些函式需要引數來配置它們,這些引數以逗號分隔的形式放在括號中。如果函式不帶引數,則可以省略括號。例如:

${__BeanShell(vars.put("name"\,"value"))}
  • 或者,您可以將指令碼定義為變數,例如在測試計劃上:

SCRIPT     vars.put("name","value")
  • 然後可以按如下方式引用指令碼:

${__BeanShell(${SCRIPT})}

函式助手對話方塊

函式助手對話方塊可從 JMeter 的“選項”選項卡訪問。

  • 使用函式助手,您可以從下拉選單中選擇一個函式,併為其引數分配值。表中的左列提供了引數的簡要描述,右列是您為該引數編寫值的地方。不同的函式需要不同的引數。

  • 完成此操作後,單擊“生成”按鈕,將生成相應的字串,您可以將其複製貼上到測試計劃中的任何需要的位置。

預定義變數

JMeter 內部定義了一些變數。它們是:

  • COOKIE_cookiename - 包含 cookie 值。

  • JMeterThread.last_sample_ok - 上一個樣本是否正常 - true/false。注意 - 這是在執行後處理器和斷言後更新的。

  • START 變數。

預定義屬性

JMeter 定義了一些內建屬性。這些列在下面。為方便起見,START 屬性也複製到具有相同名稱的變數中。

  • START.MS - JMeter 啟動時間(毫秒)。

  • START.YMD - JMeter 啟動時間(yyyyMMdd 格式)。

  • START.HMS - JMeter 啟動時間(HHmmss 格式)。

  • TESTSTART.MS - 測試開始時間(毫秒)。

請注意,START 變數/屬性表示 JMeter 啟動時間,而不是測試開始時間。它們主要用於檔名等。

jMeter - 正則表示式

正則表示式用於根據模式搜尋和操作文字。JMeter 透過包含模式匹配軟體 Apache Jakarta ORO 來解釋在整個 JMeter 測試計劃中使用的正則表示式或模式的形式。

透過使用正則表示式,我們當然可以節省大量時間,並在建立或增強測試計劃時獲得更大的靈活性。當無法或很難預測結果時,正則表示式提供了一種從頁面獲取資訊的方法。

使用表示式的標準用法是從伺服器響應中獲取會話 ID。如果伺服器返回唯一的會話金鑰,我們可以使用載入指令碼中的表示式輕鬆獲取它。

要在測試計劃中使用正則表示式,您需要使用 JMeter 的正則表示式提取器。您可以將正則表示式放置在測試計劃中的任何元件中。

值得強調一下響應斷言測試元素中使用的包含匹配之間的區別:

  • 包含表示正則表示式至少匹配目標的某些部分,因此 'alphabet' “包含” 'ph.b.',因為正則表示式匹配子字串 'phabe'。

  • 匹配表示正則表示式匹配整個目標。因此,'alphabet' 由 'al.*t' “匹配”。

假設您要匹配網頁的以下部分:

name = "file" value = "readme.txt" 

並且您想提取 readme.txt。合適的正則表示式將是:

name = "file" value = "(.+?)">

以上特殊字元為:

  • () - 這些括起要返回的匹配字串的部分

  • . - 匹配任何字元

  • + - 一次或多次

  • ? - 第一次匹配成功時停止

建立 JMeter 測試計劃

讓我們瞭解一下在正則表示式提取器(一個後處理器元素)中使用正則表示式的用法,方法是編寫測試計劃。此元素使用正則表示式從當前頁面提取文字,以識別所需元素符合的文字模式。

首先,我們編寫一個包含人員列表及其電子郵件 ID 的 HTML 頁面。我們將其部署到我們的 Tomcat 伺服器上。html(index.html)的內容如下:

<html>
   <head>
   </head>
	
   <body>
      <table style = "border: 1px solid #000000;">
		
         <th style = "border: 1px solid #000000;">ID</th>
         <th style = "border: 1px solid #000000;">name</th>
         <th style = "border: 1px solid #000000;">Email</th>
			
         <tr>
            <td id = "ID" style = "border: 1px solid #000000;">3</td>
            <td id = "Name" style = "border: 1px solid #000000;">Manisha</td>
            <td id = "Email" style = "border: 1px solid #000000;">manisha@domain.com</td>
         </tr>
			
         <tr>
            <td id = "ID" style = "border: 1px solid #000000;">4</td>
            <td id = "Name" style = "border: 1px solid #000000;">joe</td>
            <td id = "Email" style = "border: 1px solid #000000;">joe@domain.com</td>
         </tr>
			
      </table>
   </body>
</html>

在將其部署到 Tomcat 伺服器上後,此頁面將如下面的螢幕截圖所示:

HTML Page

在我們的測試計劃中,我們將選擇人員列表頁面上顯示的人員表的第一行中的人員。要捕獲此人的 ID,讓我們首先確定將在其中找到第二行中的人員的模式。

從以下快照中可以看到,第二人的 ID 位於 <td id = "ID"> 和 </td > 之間,並且它是具有此模式的資料的第二行。我們可以使用它來匹配我們想要從中提取資訊的精確模式。由於我們想從此頁面提取兩條資訊,即人員 ID 和人員姓名,因此欄位定義如下:

HTML Page Source code

啟動 JMeter,新增執行緒組 測試計劃 → 新增 → 執行緒(使用者)→ 執行緒組

接下來新增一個取樣器 HTTP 請求,選擇測試計劃,右鍵單擊 新增 → 取樣器 → HTTP 請求,並輸入如下所示的詳細資訊:

  • 名稱 - 管理

  • 伺服器名稱或IP − localhost

  • 埠號 − 8080

  • 協議 - 我們將保持為空,這意味著我們希望 HTTP 作為協議。

  • 路徑 − jmeter/index.html

HTTP Request Sampler

接下來,新增一個正則表示式提取器。選擇 HTTP 請求取樣器(Manage),右鍵點選新增 → 後置處理器 → 正則表示式提取器

Regular Expression Extractor

下表提供了上面截圖中使用的欄位的描述 −

序號 欄位及描述
1

引用名稱

儲存提取到的測試結果的變數名稱(refname)。

2

正則表示式

將要提取的文字匹配的模式。將要提取的文字組用字元 '(' 和 ')' 括起來。我們使用 '.+?' 來表示 <td..>..</td> 標籤括起來的文字的單個例項。在我們的示例中,表示式為 − <td id = "ID">(+?)</td>\s*<td id = "Name">(+?)</td>\s*

3

模板

每個提取的文字組作為變數 Person 的成員放置,遵循每個用 '(' 和 ')' 括起來的模式組的順序。每個組都儲存為 refname_g#,其中 refname 是您輸入的引用名稱的字串,# 是組號。$1$ 指的是組 1,$2$ 指的是組 2,依此類推。$0$ 指的是整個表示式匹配的內容。在這個例子中,我們提取的 ID 儲存在 Person_g1 中,而 Name 值儲存在 Person_g2 中。

4

匹配編號

由於我們計劃僅提取此模式的第二個出現(匹配第二個志願者),因此我們使用值 2。值 0 將進行隨機匹配,而負值需要與 ForEach 控制器一起使用。

5

預設值

如果未找到該項,則此為預設值。這是一個可選欄位。您可以將其留空。

新增一個監聽器來捕獲此測試計劃的結果。右鍵單擊執行緒組,然後選擇新增 → 監聽器 → 檢視結果樹選項以新增監聽器。

將測試計劃儲存為 reg_express_test.jmx 並執行測試。輸出將成功,如下面的螢幕截圖所示 −

Regular Expression Output

jMeter - 最佳實踐

JMeter 在分散式環境中執行時有一些限制。遵循以下指南將有助於建立真實且持續的負載 −

  • 如果執行緒數較多,請使用多個 JMeter 例項。

  • 檢查作用域規則並相應地設計。

  • 始終對所有元素使用命名約定。

  • 在執行指令碼之前,檢查預設的瀏覽器連線設定。

  • 適當地新增監聽器。

  • 以下是一些減少資源需求的建議 −

    • 使用非 GUI 模式:jmeter -n -t test.jmx -l test.jtl。

    • 儘可能少用監聽器;如果如上所述使用 -l 標誌,則可以刪除或停用所有監聽器。

    • 停用“檢視結果樹”監聽器,因為它會消耗大量記憶體,並可能導致控制檯凍結或 JMeter 記憶體不足。但是,僅選中“錯誤”的情況下,使用“檢視結果樹”監聽器是安全的。

    • 不要使用大量類似的取樣器,而是在迴圈中使用相同的取樣器,並使用變數(CSV 資料集)來改變樣本。或者可以使用訪問日誌取樣器。

    • 不要使用功能模式。

    • 使用 CSV 輸出而不是 XML 輸出。

    • 只儲存您需要的資料。

    • 儘可能少用斷言。

    • 停用所有 JMeter 圖表,因為它們會消耗大量記憶體。您可以使用 Web 介面中的 JTLs 選項卡檢視所有即時圖表。

    • 如果使用了 CSV 資料集配置,請不要忘記刪除其中的本地路徑。

    • 每次測試執行前清理“檔案”選項卡。

廣告

© . All rights reserved.