前沿
JMeter正則表達式提取器的配置項中, Regular Expression, Template與 Match No.這三個配置項是比較難以理解的,本文針對這三個配置項設置進行深入分析,以便大家能夠遊刃有餘的使用其功能.
1 JMeter使用的正則表達式
JMeter包含模式匹配工具Apache Jakarta ORO,對應的jar包在JMeter安裝目錄下的lib\\oro-2.0.8.jar.
Jakarta項目是在Apache軟件基金會營運的開放源代碼開發項目之一.開發著面向對象編程語言Java的程序庫,框架等.其中的ORO是一組用於處理文本的Java類庫,提供了與Perl5兼容的正則表達式功能.
2 正則表達式提取器中的Regular Expression
該配置項填寫提取響應數據的正則表達式.
JMeter匹配文本時可以選擇不分組捕獲與分組捕獲兩種方式.
2.1 不分組捕獲
當Template配置相中填寫的是$0$時, Regular Expression配置項中可以沒有(),表示不分組,返回整個匹配項.
如圖所示:
2.2 分組捕獲
當使用分組捕獲時,Regular Expression配置項中則必須至少包含一組(),用以捕獲一個或多個字符串.
一組()稱為一個捕獲組,並且捕獲組可以嵌套.
每個捕獲組都有一個編號與之對應,以方便引用捕獲組匹配的內容.若有多個捕獲組,編號規則為:
按照"("從左至右出現的先後順序,從1開始依次遞增進行編號: 1,2,3, ... ,n
還有一個額外編號為0的捕獲組,用於表示匹配到的整個正則表達式字符串.
比如:
正則表達式: ((\\d{4})-(\\d{2})-(\\d{2}))\\s((\\d{2}):(\\d{2}):(\\d{2}))
捕獲組編號: 1 2 3 4 5 6 7 8
響應文本: Today is 2019-06-25 14:29:30,Tuesday
匹配後各捕獲組對應的內容如下:
g1:2019-06-25
g2:2019
g3:06
g4:25
g5:14:29:30
g6:14
g7:29
g8:30
g0:2019-06-25 14:29:30
3 正則表達式提取器中的Template
Template用以設置捕獲到的字符串以怎樣的格式保存到JMeter變量中.
可以原樣保存,也可以格式化保存,下面討論這兩種情況.
3.1 原樣保存捕獲組字符串
在此項中,可以用$1$表示引用捕獲組1中的內容,$2$表示引用捕獲組2中的內容, ... ,$n$表示引用捕獲組n中的內容,$0$表示引用正則表達式匹配後的整個字符串.
3.2 格式化保存捕獲組字符串
除了使用$n$引用捕獲組的內容外,還可以加入需要的字符,將匹配的內容按照某種格式保存.
4 正則表達式提取器中的Match No.
當正則表達式的捕獲組匹配到多個滿足條件的字符串時,會按照捕獲的先後順序依次對其進行編號:1,2,3,...,n
可以使用編號來選擇需要的字符串,1表示第一個匹配的字符串,2表示第二個匹配的字符串,...,依次類推.
可以根據實際需要從中選擇某個匹配項,所有匹配項或隨機選擇某個匹配項.
4.1 選擇某個匹配項
設置Match No.為i(i=1,2,3,...,n),i不能超過匹配的最大次數.
比如,設置為2,表示取捕獲組獲取的第二個匹配項.
為了方便引用捕獲的內容,JMeter提供了豐富的變量,可以根據實際情況選擇所需的變量.
假設:
"Name of created variable"設置為refName
"Match No."設置為i
捕獲組的個數為m
各變量的具體含義如下:
refName: 按照"Template"設置保存的模板值;
refName_g: 捕獲組的個數
refName_g0: 正則表達式的值
refName_gN: 捕獲組N的第i個匹配項(N=1,2,3,...,m)
舉例說明:
4.2 選擇所有匹配項
設置Match No.為-I(I=1,2,3,...).
JMeter只要檢測到是負整數時則輸出所有匹配項.
假設:
"Name of created variable"設置為refName
"Match No."設置為-I
捕獲組的個數為m
捕獲組匹配項的個數為n
各變量的具體含義如下:
refName: 在此種情況下始終顯示為默認值(Default Value設置的值)
refName_i: 捕獲組第i個匹配項對應的模板值(i=1,2,3,...,n)
refName_i_g: 捕獲組第i個匹配項個數(i=1,2,3,...,n)
refName_i_g0: 捕獲組取第i個匹配項時正則表達式的值(i=1,2,3,...,n)
refName_i_gj: 捕獲組j(j=1,2,3,...,m)的第i(i=1,2,3,...,n)個匹配項
下面是一個例子:
4.3 隨機選擇某個匹配項
設置Match No.為0
此種情況下,各變量的具體含義與"4.1 選擇某個匹配項"相同,不再說明.
閱讀更多 川石信息 的文章