1. 程式人生 > >jmeter 正則表示式學習(一)--使用詳解

jmeter 正則表示式學習(一)--使用詳解

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 該元件就為除錯所用,一般用於檢視變數值,新增方法同正則表示式提取器。