Jmeter Regular Expression Extractor允許用戶使用perl類型的正則表達式從服務器響應中提取值。作為后置處理器,它將在其作用域內的每個Sample request之后執行,具體步驟為:應用正則表達式并提取請求值,生成模板字符串,最后將結果存儲到給定的變量名中。
特性參數
-
Apply to(應用范圍)
Main sample only (默認):匹配范圍是當前父采樣器;
Sub-samples only :僅匹配子采樣器;
Main sample and sub-samples :匹配范圍包括當前父采樣器并覆蓋子采樣器;
JMeter Variable Name to use:Extraction is to be applied to the contents of the named variable
Field to check(要檢查的相應字段)
針對Response不用內容進行匹配,可選項有七個,分的比較細,也比較好容易理解。Name of create variable
設置變量名,調用時使用${name}即可。Regular Expression
設置用于解析響應數據的正則表達式,用圓括號表示要提取的字符串,此處圓括號的作用類似于LoadRunner中的左右邊界。Template
模板用于從正則表達式的匹配結果中創建字符串。正則表達式可以設置多個模板,此處可以指定引用哪個模板。語法為:$0$
表示整個表達式匹配的內容,$1$
表示組1,$2$
表示組2,以此類推。如果只有一個正則表達式時,寫$1$
即可。Match No
指定要使用的匹配項。正則表達式可以匹配多次,使用0值表示JMeter應該隨機選擇匹配的值;正整數N表示選擇第N個匹配項;負數表示選擇全部匹配到的內容,一般與ForEach控制器結合使用。-
Default Value
如果正則表達式不匹配,則將引用變量設置為默認值。可以勾選Use empty default value 將默認值設置為空。
DEMO
免費接口:GET, http://qzone-music.qq.com/fcg-bin/cgi_playlist_xml.fcg?uin=${uin}&json=1&g_tk=1916754934
,其中${uin}為QQ號碼。如下圖:
下面參照官網的說明文檔,分別介紹幾種不同情況。
1. Match No 設置為非負數,并且發生匹配
正則表達式內容為:xqusic_mid:"(.*?)",xqusic_id:(\d+)
,Template:,Match No:1,Default Value設置為:test,這表示取第一個分組中匹配到的第一個內容,如果沒有發生匹配,則將模板的值復制為test。如下圖:
運行結果為:
下面來分析一下運行結果中給出的變量,如下:
# 模板的值,即分組1的第一個數據;
rethink=002iYN6V0lHUjb
# 正則表達式中的分組數,可以看到正則表達式中一共給出了兩個要匹配的項;
rethink_g=2
# 分組的匹配內容
rethink_g0=xqusic_mid:"002iYN6V0lHUjb",xqusic_id:3018351066
rethink_g1=002iYN6V0lHUjb
rethink_g2=3018351066
2. Match No 設置為負數,并且發生匹配
將Match No設置為-1,表示取第一個分組全部匹配到的內容。其他參數保持不變,運行腳本后的結果為:# 模板設置的默認值
rethink=test
# rethink_n(1,2,3...) 當前匹配到的模板的值
rethink_1=002iYN6V0lHUjb
rethink_1_g=2
# 分組的匹配內容
rethink_1_g0=xqusic_mid:"002iYN6V0lHUjb",xqusic_id:3018351066
rethink_1_g1=002iYN6V0lHUjb
rethink_1_g2=3018351066
rethink_2=0011OcRB3SIlGB
rethink_2_g=2
rethink_2_g0=xqusic_mid:"0011OcRB3SIlGB",xqusic_id:2177446616
rethink_2_g1=0011OcRB3SIlGB
rethink_2_g2=2177446616
# 內容匹配數,可能為0
rethink_matchNr=2
3. 沒有發生匹配
將正則表達式修改為:\sxqusic_mid:"(.*?)",xqusic_id:(\d+)
,Default Value設置為:test ,然后運行腳本,結果為:
可以看到模板的取值被設置為Default Value,并且刪除了以下變量:rethink_g,rethink_gn(n=0,1,2...)
4. 多模板發生匹配
設置Template為$1$|||$2$
,Match No為1,運行腳本后結果如下:
通過以上栗子可以發現,JMeter中的正則表達式提取器還算是比較靈活的,可以自由設置特性參數以滿足具體需要。不過要想熟練掌握,還是需要多加練習。
【To be continud...】