使用正則表達式搜索和操縱文本,基于模式。 JMeter 解釋正則表達式的形式或模式被用于整個JMeter 測試計劃,包括模式匹配軟件 Apache Jakarta ORO.
使用正則表達式,我們當然可以節省大量的時間,并實現更大的靈活性,因為我們建立或加強一個測試計劃。正則表達式提供了一種簡單的方法來獲取信息頁面時,它是不可能或很難預測結果。
使用表達式的標準用法的例子是從服務器響應得到一個會話ID。如果服務器返回一個唯一的會話密鑰,我們可以很容易地得到我們的負載腳本中使用表達式。
要使用正則表達式在測試計劃,需要使用正則表達式提取在JMeter。可以將正則表達式在測試計劃中的任何組件使用。
這是值得強調的包含和比賽之間的差異,如用于響應斷言測試元件:
• 包含表示正則表達式匹配至少有一些目標的一部分,所以'字母'“包含”'ph.b.因為正則表達式匹配'phabe“。
• 匹配正則表達式匹配整個目標。因此,“alphabet”是“匹配”'*t'。
假設想匹配一個Web頁的以下部分:
name="file" value="readme.txt"
要提取readme.txt。一個合適的正則表達式如:
name="file" value="(.+?)">
上述的特殊字符是:
( and ) - 這些匹配字符串括起來的部分要返回
• . - 匹配任何字符
• + - 一次或更多次
• ? - 停止在第一個匹配成功時
讓我們了解在正則表達式中使用正則表達式提取后處理器的元素,編寫一個測試計劃。此元素會從當前頁面使用正則表達式識別文字圖案所需的元素,符合提取文本。
首先,我們將寫人名單和他們的電子郵件ID是一個HTML頁面。它部署到 tomcat 服務器。 HTML(index.htmll)上的內容如下:
<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;">[email protected]</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;">[email protected]</td></tr>
</table>
</body>
</html>
部署在 Tomcat 服務器上,這個頁面會看起來像在下面的快照:
在我們的測試計劃中,我們將選擇人以上列表頁中看到的人表的第一行的人。為了捕捉這個人的ID,讓我們首先確定的模式,我們會發現在第二排的人。在下面的快照中可以看出,第二個人的ID被包圍<td id="ID">的和</TD>,它是具有這種模式的數據的第二行。我們可以用它來完全匹配的模式,我們希望從中提取信息。正如我們要提取兩條信息從當前頁的,該人ID和該人的姓名,字段定義如下:
啟動JMeter,添加一個線程組 Test Plan > Add> Threads(Users)> Thread Group.
接下來,添加一個采樣器的HTTP請求,右鍵單擊選擇的測試計劃 Add > Sampler > HTTP Request 并進入詳情如下:
• Name: Manage
• Server Name or IP: localhost
• Port Number: 8080
• Protocol: We will keep this blank, which means we want HTTP as the protocol.
• Path: jmeter/index.htmll
接下來,添加一個正則表達式提取。選擇HTTP請求采樣器(管理),右鍵點擊 Add > Post Processor > Regular Expression Extractor。
上述快照詳情如下:
Field |
描述 |
---|---|
Reference Name |
所提取的測試將被存儲在其中的變量的名稱(refname)。 |
Regular Expression |
對文本提取模式將匹配。文字組,將提取的字符'('和')'所包圍。我們使用'+?'由<td..>..</ TD>標簽包圍的文本來表示一個單一實例。在我們的例子中的表達式為:<td id="ID">(+)</ TD> S*<td id="Name">(+) </ TD>S* |
Template |
提取的文本的每個組將被放置作為成員變量person,“(”和“)”括起來的模式各組的順序之后。每個組存儲為refname_g#,其中refname是你輸入的字符串作為參考名稱,#是組號。 $1$指組1,$2$是指第2組,$0$是指無論整個表達式匹配。在這個例子中,我們所提取的ID將被保持于Person_g1,而“名稱”的值將被存儲在Person_g2。 |
Match No. |
既然我們打算只提取第二次出現的這種模式,相匹配的第二項,我們使用值2。值0將隨機匹配,而在foreach控制器需要使用負值。 |
Default |
如果該項目沒有找到,這將是默認值。這是一個可選字段。可能會讓它空白。 |
添加一個監聽器來捕捉這個測試計劃的結果。右鍵單擊線程組選擇 Add > Listener > View Results Tree 選項??添加監聽器。
保存測試計劃為reg_express_test.jmx和運行測試。輸出將是一個成功,因為在下面的快照: