Jmeter關聯之正則表達式


如果有這樣的情況:一個完整的操作流程,需要先完成某個操作,獲得某個值或數據信息,然后才能進行下一步的操作(也就是常說的關聯/將上一個請求的響應結果作為下一個請求的參數);

在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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM