1. 程式人生 > >Jmeter(十七) - 從入門到精通 - JMeter後置處理器 -上篇(詳解教程)

Jmeter(十七) - 從入門到精通 - JMeter後置處理器 -上篇(詳解教程)

1.簡介

  後置處理器是在發出“取樣器請求”之後執行一些操作。取樣器用來模擬使用者請求,有時候伺服器的響應資料在後續請求中需要用到,我們的勢必要對這些響應資料進行處理,後置處理器就是來完成這項工作的。例如系統登入成功以後我們需要獲取SessionId,在後面的業務操作中伺服器會驗證這個SessionId,獲取SessionId這個功能過程就可以用後置處理器中的正則表示式提取器來完成。

2.預覽後置處理器

  首先我們來看一下JMeter的後置處理器,路徑:執行緒組(使用者)->新增->後置處理器();我們可以清楚地看到JMeter5中共有11個後置處理器(不包括jp@gc開頭的後置處理器,這個是巨集哥安裝的外掛),如下圖所示:

如果上圖您看得不是很清楚的話,巨集哥總結了一個思維導圖,關於JMeter5的前置處理器型別,如下圖所示: 

通過以上的瞭解,我們對後置處理器有了一個大致的瞭解和認識。下面巨集哥就給小夥伴或則童鞋們分享講解一些通常在工作中會用到的後置處理器。 

3.常用後置處理器詳解

這一小節,巨集哥就由上而下地詳細地講解一下常用的後置處理器。

3.1CSS/JQuery提取器

CSS/JQuery提取器,是通過css選擇器定位頁面元素並讀取資料 。

1、我們先來看看這個 CSS/JQuery提取器 長得是啥樣子,路徑:執行緒組 > 新增 > 後置處理器 > CSS/JQuery提取器,如下圖所示: 

2、關鍵引數說明如下:

Name:名稱,可以隨意設定,甚至為空;

Comments:註釋,可隨意設定,可以為空;

Apply to:

Main sample only 僅適用於主要樣本

Sub-samples only 僅適用於子樣本

Main sample and sub-samples 主要樣本和子樣本

JMeter Variable Name to use 用作Jmeter變數名稱

Name of created variable:引用名稱 也就是jmeter裡面的變數

CSS Selector expression:CSS選擇器表示式 CSS表示式

Attribute:屬性 要提取的元素的屬性。示例:<input type="checkbox" name="colors" value="blue" id="blue">藍色<br>,那麼這裡的屬性就是value,因為我們要提取blue

Match No.(0 for Random):匹配數字 0隨機一個,否則索引(從1開始)

Default Value: 預設值 在無法提取內容的情況下放入變數的值。

3、CSS選擇器或JQuery選擇器是Jmeter支援的兩種語法,下面對其兩種語法進行簡單介紹

CSS選擇器

選擇選擇
.class .intro  All elements with class="intro"
 #id #firstname The element with id="firstname"
 * * All elements
 element p All <p> elements
element,element  div, p All <div> elements and all <p> elements
element element div p All <p> elements inside <div> elements

JQuery選擇器

選擇 例 選擇
*  $("*") All elements
 #id $("#lastname") The element with id="lastname"
.class $(".intro") All elements with class="intro"
.class,.class  $(".intro,.demo") All elements with the class "intro" or "demo"
element $("p") All <p> elements
el1,el2,el3 $("h1,div,p") All <h1>, <div> and <p> elements
3.1.1例項(提取指定連結)

1、新建測試計劃,執行緒組下新增訪問 部落格園主頁的取樣器,如下圖所示:

2、然後再新增CSS/JQuery提取器,如下圖所示:

 其中CSS選擇器表示式就按如下圖的方法獲取,如下圖所示:

3、接著再新增一個取樣器 用來確認是否提取到我們要提取的東西,提取出來的值用來傳參,如下圖所示:

4、配置好以後,點選“儲存”,執行JMeter,查看錶格結果(可以看到提取的路徑就是我們要提取部落格園的新聞路徑),如下圖所示:

3.1.2例項(隨機提取連結)

1、新建測試計劃,執行緒組下新增隨機變數和訪問 JMeter主頁的取樣器,如下圖所示:

執行緒組

隨機變數

取樣器

2、然後再新增CSS/JQuery提取器,如下圖所示:

3、接著再新增一個取樣器 用來確認是否提取到我們要提取的東西,提取出來的值用來傳參,如下圖所示:

4、配置好以後,點選“儲存”,執行JMeter,查看錶格結果(可以看到提取的路徑就是我們要提取部落格園的新聞路徑),如下圖所示:

3.2JSON提取器

JSON 提取器可以使用JSON-PATH語法從JSON格式的響應中提取資料。

該後處理器與正則表示式提取器非常相似。必須將其放置為HTTP Sampler或具有JSON響應的任何其他取樣器的子級,可以以非常簡單的方式提取JSON文字內容。

1、我們先來看看這個JSON提取器長得是啥樣子,路徑:執行緒組 > 新增 > 後置處理器 > JSON提取器,如下圖所示:  

2、關鍵引數說明如下:

Name:名稱,可以隨意設定,甚至為空;

Comments:註釋,可隨意設定,可以為空;

Update Once Per Iteration:標識是否每輪迭代更新一次元素;

Apply to(應用範圍):
Main sample and sub-samples:應用於主sample及子sample

Main sample only:預設的是這個,應用於主sample

Sub-samples only:應用於子sample

JMeter Variable Name to use:應用於變數命名的內容

Name of created Variable:儲存的變數名,後面使用${Variable names}引用

JSON Path Expression:json表示式

Match No.(0 or Random):匹配的值是哪一個,預設不填寫是獲取符合條件的第一個,這個與正則表示式的類似(0為隨機、N為獲取第N個、-1獲取所有)

Compute comcatemation var(suffix_ALL):如果發現許多結果,外掛將使用“,”分隔符將它們連線起來,並將其儲存在名為<variable name>_ALL的var中

Default Values:當沒有獲取到引數值時的預設值

3、JSON path expression 語法

JsonPath

描述

$

根節點

@

當前節點

.or[]

子節點

..

選擇所有符合條件的節點

*

所有節點

[]

迭代器標示,如陣列下標

[,]

支援迭代器中做多選

[start:end:step]

陣列切片運算子

?()

支援過濾操作

()

支援表示式計算

3.2.1例項 

1、新建測試計劃,執行緒組下新增天氣預報介面取樣器,如下圖所示:

2、然後再在取樣器下新增JSON提取器,如下圖所示:

3、緊接著再新增一個取樣器 度娘,用來獲取提取的status,提取出來的值用來傳參,如下圖所示:

4、配置好以後,點選“儲存”,執行JMeter,查看錶格結果,如下圖所示:

天氣預報介面請求結果:

度娘請求結果: 

3.3邊界提取器

邊界提取器,使用JMeter5.0的邊界提取器,不需要寫複雜的正則表示式,只要填寫左右邊界即可,我們想從介面中提取一些想用的東西,不習慣用正則提取器和json提取器,今天我們來介紹下邊界提取器,相對前者較簡單些。它通過左右邊界來提取需要的內容,它可以匹配任何格式的內容,如文字、json、xpath、html等等,使用也很簡單,分別填寫要提取內容的左右邊界即可,很靈活。

 1、我們先來看看這個邊界提取器長得是啥樣子,路徑:執行緒組 > 新增 > 後置處理器 > 邊界提取器,如下圖所示: 

2、關鍵引數說明如下:

Name:名稱,可以隨意設定,甚至為空;

Comments:註釋,可隨意設定,可以為空;

Update Once Per Iteration:標識是否每輪迭代更新一次元素;

Apply to(應用範圍):
Main sample and sub-samples:應用於主sample及子sample

Main sample only:預設的是這個,應用於主sample

Sub-samples only:應用於子sample

JMeter Variable Name to use:應用於變數命名的內容

Name of created Variable:儲存的變數名,後面使用${Variable names}引用

JSON Path Expression:json表示式

Match No.(0 or Random):匹配的值是哪一個,預設不填寫是獲取符合條件的第一個,這個與正則表示式的類似(0為隨機、N為獲取第N個、-1獲取所有)

Compute comcatemation var(suffix_ALL):如果發現許多結果,外掛將使用“,”分隔符將它們連線起來,並將其儲存在名為<variable name>_ALL的var中

Default Values:當沒有獲取到引數值時的預設值

3.3.1例項

1、新建測試計劃,執行緒組下新增度娘取樣器,如下圖所示:

2、使用邊界提取器提取度娘取樣器響應中(百度一下,你就知道),如下圖所示:

<!DOCTYPE html>
<!--STATUS OK-->
<html>
 <head> 
  <meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
  <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> 
  <meta content="always" name="referrer" /> 
  <link rel="stylesheet" type="text/css" href="http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css" /> 
  <title>百度一下,你就知道</title> 
 </head> 
 <body link="#0000cc"> 
  <div id="wrapper"> 
   <div id="head"> 
    <div class="head_wrapper"> 
     <div class="s_form"> 
      <div class="s_form_wrapper"> 
       <div id="lg"> 
        <img hidefocus="true" src="//www.baidu.com/img/bd_logo1.png" width="270" height="129" /> 
       </div> 
       <form id="form" name="f" action="//www.baidu.com/s" class="fm"> 
        <input type="hidden" name="bdorz_come" value="1" /> 
        <input type="hidden" name="ie" value="utf-8" /> 
        <input type="hidden" name="f" value="8" /> 
        <input type="hidden" name="rsv_bp" value="1" /> 
        <input type="hidden" name="rsv_idx" value="1" /> 
        <input type="hidden" name="tn" value="baidu" /> 
        <span class="bg s_ipt_wr"> <input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off" autofocus="" /> </span> 
        <span class="bg s_btn_wr"> <input type="submit" id="su" value="百度一下" class="bg s_btn" /> </span> 
       </form> 
      </div> 
     </div> 
     <div id="u1"> 
      <a href="http://news.baidu.com" name="tj_trnews" class="mnav">新聞</a> 
      <a href="http://www.hao123.com" name="tj_trhao123" class="mnav">hao123</a> 
      <a href="http://map.baidu.com" name="tj_trmap" class="mnav">地圖</a> 
      <a href="http://v.baidu.com" name="tj_trvideo" class="mnav">視訊</a> 
      <a href="http://tieba.baidu.com" name="tj_trtieba" class="mnav">貼吧</a> 
      <noscript> 
       <a href="http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1" name="tj_login" class="lb">登入</a> 
      </noscript> 
      <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登入</a>');</script> 
      <a href="//www.baidu.com/more/" name="tj_briicon" class="bri" style="display: block;">更多產品</a> 
     </div> 
    </div> 
   </div> 
   <div id="ftCon"> 
    <div id="ftConw"> 
     <p id="lh"> <a href="http://home.baidu.com">關於百度</a> <a href="http://ir.baidu.com">About Baidu</a> </p> 
     <p id="cp">&copy;2017&nbsp;Baidu&nbsp;<a href="http://www.baidu.com/duty/">使用百度前必讀</a>&nbsp; <a href="http://jianyi.baidu.com/" class="cp-feedback">意見反饋</a>&nbsp;京ICP證030173號&nbsp; <img src="//www.baidu.com/img/gs.gif" /> </p> 
    </div> 
   </div> 
  </div>   
 </body>
</html>

3、然後再在取樣器下新增邊界提取器,如下圖所示:

說明:

  (1)Apply to:選Main sample only。

  (2)要檢查的響應欄位:選主體。

  (3)引用名稱:提取出來引數引用的名稱。

  (4)提取值左邊界 :<title>。

  (5)提取值右邊界 </title>。

  (6)匹配數字:0代表隨機取值,1代表全部取值,通常情況下填0

  (7)預設值:如果引數沒有取得到值,那預設給一個值讓它取。

3、緊接著再新增一個取樣器 提取出來的值用來傳參,用來獲取提取的param,提取出來的值用來傳參,如下圖所示:

4、配置好以後,點選“儲存”,執行JMeter,查看錶格結果,如下圖所示:

度娘請求結果:

提取出來的值用來傳參請求結果: 

3.4正則表示式提取器

允許使用者使用正則表示式從伺服器響應中提取值。作為後處理器,此元素將在其範圍內的每個Sample請求之後執行,應用正則表示式,提取請求的值,生成模板字串,並將結果儲存到給定的變數名稱中。 

1、我們先來看看這個正則表示式提取器長得是啥樣子,路徑:執行緒組 > 新增 > 後置處理器 > 正則表示式提取器,如下圖所示: 

2、關鍵引數說明如下:

Name:名稱,可以隨意設定,甚至為空;

Comments:註釋,可隨意設定,可以為空;

Session Argument Name:會話引數名稱,用於搜尋sessionId,其他sample也可通過此引數來 呼叫其獲取的sessionId;

Path Extension:路徑擴充套件,如url添加了分號作為分割,則勾選此項;

Do not use equals in path extension:用於url不用等號來分割key和value的型別;

Do not use questionmark in path extension:用於不帶?的型別;

Cache Session Id?:勾選此項則會儲存在其掛載的sample上獲取到的sessionId供後邊的其他sample使用;

URL Encode:是否使用url編碼;

3.4.1例項

1、新建測試計劃,執行緒組下新增度娘取樣器,如下圖所示:

2、使用正則表示式提取器提取度娘取樣器響應中(百度一下,你就知道),如下圖所示:

<!DOCTYPE html>
<!--STATUS OK-->
<html>
 <head> 
  <meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
  <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> 
  <meta content="always" name="referrer" /> 
  <link rel="stylesheet" type="text/css" href="http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css" /> 
  <title>百度一下,你就知道</title> 
 </head> 
 <body link="#0000cc"> 
  <div id="wrapper"> 
   <div id="head"> 
    <div class="head_wrapper"> 
     <div class="s_form"> 
      <div class="s_form_wrapper"> 
       <div id="lg"> 
        <img hidefocus="true" src="//www.baidu.com/img/bd_logo1.png" width="270" height="129" /> 
       </div> 
       <form id="form" name="f" action="//www.baidu.com/s" class="fm"> 
        <input type="hidden" name="bdorz_come" value="1" /> 
        <input type="hidden" name="ie" value="utf-8" /> 
        <input type="hidden" name="f" value="8" /> 
        <input type="hidden" name="rsv_bp" value="1" /> 
        <input type="hidden" name="rsv_idx" value="1" /> 
        <input type="hidden" name="tn" value="baidu" /> 
        <span class="bg s_ipt_wr"> <input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off" autofocus="" /> </span> 
        <span class="bg s_btn_wr"> <input type="submit" id="su" value="百度一下" class="bg s_btn" /> </span> 
       </form> 
      </div> 
     </div> 
     <div id="u1"> 
      <a href="http://news.baidu.com" name="tj_trnews" class="mnav">新聞</a> 
      <a href="http://www.hao123.com" name="tj_trhao123" class="mnav">hao123</a> 
      <a href="http://map.baidu.com" name="tj_trmap" class="mnav">地圖</a> 
      <a href="http://v.baidu.com" name="tj_trvideo" class="mnav">視訊</a> 
      <a href="http://tieba.baidu.com" name="tj_trtieba" class="mnav">貼吧</a> 
      <noscript> 
       <a href="http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1" name="tj_login" class="lb">登入</a> 
      </noscript> 
      <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登入</a>');</script> 
      <a href="//www.baidu.com/more/" name="tj_briicon" class="bri" style="display: block;">更多產品</a> 
     </div> 
    </div> 
   </div> 
   <div id="ftCon"> 
    <div id="ftConw"> 
     <p id="lh"> <a href="http://home.baidu.com">關於百度</a> <a href="http://ir.baidu.com">About Baidu</a> </p> 
     <p id="cp">&copy;2017&nbsp;Baidu&nbsp;<a href="http://www.baidu.com/duty/">使用百度前必讀</a>&nbsp; <a href="http://jianyi.baidu.com/" class="cp-feedback">意見反饋</a>&nbsp;京ICP證030173號&nbsp; <img src="//www.baidu.com/img/gs.gif" /> </p> 
    </div> 
   </div> 
  </div>   
 </body>
</html>

3、然後再在取樣器下新增正則表示式提取器,如下圖所示:

說明:

  (1)引用名稱:下一個請求要引用的引數名稱,如填寫title,則可用${title}引用它。

  (2)正則表示式:

    ():括起來的部分就是要提取的。

    .:匹配任何字串。     +:一次或多次。     ?:不要太貪婪,在找到第一個匹配項後停止。

  (3)模板:用$$引用起來,如果在正則表示式中有多個正則表示式,則可以是$2$$3$等等,表示解析到的第幾個值給title。如:$1$表示解析到的第1個值

  (4)匹配數字:0代表隨機取值,1代表全部取值,通常情況下填0

  (5)預設值:如果引數沒有取得到值,那預設給一個值讓它取。

4、緊接著再新增一個取樣器 提取出來的值用來傳參,用來獲取提取的param,提取出來的值用來傳參,如下圖所示:

5、配置好以後,點選“儲存”,執行JMeter,查看錶格結果,如下圖所示:

度娘請求結果:

提取出來的值用來傳參請求結果:

 4.小結

 好了,今天到這裡JMeter的所有後置處理器就介紹到這裡,感謝你耐心的閱讀和學習。不喜勿噴si!!!

 

您的肯定就是我進步的動力。如果你感覺還不錯,就請鼓勵一下吧!記得隨手點波  推薦  不要忘記哦!!!

別忘了點 推薦 留下您來過的痕跡

 

&n