jMeter正則表達式
使用正則表達式搜索和操縱文本,基於模式。 JMeter 解釋正則表達式的形式或模式被用於整個JMeter 測試計劃,包括模式匹配軟件 Apache Jakarta ORO.
使用正則表達式,我們當然可以節省大量的時間,並實現更大的靈活性,因為我們建立或加強一個測試計劃。正則表達式提供了一種簡單的方法來獲取信息頁麵時,它是不可能或很難預測結果。
使用表達式的標準用法的例子是從服務器響應得到一個會話ID。如果服務器返回一個唯一的會話密鑰,我們可以很容易地得到我們的負載腳本中使用表達式。
要使用正則表達式在測試計劃,需要使用正則表達式提取在JMeter。可以將正則表達式在測試計劃中的任何組件使用。
這是值得強調的包含和比賽之間的差異,如用於響應斷言測試元件:
-
包含表示正則表達式匹配至少有一些目標的一部分,所以'字母'“包含”'ph.b.因為正則表達式匹配'phabe“。
-
匹配正則表達式匹配整個目標。因此,“alphabet”是“匹配”'*t'。
假設想匹配一個Web頁的以下部分:
name="file" value="readme.txt"
要提取readme.txt。一個合適的正則表達式如:
name="file" value="(.+?)">
上述的特殊字符是:
-
( and ) - 這些匹配字符串括起來的部分要返回
-
. - 匹配任何字符
-
+ - 一次或更多次
-
? - 停止在第一個匹配成功時
CREATE JMeter測試計劃
讓我們了解在正則表達式中使用正則表達式提取後處理器的元素,編寫一個測試計劃。此元素會從當前頁麵使用正則表達式識彆文字圖案所需的元素,符合提取文本。
首先,我們將寫人名單和他們的電子郵件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;">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 服務器上,這個頁麵會看起來像在下麵的快照:
在我們的測試計劃中,我們將選擇人以上列表頁中看到的人表的第一行的人。為了捕捉這個人的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和運行測試。輸出將是一個成功,因為在下麵的快照: