01.03 JMeter必知必會系列(18) JMeter正則表達式提取器疑難分析


JMeter必知必會系列(18) JMeter正則表達式提取器疑難分析

JMeter正則表達式提取器疑難分析

前沿

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配置項中可以沒有(),表示不分組,返回整個匹配項.

如圖所示:

JMeter必知必會系列(18) JMeter正則表達式提取器疑難分析

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

JMeter必知必會系列(18) JMeter正則表達式提取器疑難分析

3 正則表達式提取器中的Template

Template用以設置捕獲到的字符串以怎樣的格式保存到JMeter變量中.

可以原樣保存,也可以格式化保存,下面討論這兩種情況.

3.1 原樣保存捕獲組字符串

在此項中,可以用$1$表示引用捕獲組1中的內容,$2$表示引用捕獲組2中的內容, ... ,$n$表示引用捕獲組n中的內容,$0$表示引用正則表達式匹配後的整個字符串.

JMeter必知必會系列(18) JMeter正則表達式提取器疑難分析

3.2 格式化保存捕獲組字符串

除了使用$n$引用捕獲組的內容外,還可以加入需要的字符,將匹配的內容按照某種格式保存.

JMeter必知必會系列(18) JMeter正則表達式提取器疑難分析

4 正則表達式提取器中的Match No.

當正則表達式的捕獲組匹配到多個滿足條件的字符串時,會按照捕獲的先後順序依次對其進行編號:1,2,3,...,n

可以使用編號來選擇需要的字符串,1表示第一個匹配的字符串,2表示第二個匹配的字符串,...,依次類推.

可以根據實際需要從中選擇某個匹配項,所有匹配項或隨機選擇某個匹配項.

4.1 選擇某個匹配項

設置Match No.為i(i=1,2,3,...,n),i不能超過匹配的最大次數.

比如,設置為2,表示取捕獲組獲取的第二個匹配項.

JMeter必知必會系列(18) JMeter正則表達式提取器疑難分析

為了方便引用捕獲的內容,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)

舉例說明:

JMeter必知必會系列(18) JMeter正則表達式提取器疑難分析

4.2 選擇所有匹配項

設置Match No.為-I(I=1,2,3,...).

JMeter只要檢測到是負整數時則輸出所有匹配項.

JMeter必知必會系列(18) 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)個匹配項

下面是一個例子:

JMeter必知必會系列(18) JMeter正則表達式提取器疑難分析

4.3 隨機選擇某個匹配項

設置Match No.為0

JMeter必知必會系列(18) JMeter正則表達式提取器疑難分析

此種情況下,各變量的具體含義與"4.1 選擇某個匹配項"相同,不再說明.


分享到:


相關文章: