Jmeter全方面講解——Jmeter的元件使用介紹:(七)后置處理器詳解


Jmeter的后置處理器主要用於取樣器執行后的提取數據操作。

Jmeter常用的后置處理器有:Json提取器、正則表達式提取器、邊界提取器、Beanshell后置處理器。此外還有Xpath提取器、CSS選擇器提取器等,由於這兩項多用前端頁面提取元素,目前的項目基本都是采用前后端分離的技術,Jmeter主要的對象是接口,所以這兩項不怎么會用上。

本文以“聚合數據”提供的免費API進行講解,有需要的可以了解下聚合數據所提供的接口信息,賬號注冊等。
1、百度搜索“聚合數據”,進入到聚合數據官網注冊個賬號。
2、注冊完賬號后,點擊【API】導航即可選用免費的試用接口
image
3、選用想用的API分類,本文以【新聞頭條為例】
image

image

image

自此完成了接口申請,可以在【數據中心】->我的API中查看接口的信息,后邊我們在測試的時候可以參照API文檔進行接口測試
image

image

一:Json提取器
通過JsonPath語法提取取樣器信息。
1、Jmeter的Json提取器頁面介紹:
image
(1):Apply to選項
(1.1)Main sample and sub-samples:應用於主樣本和子樣本
(1.2)Main sample only:僅應用於主樣本,一般選這個選項即可
(1.3)Sub-samples only:僅應用於子樣本
(1.4)Jmeter Variable Name to use:應用於Jmeter變量中,例如:我們可以使用String resopnse=prev.getResponseDataAsString();得到請求的響應信息后,將變量賦值到Jmeter變量response,然后通過${response}引入到此處。這個做法其實多此一舉,不推薦。
(2)Names of created variables:給提取到的變量取名
(3)JSON Path expressions:JsonPath的表達式
(4)Match No:可以填寫數字(0,1,-1),0表示隨機取一個數據,1表示取第一個數據,-1表示取全部數據,也可以不填,不填寫默認取第一個數據
(5)Default Values:未取到值的時候默認值

JsonPath的語法介紹:
(1)$:表示根節點元素
(2)@:表示當前所在位置節點元素
(3)*:表示通配所有元素
(4).:表示匹配當前路徑的下級節點
(5)..:表示遞歸匹配當前路徑的所有節點
(6)[index]:表示匹配數組索引類型的節點
(7)?(表達式):對數據進行篩選

案例1:此處通過調用【聚合報告】的【新聞頭條】請求,獲取一個數據信息

(1)在Jmeter中發起【新聞頭條列表】請求:
image

(2)發起請求后,得到了接口響應的JSON信息:
image

(3)我們想要獲取提取響應信息里的“titile”信息,那么就可以使用JSON提取器。
(3.1)分析Json層級關系,位於"result"->"data"->"title"下
我們可以逐層取數據如:$.result.data[*].title
image

(3.2)我們也可以直接遞歸查找,如:$..title
image

(4)驗證通過后在JSON提取器中填寫信息
image

(5)發起請求,檢查Jmeter變量是否提取成功。
image

案例2:通過調用【聚合報告】的【新聞頭條】請求后,我想即獲取title,又獲取uniquekey和author_name
在Json提取器中可以一次性提取多個值得,如圖
image

執行結果:
image

此處引發了一個思考:我們此處獲取的值得都是隨機的,也就是說,獲取到的title,uniquekey,author_name可能都是在不同新聞下的,在做接口測試的時候,往往是需要保持各個數據都是同一主體信息下,下面案例給出解決方案。

案例3:通過調用【聚合報告】的【新聞頭條】請求后,我想即獲取title,又獲取uniquekey和author_name,並且保證這三個信息都是在同一則新聞下。
(1)先添加一個Json提取器獲取每個新聞的唯一標識:uniquekey:
image
(2)再根據這個uniquekey做數據篩選,此處就需要用到了?()進行數據篩選。
附上JsonPath表達式:
根據uniquekey提取title:$..data[?(@.uniquekey=='${uniquekey}')].title
根據uniquekey提取author_name:$..data[?(@.uniquekey=='${uniquekey}')].author_name
image

(3)執行請求,查看提取情況
image

二:正則表達式提取器
Jmeter還可以使用正則表達式提取取樣器信息。

Jmeter里的正則提取器頁面介紹:
image
1、檢查的響應字段,一般可以選擇:種主體、信息頭、請求頭,默認選擇的是主體,有些時候提取值是放在信息頭的,這里需要注意選擇一下
2、引用名稱:給提取的變量起個變量名
3、正則表達式:填寫的正則表達式
4、模板:可以填寫$0$,$1$,$2$,$-1$等等 $0$:表示隨機取匹配到的值 $-1$:表示取匹配到的所有值 $1$:表示取匹配到的第一個值 $2$:表示取匹配到的第二只值,如此類推
5、匹配數字:0表示隨機,-1表示全部,1表示第一個數
6、缺省值:如果表達式沒有取得到值,那默認一個值

正則表達式語法介紹:
1、常用元定符:
.:匹配除換行符以外的任意字符
$:匹配字符串的結束
^:匹配字符串的開始
2、常用限定符
*:重復零次或更多次
+:重復一次或更多次
?:重復零次或一次
{n}:重復n次

接下來我們用正則表達式提取uniquekey
思考步驟:1、優先考慮貪婪模式是否能獲取到值,即(.+?)的表達式
2、分析所要獲取的值得左右信息,把要獲取的值用()包起來
如:此處想要獲取uniquekey,它的左邊界是固定的:"uniquekey",然后我們想要拿的值就用()包起來,所以此處的正則表達式為:"uniquekey":"(.+?)"
3、我們拿自己寫的正則表達式到正則表達式在線測試器檢查下語法是否有誤,此處介紹的正則表達式測試網址:
https://goregex.cn/index.html
image
4、一般貪婪模式可以解決90%的正則提取問題,遇到個別提取不到的再用其他限定符代替
5、我們確認正則表達式無誤后,就可以放到正則表達式提取器使用了。
image
執行結果:
image

三、邊界提取器
該提取器簡單粗暴,只需要定義左右邊界即可獲取值,在一些響應信息體格式都是固定的情況,可以考慮使用該提取器提取數據

1、我們試下使用邊界提取器提取uniquekey
image

執行結果:
image

缺點:局限性比較高,對於一些結構比較靈活的字符串,還是得需要使用正則表達式

四、Beanshell后置處理器
跟Beanshell前置處理器的使用完全一直,只是執行順序不一樣,Beanshell前置處理器會在取樣器執行前執行,而Beanshell后置處理器在取樣器執行后執行,后置使用方法見前面所寫的博客:
https://www.cnblogs.com/lrc123/p/15678062.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM