如果有這樣的情況:一個完整的操作流程,需要先完成某個操作,獲得某個值或數據信息,然后才能進行下一步的操作(也就是常說的關聯/將上一個請求的響應結果作為下一個請求的參數);
在Jmeter中,可以利用正則表達式提取器來幫助我們完成這一動作。
一、正則表達式
下面是常用的正則表達式操作符:
字符 | 作用 |
---|---|
$ | 匹配輸入字符串的結尾位置。 |
() | 標記一個子表達式的開始和結束位置。子表達式可以獲取供以后使用。 |
* | 匹配前面的子表達式零次或多次。 |
+ | 配前面的子表達式一次或多次。 |
. | 匹配除換行符 \n 之外的任何單字符。 |
? | 匹配前面的子表達式零次或一次,或指明一個非貪婪限定符。 |
\ | 將下一個字符標記為或特殊字符、或原義字符。 |
^ | 匹配輸入字符串的開始位置。 |
\w | 匹配字母、數字、下划線或漢字 |
{n} | n 是一個非負整數。匹配確定的 n 次。 |
{n,} | n 是一個非負整數。至少匹配n 次。 |
{n,m} | m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。 |
貪婪匹配和非貪婪匹配
*、+限定符都是貪婪的,因為它們會盡可能多的匹配文字,只有在它們的后面加上一個?就可以實現非貪婪或最小匹配。
例如,您可能搜索 HTML 文檔,以查找括在 H1 標記內的章節標題。該文本在您的文檔中如下:
<H1>Chapter 1 - 介紹正則表達式</H1>
貪婪:下面的表達式匹配從開始小於符號 (<) 到關閉 H1 標記的大於符號 (>) 之間的所有內容。
<.*?>
非貪婪:如果您只需要匹配開始和結束 H1 標簽,下面的非貪婪表達式只匹配<H1>。
<.*?>
如果只想匹配開始的 H1 標簽,表達式則是:
<\w+?>
通過在 *、+ 或 ? 限定符之后放置 ?,該表達式從"貪心"表達式轉換為"非貪心"表達式或者最小匹配。
二、正則表達式提取器
右鍵添加后置處理器→正則表達式提取器,正則表達式提取器界面如下:
說明
后置處理器:在請求結束或者返回響應結果時發揮作用
正則表達式提取器:允許用戶從服務器的響應中通過使用perl的正則表達式提取值。該元素會作用在指定范圍取樣器,用正則表達式提取所需值,生成模板字符串,並將結果存儲到給定的變量名中。
APPly to:作用范圍(返回內容的斷言范圍)
- Main sample and sub-samples:作用於父節點的取樣器及對應子節點的取樣器
- Main sample only:僅作用於父節點的取樣器
- Sub-samples only:僅作用於子節點的取樣器
-JMeter Variable:作用於jmeter變量(輸入框內可輸入jmeter的變量名稱)
要檢查的響應字段:需要檢查的響應報文的范圍 - 主體:響應報文的主體
- Body(unescaped):主體,響應的主體內容且替換了所有的html轉義符,注意html轉義符處理時不考慮上下文,因此可能有不正確的轉換,不太建議使用
- Body as a Document:從不同類型的文件中提取文本,注意這個選項比較影響性能
- Response Headers:響應信息頭
- Request Headers:請求信息頭
- URL:統一資源定位符,即Internet上用來描述信息資源的字符串
- Response Code:響應狀態碼,比如200、404等
- Response Message:響應信息
引用名稱(Reference Name):Jmeter變量的名稱,存儲提取的結果;即下個請求需要引用的值、字段、變量名
引用方法:引用方法:${引用名稱}
正則表達式(Regular Expression):使用正則表達式解析響應結果,“()”表示提取字符串中的部分值,請不要使用“||”,除非你本身需要匹配這個字符。
模板(Template):從匹配的結果中創建一個字符串,這是通過正則表達式匹配出來的一組值,意為使用提取到的第幾個值(可能有多個值匹配,因此使用模板);從1開始匹配,以此類推.
參數可以在取值模板組合使用,例如:“1-2”作為模板得到的值是使用“-”連接的第一個待匹配內容與第二個待匹配內容組合而成的字符串。
提取單個字符串:
假設我們想要匹配Web頁面的如下部分:name = "file" value = "readme.txt">並要提取readme.txt。一個合適的正則表達式是:name = "file" value = "(.+?)">。我們可以這么寫:
引用名稱:file
正則表達式:name = "file" value = "(.+?)">
模板:$1$
readme.txt在需要引用的地方可以通過:${file}進行使用。
提取多個字符串:
假設我們想要匹配Web頁面的如下部分:name = "file.name" value = "readme.txt">並要提取file.name和readme.txt。一個合適的正則表達式是:name = "(.+?)" value = "(.+?)"。這樣就會創建2個組,分別用於$1$和$2$。我們可以這么寫:
引用名稱:file
正則表達式:name = "(.+?)" value = "(.+?)"
模板:$1$$2$
如下變量的值將會被設定為:
file : file.namereadme.txt
file_g0 : name = "file.name" value = "readme.txt"
file_g1 : file.name
file_g2 : readme.txt
在需要引用的地方可以通過:${file}, ${file_g0},{file_g1},{file_g2}進行使用。
匹配數字(Match No):正則表達式匹配數據的結果可以看做一個數組,表示如何取值:0代表隨機取值,正數n則表示取第n個值(比如1代表取第一個值),負數則表示提取所有符合條件的值。
缺省值:匹配失敗時候的默認值;通常用於后續的邏輯判斷,一般通常為特定含義的英文大寫組合,比如:ERROR