Jmeter元件——JSON Extractor後置處理器介紹2
在前段時間將JSON Extractor元件做了個簡單的介紹: Jmeter元件——JSON Extractor後置處理器介紹1 ,今天以一個具體的json,以不同的方式提取資料做個詳細的介紹。
一、模擬請求
使用java請求來模擬請求,入參json格式資料,以例項來講解,具體如下
1.線上程組下新增一個java請求
2.類名稱選擇org.apache.jmeter.protocol.java.test.JavaTest
3.json資料填入ResultData中
4.執行該指令碼,在結果樹中檢視結果
二、資料提取
json示例資料如下:
{"name":"溫一壺清酒","url":"https://www.cnblogs.com/hong-fithing/","page":5,"isNonProfit":true,"address":{"street":"科技園路","city":"上海","country":"中國"},"data":{"Jenkins系列部落格":[{"name":"Jenkins環境搭建(1)-下載與安裝","url":"https://www.cnblogs.com/hong-fithing/p/10290315.html","pageview":[189,133],"keywords":["jenkins"]},{"name":"Jenkins環境搭建(2)-搭建jmeter+ant+jenkins自動化測試環境","url":"https://www.cnblogs.com/hong-fithing/p/10462493.html","pageview":[398,1500],"keywords":["jenkins","ant","jmeter"]},{"name":"Jenkins環境搭建(3)-配置自動傳送郵件","url":"https://www.cnblogs.com/hong-fithing/p/10473996.html", "pageview":[18900,28800],"page":18900, "keywords":[ "jenkins", "郵件"]}],"UI自動化系列部落格":[{"name":"UI自動化測試(一)簡介及Selenium工具的介紹和環境搭建","url":"https://www.cnblogs.com/hong-fithing/p/7622215.html","pageview":1988,"keywords":[ "selenium","自動化"]},{"name":"UI自動化測試(二)瀏覽器操作及對元素的定位方法(xpath定位和css定位詳解)","url":"https://www.cnblogs.com/hong-fithing/p/7623838.html","pageview":3980,"keywords":["xpath","css","自動化"]},{"name":"UI自動化測試(三)對頁面中定位到的元素物件做相應操作","url":"https://www.cnblogs.com/hong-fithing/p/7625800.html","pageview":2489,"keywords":["自動化"]}]},"pageview":18900 }
1.基本提取
$['name'] $.name
區別:
使用符號.只能獲取一個子節點
使用中括號[]可以獲取多個子節點的值
$["name","url"] 獲取的是根節點下name節點和url節點,並不是值
$.data.Jenkins系列部落格[*] $.data.Jenkins系列部落格
區別:
使用[*],表示獲取data節點下 Jenkins系列部落格 陣列中元素的值
不使用[*] 表示獲取data節點下 Jenkins系列部落格 的值
$.data.Jenkins系列部落格[0]表示獲取 Jenkins系列部落格 陣列中第一個元素 $.data.Jenkins系列部落格[0,2]表示獲取 Jenkins系列部落格 陣列中第一個/第三個元素
2.切片處理
切片處理,就類似於取資料的一個範圍值,格式為:$.data.Jenkins系列部落格[n:m]
說明:
n:表示陣列元素的起始下標,如果不填寫,則預設為0,表示從第一個開始
m:表示陣列原因的結束下標,如果不填寫,則預設為陣列的最後一個
ps:是一個半閉半開區間,即包含起始下標,不包含結束下標
$.data.Jenkins系列部落格[0:]提取陣列中的所有元素 $.data.Jenkins系列部落格[1:]提取第一個開始到最後的元素
$.data.Jenkins系列部落格[-n:]提取倒數n個元素 $.data.Jenkins系列部落格[:-m]提取不包含最後m個元素的其他元素
輸入負值說明,如下:
$.data.* $.data..*
.* 表示獲取data節點下的所有子節點
..* 表示獲取data節點下所有符合條件的所有節點
如下圖所示:
3.過濾表示式
表示式是用於陣列節點的過濾處理,用來找到符合要求的節點,因為json是無序的,格式為:[?(表示式)]
$.data.Jenkins系列部落格[?(@.name == "Jenkins環境搭建(1)-下載與安裝")].url
這個表示式可用sql來表達為:
select url from Jenkins系列部落格 where name='Jenkins環境搭建(1)-下載與安裝'
同樣的取值,只是寫法不一樣而已
4.表示式操作
==、!= < <= > >= =~正則匹配 in存在於 nin不存在於 subsetof子集 ||或者 &&並且
示例如下:
$.data.Jenkins系列部落格[?(@.pageview > 398)] $.data.Jenkins系列部落格[?(@.name != "Jenkins環境搭建(1)-下載與安裝")].pageview $.data.Jenkins系列部落格[?(@.pageview in [398])]
如上簡單表示式,就無須過多解釋了,一看就明白。
來個正則匹配示例:
$.data.Jenkins系列部落格[?(@.name =~ /Jenkins環境搭建(2).+/)]
表示從 Jenkins系列部落格 獲取 name 為Jenkins環境搭建(2)開頭的元素
$.data.Jenkins系列部落格[?(@.keywords.length() >=2 && @.name =~ /Jenkins環境搭建.+/)]
表示從 Jenkins系列部落格 獲取 keywords大於等於2 並且 name 為Jenkins環境搭建開頭的元素
$.data.Jenkins系列部落格[?(@.page == $.pageview)]
表示從 Jenkins系列部落格 獲取 page == 根節點下的pageview 的元素
再來講個獲取子集的表示式
$.data.Jenkins系列部落格[?(@.keywords subsetof ["jmeter","jenkins","ant","郵件"])]
表示從 Jenkins系列部落格 陣列中,獲取keywords為 jmeter jenkins ant 郵件 四者的子集的元素
修改表示式如下:
$.data.Jenkins系列部落格[?(@.keywords subsetof ["jenkins","郵件","ant"])]
獲取到的值如下:
jmeter中的JSON Extractor就介紹到這了,都是些很基礎的使用方式,希望對需要的人有所幫助。
本文僅代表作者觀點,系作者@溫一壺清酒發表。 歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。 文章出處:http://www.cnblogs.com/hong-fithing/