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

圖截得比較完整,電腦端瀏覽器放大倍數看吧^_^,手機端能夠點擊圖片而後放大看。

一個正則提取問題

前幾天,在Q羣和微信羣裏被同時@,諮詢這樣一個問題:服務器返回:name="tom"  value="jerry" ,要提取出name的值和value的值。
其實,我以爲這個需求是不明確的,究竟是name和value提取出來拼接爲一個字符串呢?仍是分別保存name和value的值?我在羣裏問這位提問的羣友,沒答覆,其實我都想忽略這個問題了,可是以爲這仍是比較重要且基礎的一個知識點,由於在jmeter中,正則表達式提取器是常常用到的,其實也比較簡單,總之我比較喜歡用這個,也沒遇到過提取不到的問題,可是正則卻坑了一個又一個的測試人員,至關於作性能腳本就卡住了,就更別提壓測的執行、監控、分析、定位、調優了(聲明下,我用這個是用來作性能測試腳本)。
既然我說簡單,那就一塊兒跟着個人思路來操做一遍吧,我也當回顧練手了。前提是須要安裝jmeter,參考: http://www.javashuo.com/article/p-ejbzgjag-gu.html

安裝Dummy插件

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

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



模擬響應

添加線程組,在線程組下添加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}。性能

 組合:測試

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

+或*後跟?表示非貪婪匹配,即儘量少的匹配,最小匹配原則。插件

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

正則表達式提取器

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腳本。

相關文章
相關標籤/搜索