jmeter 正則表示式學習(一)--使用詳解
阿新 • • 發佈:2019-01-10
jmeter自帶後置處理器:正則表示式提取器,可以用來提取介面響應裡的資訊,給予後續介面傳參用。
例如要提取響應結果裡的token欄位及sex欄位(響應內容為:
"token":"83EEAA887F1D2F1AA1CDA9E197810992","sex":0,"userName":"12548650"),提取器如下設定,
正則表示式提取器說明:
Apply to:應用範圍(一般就選擇預設的Main sample only),就算有重定向,一般也是提取最終那個請求的介面。
要檢查的響應欄位:樣本資料來源。
主體: 介面響應主體內容,一般要提取普通http響應結果的資料,都勾選這個。
資訊頭:響應頭的所有內容。
Request Headers:請求頭的所有內容。
url:是對sample的url進行匹配,也就是檢視結果樹裡請求內容的第一行url,不包含data裡的請求引數(即只能匹配protocol(協議)+host+path+querystring ,如:https://www.baidu.com/index.php?tn=monline_3_dg)。
響應程式碼:http響應程式碼,如101,200,302,404,501等。
響應資訊:http響應程式碼對應的響應資訊,例如:OK, Found(HTTP/1.1 200 Ok;HTTP/1.1 302 Found)。
引用名稱:其他地方引用時的變數名稱,名稱只能是一個,引用方法:${token}。如圖
正則表示式:資料提取器,一般簡單的通用語法就是:左邊界(.*?)右邊界,左右邊界就是為了能準確定位到想匹配的內容,如最上面圖的"token":"(.*?)","sex":(.*?),"userName",
其中"token":" 以及","sex":
和,"userName"這3個就是左右邊界,(.*?)
是替換了想要提取的內容,裡面的'?'為非貪婪匹配,(非貪婪模式就是說在遇到第一個右邊界後就停止匹配,這樣就可以精確拿到想要的內容)。建議均使用非貪婪匹配,除非特殊情況。
模板:對應正則表示式提取器型別,樣式為:$n$。若模板為:$0$,則為整個表示式匹配到的內容,就是包括小括號內跟小括號外的內容,即("token":"83EEAA887F1D2F1AA1CDA9E197810992","sex":0,"userName")。若模板為:$1$,則對應正則表示式中的第一個(.*?)所匹配的內容,即(83EEAA887F1D2F1AA1CDA9E197810992 )
,若模板為:$2$,則對應正則表示式中的第二個(.*?)所匹配的內容,即(0),若模板為$1$$2$,則把2個(.*?)所匹配的內容拼接起來,即(83EEAA887F1D2F1AA1CDA9E1978109920)。模板是可以自由組合的,後續案例中再介紹。
匹配數字:正則表示式匹配資料的最終結果可以看做一個數組,匹配數字即可看做是陣列的第幾個元素。當為 0 時,隨機返回匹配的資料。當為 1 時,表示返回匹配結果陣列的第一個元素。當為負數(-1,-2,-100都可以)時,表示返回全部元素,並且同時會返回一個元素總數的變數token_matchNr,在引用時:通過${token_1}的方式來取第1個匹配的內容,${token_2}來取第2個匹配的內容。
預設值:匹配失敗時的預設值。通常用於後續的邏輯判斷,建議使用一些特殊含義的,比如0,NULL,ERROR等。
正則測試:
可以直接在察看結果樹裡選擇Regexp正則測試模式來測試正則是否寫的正確。
正則結果檢視:
如何檢視提取到了想要的內容呢,這裡就需要提到另外一個後置處理器:Debug PostProcessor
該元件就為除錯所用,一般用於檢視變數值,新增方法同正則表示式提取器。