JMeter----正則表達式&JSON Path Extractor


最近在用JMerter給公司一個項目做性能測試,期間遇到要提取上一個接口返回的數據作為下個接口的請求。這里做下記錄

如圖所示,需要將“掃描二維碼”接口請求的返回值中的data部分,作為“處理提交碼值”接口的參數傳遞給服務器。

首先我想到的是利用正則表達式,直接把整個data部分提取出來,

嗯,沒錯,是不是覺得一步就搞定了,還說個毛線。

但是.............

坑爹的是,服務端在接收data數據的時候,要對data數據做處理

首先,data以數組的形式傳參(有可能一次提交多個碼),

其次,data數組里邊嵌套字典的形式,但是我傳給服務端需要把""轉義。。。(這里真的想吐血,請教下各位大佬,這種情況服務端不能做處理嗎)

結果,要傳遞的值大概就是下面呈現的形式:(懵逼....)

所以,之前把整個data部分取出來的想法pass了。。。

好吧,我另辟蹊徑,想着把每個參數單獨取出來,下個接口在body里邊先把"做成\",先轉義,再把值引用進來(像是摳圖一樣的趕腳...)

說完就干,前面幾個參數取值都OK,沒什么難度,取boxList的時候有點犯難,這個參數前后一般都是","符號,沒有明顯的標志。

查了度娘,找了一種方法來取值:

把整個boxList全部取值(共6個),再用匹配數字去取第幾個值。

這里有個小插曲,開始以為可以用【模板】里邊的$1$這種去匹配表達式里邊的6個取值,后面接口再用boxList_1、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系統學習學習。

如果文中有些錯誤點,希望各位大佬及時指出,定虛心接受~

 


免責聲明!

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



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