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 請求取樣器(管理),右鍵單擊新增 → 後處理器 → 正則表示式提取器

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
廣告

© . All rights reserved.