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:當沒有獲取到參數值時的默認值
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&tpl=mn&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">©2017 Baidu <a href="http://www.baidu.com/duty/">使用百度前必讀</a> <a href="http://jianyi.baidu.com/" class="cp-feedback">意見反饋</a> 京ICP證030173號 <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&tpl=mn&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">©2017 Baidu <a href="http://www.baidu.com/duty/">使用百度前必讀</a> <a href="http://jianyi.baidu.com/" class="cp-feedback">意見反饋</a> 京ICP證030173號 <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!!!
您的肯定就是我進步的動力。如果你感覺還不錯,就請鼓勵一下吧!記得隨手點波 推薦 不要忘記哦!!!
別忘了點 推薦 留下您來過的痕跡