記錄一次群答問:jmeter正則提取器輕松提取一個及多個值


圖截得比較完整,電腦端瀏覽器放大倍數看吧^_^,手機端可以點擊圖片然后放大看。

一個正則提取問題

前幾天,在Q群和微信群里被同時@,咨詢這樣一個問題:服務器返回:name="tom"  value="jerry" ,要提取出name的值和value的值。
其實,我覺得這個需求是不明確的,到底是name和value提取出來拼接為一個字符串呢?還是分別保存name和value的值?我在群里問這位提問的群友,沒答復,其實我都想忽略這個問題了,但是覺得這還是比較重要且基礎的一個知識點,因為在jmeter中,正則表達式提取器是經常用到的,其實也比較簡單,總之我比較喜歡用這個,也沒遇到過提取不到的問題,但是正則卻坑了一個又一個的測試人員,相當於做性能腳本就卡住了,就更別提壓測的執行、監控、分析、定位、調優了(聲明下,我用這個是用來做性能測試腳本)。
既然我說簡單,那就一起跟着我的思路來操作一遍吧,我也當回顧練手了。前提是需要安裝jmeter,參考: https://www.cnblogs.com/UncleYong/p/10731334.html

安裝Dummy插件

這個插件可以模擬服務器返回,相當於一個mockserver了。
首先安裝Dummy,選項--插件管理--可選插件--Dummy。

勾選后,點擊右下方開始安裝,安裝完成后會自動重啟jmeter。



模擬響應

添加線程組,在線程組下添加Dummy取樣器(在Dummy取樣器的響應數據中填入模擬返回數據)、查看結果樹監聽器,在Dummy下添加正則表達式提取器、調試后置處理程序(用於查看提取結果的)。

正則基礎

參考:https://baike.baidu.com/item/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%B9%8B%E9%81%93 

. 匹配除“\r\n”之外的任何單個字符。要匹配包括“\r\n”在內的任何字符,請使用像“[\s\S]”的模式。

* 匹配前面的子表達式(也可以是一個字符)任意次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。*等價於o{0,}

+ 匹配前面的子表達式一次或多次(大於等於1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等價於{1,}。

? 匹配前面的子表達式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等價於{0,1}。

 組合:

.*具有貪婪的性質,匹配到不能匹配為止,最大匹配原則。

+或*后跟?表示非貪婪匹配,即盡可能少的匹配,最小匹配原則。

.*? 表示在能匹配成功的前提下盡可能少的匹配,最小匹配原則。

正則表達式提取器

Apply to:一般保持默認選擇Main sample only,這個用得最多,如果有sub-samples,可以選擇第一個選項

要檢查的響應字段:用得最多的是主體,即header+body,可以從響應頭,也可以從響應體提取

引用名稱:變量名,獲取到的值存儲到這個變量中

正則表達式:根據實際情況填寫

模板:$1$,表示第一個正則表達式,如果有2個正則表達式,寫為$1$$2$

匹配數字(0代表隨機):一般填1,表示第一個,0表示隨機,-1表示全部(此時提取結果是一個數組,如果引用名稱是user,也可以通過${user_1}的方式來取第1個匹配的內容)

缺省值:沒匹配到就用缺省值,我們可以設置一個,比如aaaaaa

name和value提取為一個字符串

運行結果

也可以用其它字符拼接,比如-,即如果模板寫為:$1$-$2$,結果就是:nameandvalue=tom-jerry

name和value分別保存

name

value

運行結果

 

 

ok,就是這么簡單,你覺得呢?歡迎交流。加群獲取jxm腳本。


免責聲明!

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



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