1、正則表示式提取器介紹

如果有這樣的情況:一個完整的操作流程,需要先完成某個操作,獲得某個值或資料資訊,然後才能進行下一步的操作,也就是常說的介面關聯,將上一個請求的響應結果作為下一個請求的引數。

在JMeter中,可以利用正則表示式提取器來幫助我們完成這一動作。

2、正則表示式提取器介面詳解

新增正則表示式提取器元件操作:選中“取樣器”右鍵 —> 新增 —> 後置處理器 —> 正則表示式提取器

介面如下圖所示:

下面是正則表示式提取器元件的詳細說明:

  • 名稱正則表示式提取器元件的自定義名稱,見名知意最好。
  • 註釋:即新增一些備註資訊,對該正則表示式提取器元件的簡短說明,以便後期回顧時檢視。

(1)Apply to:作用範圍(返回內容的取值範圍)

  • Main sample and sub-samples:作用於父節點的取樣器及對應子節點的取樣器。
  • Main sample only:僅作用於父節點的取樣器。
  • Sub-samples only:僅作用於子節點的取樣器。
  • JMeter Variable Name to use:作用於JMeter變數(輸入框內可輸入JMeter的變數名稱),從指定變數中提取需要的值。

(2)Field to check:要檢查的響應欄位

  1. 主體:響應報文的主體,最常用。
  2. Body(unescaped):是替換了所有的HTML轉義符的響應主體內容,注意HTML轉義符處理時不考慮上下文,因此可能有不正確的轉換,不太建議使用。(即:替換了轉義碼的Body部分)
  3. Body as a Document:從不同型別的檔案中提取文字,注意這個選項比較影響效能。
  4. Response Headers:從響應頭資訊中提取資料,如果你使用中文語言的JMeter,會看到這一項是資訊頭,這是中文翻譯問題,應以英文為準。
  5. Request Headers:從請求頭資訊中提取資料。
  6. URL:從請求URL中提取資料。
  7. 響應碼(Response Code):提取響應狀態碼,比如:200、404等。
  8. 響應資訊(Response Message):響應資訊中提取資料。

(3)第三部分內容

  • 引用名稱(Name of created variable):定義提取值的引用變數名稱。
  • 正則表示式(Regular Expression):用於提取值的正則表示式。
  • 模板(Template ($i$ where iis capturing group number, starts at 1)):正則表示式的提取模式。如果正則表示式有多個提取結果,則結果是陣列形式,模板為$1$,$2$,表示把解析到的第幾個值賦給變數,從1開始匹配,以此類推。若只有一個結果,則只能是$1$
  • 匹配數字(0代表隨機):正則表示式匹配資料的結果可以看做一個數組,表示如何取值:0代表隨機取值,正數n則表示取第n個值,比如1代表第一個,2代表第二個,以此類推。負數則表示提取所有符合條件的值,如-1。
  • 預設值(Default Value):匹配失敗時候的預設值;通常用於後續的邏輯判斷,一般通常為特定含義的英文大寫組合,比如:ERROR等。
  • Use empty defau't value:使用空值為預設值。

3、正則表示式提取器的使用

需求

  1. 訪問網易官網,獲取title值。
  2. 將title值放入百度搜索框,進行搜尋。

(1)測試計劃內包含的元件

新增元件操作步驟

  1. 建立測試計劃。
  2. 建立執行緒組:選中“測試計劃”右鍵 —> 新增 —> 執行緒(使用者) —> 執行緒組
  3. 線上程組下,新增取樣器“HTTP請求”元件:選中“執行緒組”右鍵 —> 新增 —> 取樣器 —> HTTP請求
  4. 在取樣器下,新增後置處理器“正則表示式提取器”元件:選中“取樣器”右鍵 —> 新增 —> 後置處理器 —> 正則表示式提取器
  5. 線上程組下,新增監聽器“察看結果樹”元件:選中“執行緒組”右鍵 —> 新增 —> 監聽器 —> 察看結果樹

提示:需要重複新增的元件這裡不重複描述。

最終測試計劃中的元件如下:

點選執行按鈕,會提示你先儲存該指令碼,指令碼儲存完成後會直接自動執行該指令碼。

(2)請求一介面內容

非常簡單的Get請求,之前說了很多次了,這裡就不做解釋了。

介面內容如下圖所示:

(3)正則表示式提取器介面內容

我們在編輯正則表示式提取器元件之前,一般先請求一下需要提取返回資料的介面。

因為我們需要先檢視一下,需要提取的資料在什麼位置,如下圖所示:

然後選擇RegExp Tester檢視模式,先手動編寫正則表示式,看看是否能夠取到需要的資料。

如下圖所示:

之後我們就可以編寫正則表示式提取器元件介面了,如下:

編寫引用名稱、正則表示式、選擇第幾個模版,匹配資料選擇。

正則表示式提取器元件提取出來的資料,會儲存線上程變數中,供其他後續介面使用。

(4)請求二介面內容

填寫介面的基本請求資訊,然後把正則表示式提取器提取出來的資料,作為引數化變數應用到請求中。

如下圖所示:

(5)檢視結果

我們可以看到再第二個請求中,拿到了第一個請求提取出來的資料“網易”。

如下圖所示:

提示:可以新增Debug PostProcessor(除錯後置處理器),或者Debug Sampler(除錯取樣器),來檢視正則表示式提取器中,提取出的內容是否正確。

注意:正常跑用例時刪除或禁用它們。

4、總結

正則表示式提取器可以用於對任何文字的提取。提取完引數後,相當於把引數以 key-value 的形式放到引數池,以便後面的請求使用。

注意:不能超前引用。

正則表示式提取器XPath提取器的區別:

  1. 正則表示式提取器可以用於對頁面任何文字的提取,提取的內容是根據正則表示式在頁面內容中進行文字匹配;
  2. XPath提取器則可以提取返回頁面任意元素的任意屬性;
  3. 如果需要提取的文字是頁面上某元素的屬性值,建議使用XPath Extractor;
  4. 如果需要提取的文字在頁面上的位置不固定,或者不是元素的屬性,建議使用正則表示式提取器。

5、正則表示式簡單說明

正則表示式(Regular Expression):使用正則表示式解析響應結果,()表示提取字串中的部分值,請不要使用||,除非你本身需要匹配這個字元。

  1. .代表匹配任意一個字元。
  2. []表示取值範圍。

    比如:[0-9]代表匹配0-9之間任意一個數字。

    [a-z]代表匹配a-z之間任意一個字元。

    [A-Z]代表匹配A-Z之間任意的一個字元。
  3. +:匹配前面的子表示式一次或多次。
  4. ?:代表匹配一次或一次也沒有。這個符號還有特殊的用法,當放到*號後面的時候,標識取到的資料是非貪婪的。

    說明:貪婪與非貪婪模式是兩種不同的表示式匹配行為,貪婪模式在整個表示式匹配成功的前提下,儘可能多的匹配,而非貪婪模式在整個表示式匹配成功的前提下,儘可能少的匹配,即匹配第一個。
  5. *:匹配前面的子表示式零次或多次。
  6. \d:匹配一個數字字元,等價於[0-9]
  7. \w:匹配包括下劃線的任何單詞字元,等價於[A-Za-z0-9_]
  8. {3}:代表匹配3次,示例如下:

    [1-9][0-9]{4,14}:代表前面的子表示式,至少匹配4次,最多不超過14次。

    1[358]\d{9}:匹配手機號。

    [a-zA-Z0-9_]+@[a-zA-Z0-9]+\.[a-zA-Z]+:匹配郵箱。

提示:常用正則表示式查詢:http://tool.oschina.net/uploads/apidocs/jquery/regexp.html