最近在用JMerter給公司一個項目作性能測試,期間遇到要提取上一個接口返回的數據做爲下個接口的請求。這裏作下記錄正則表達式
如圖所示,須要將「掃描二維碼」接口請求的返回值中的data部分,做爲「處理提交碼值」接口的參數傳遞給服務器。json
首先我想到的是利用正則表達式,直接把整個data部分提取出來,數組
嗯,沒錯,是否是以爲一步就搞定了,還說個毛線。服務器
可是.............性能
坑爹的是,服務端在接收data數據的時候,要對data數據作處理學習
首先,data以數組的形式傳參(有可能一次提交多個碼),測試
其次,data數組裏邊嵌套字典的形式,可是我傳給服務端須要把""轉義。。。(這裏真的想吐血,請教下各位大佬,這種狀況服務端不能作處理嗎)插件
結果,要傳遞的值大概就是下面呈現的形式:(懵逼....)blog
因此,以前把整個data部分取出來的想法pass了。。。索引
好吧,我另闢蹊徑,想着把每一個參數單獨取出來,下個接口在body裏邊先把"作成\",先轉義,再把值引用進來(像是摳圖同樣的趕腳...)
說完就幹,前面幾個參數取值都OK,沒什麼難度,取boxList的時候有點犯難,這個參數先後通常都是","符號,沒有明顯的標誌。
查了度娘,找了一種方法來取值:
把整個boxList所有取值(共6個),再用匹配數字去取第幾個值。
這裏有個小插曲,開始覺得能夠用【模板】裏邊的$1$這種去匹配表達式裏邊的6個取值,後面接口再用boxList_一、boxList_2........boxList_6來引用。後面發現不行...
【模板】$1$$2$表明的是,正則表達式中有多個提取式(多個括號裏邊的東東),第一個取值和第二個取值怎麼組合形式
好比:正則表達式提取出來兩個值,一個是lixiaoming,一個是24,若是【模板】寫成$1$$2$,那麼後面應用的時候,這個參數展示就是「lixiaoming24」(中間能夠加其餘鏈接符,有時候取多個值,再以某種形式組合成一個參數,這種可能會用到)
好,值取出來了。而後添加了6個正則提取器(請教大佬,這種後置處理器添加太多,對性能測試自己會有多大影響呢)
大體的形式就是這樣的:(....我也很無奈...)
後面接口,用boxList1....boxList6引用,OK,沒問題。
後面經理給我說有一個叫JSON Path Extractor的插件,用來提取服務器返回的json中的數據很好用。(what?!竟然以前沒有使用過這等插件)
立刻相會度娘,找了幾篇測友發的經驗之談,哇靠,果然簡單粗暴....
立刻招來玩玩,啊呸,立刻學些學習~
下載了插件,而後學着寫提取表達式
data裏邊的數據能夠看作是字典裏邊嵌套數組的形式,操做字典引用key,數組的話用索引去取值
因而表達式爲:$.data.boxList[0]
另外,網上也找了另外一種,data是數組裏邊嵌套字典的,學習學習
提取id的表達式爲:$.data[0].id
OK,新方法果真比正則表達式好用(自我以爲),並且也比較好理解
另外,在添加了正則表達式,JSON Path Extractor等提取器,想查看錶達式寫的是否正確,提取的內容是否正確。"查看結果樹"能夠作到
在結果樹中選擇「RegExp Tester」,輸入你寫的正則表達式,就能知道正則是否寫正確了。
同理,JSON Path Extractor同樣
OK,寫完了。此次仍是有很多收穫,後面再對JMeter系統學習學習。
若是文中有些錯誤點,但願各位大佬及時指出,定虛心接受~