? JMeter-正則表達式提取器常用的使用場景是:從前一個請求的響應(yīng)結(jié)果中,提取到某些需要的內(nèi)容,可以作為下一個接口需要的入?yún)亩鴮崿F(xiàn)關(guān)聯(lián)。例如:用戶的登錄登出。
? 下面是JMeter-正則表達式提取器的界面(添加->后置處理器->正則表達式提取器):
? 參數(shù)解釋:
應(yīng)用范圍
Main sample and sub-sample:匹配范圍包括當(dāng)前父取樣器并覆蓋至子取樣器;
Main sample only:匹配范圍是當(dāng)前父取樣器;
Sub-samples only:僅匹配子取樣器;
Jmeter Variable Name to use:支持對Jmeter變量值進行匹配
要檢查的響應(yīng)字段
主體:響應(yīng)數(shù)據(jù)的主體部分;
Body(unescaped):針對替換了轉(zhuǎn)義碼的Body部分;
Body as a Document:返回內(nèi)容作為一個文檔進行匹配;
信息頭:只匹配信息頭部分的內(nèi)容;
URL:只匹配URL鏈接;
響應(yīng)代碼:匹配響應(yīng)代碼,比如狀態(tài)碼200;
響應(yīng)信息:匹配響應(yīng)信息,比如返回成功;
引用名稱:下一個請求要引用的參數(shù)名稱,如填寫token,則下一個請求接口可用${token}引用它。
正則表達式 :
():括起來的部分就是要提取的內(nèi)容;
.:匹配任意字符串;
+:匹配一次或多次;
?:不要太貪婪,在找到第一個匹配項后停止匹配。
其余具體使用可以參考我另一篇文章正則表達式,學(xué)習(xí)一下
模板:用$$引用起來,如果在正則表達式字段中,文本框?qū)懥硕鄠€正則表達式進行模板匹配,則可以是$2$$3$等等,表示提取到的第幾個值給引用名稱。如:$1$表示匹配到的第1個值賦給引用名稱。
匹配數(shù)字:在匹配的時候往往會出現(xiàn)多個值匹配的情況,不同模板可能會匹配一組值,那么可以使用數(shù)字來確定取這一組值中的哪一個,0代表隨機取值,-1代表全部取值,通常情況下填0。
缺省值:如果正則表達式?jīng)]有匹配到值,則使用此缺省值給引用名稱。
PS:(.+?)? 和? ? ?(.*?)? 的區(qū)別:
(.+?)提取1個字符串及以上,不要太貪婪,在找到第一個匹配項后停止; ? ? ? ??
(.*?)提取0個字符串及以上,要取的值是空值的時候可以取得到。
例如:“test":"",如果要取test的值,使用? (.+?) 匹配不到值。使用? (.*?) 則可以取到test的值為空,寫法是:? “test":"(.*?)"。
下面是關(guān)于正則表達式的舉例說明:
1、提取單個字符串:
假設(shè)我們想要匹配Web頁面的如下部分:name = "file" value = "readme.txt">并要提取readme.txt。一個合適的正則表達式是:name = "file" value = "(.+?)">。我們可以這么寫:
引用名稱:file
正則表達式:name = "file" value = "(.+?)">
模板:$1$
readme.txt在需要引用的地方可以通過:${file}進行使用。
2、提取多個字符串:
假設(shè)我們想要匹配Web頁面的如下部分:name = "file.name" value = "readme.txt">并要提取file.name和readme.txt。一個合適的正則表達式是:name = "(.+?)" value = "(.+?)"。這樣就會創(chuàng)建2個組,分別用于$1$和$2$。我們可以這么寫:
引用名稱:file
正則表達式:name = "(.+?)" value = "(.+?)"
模板:$1$$2$
如下變量的值將會被設(shè)定為:
file : file.namereadme.txt
file_g0 : name = "file.name" value = "readme.txt"
file_g1 : file.name
file_g2 : readme.txt
在需要引用的地方可以通過:${file}, ${file_g0},{file_g1},{file_g2}進行使用。
3、正則表達式中有轉(zhuǎn)義符(例如: \? ?),需要進行轉(zhuǎn)義:
例如:id?test\":"1234" ,我們想要匹配出1234。
一個合適的正則表達式是: id\?test\\":"(.+?)"
4、從消息頭(header)提取session:
5、可以使用換行 “\n”結(jié)尾進行匹配,例如提取Server的值nginx:
6、還有一種不常用的情況是,出現(xiàn)了多處匹配,可以根據(jù)模板先提取第幾處的數(shù)據(jù),再根據(jù)引用名稱_g0、引用名稱_g1、引用名稱_g2等進行匹配:
例如:上圖有3處匹配,我們?nèi)绻胩崛?(第2行第1個),我們可以這么寫:
引用名稱:jvw
正則表達式:javawind:(.*)javawind:(.*)
模板:$2$
如下變量的值將會被設(shè)定為:
jvw_g0 : javawind:3javawind:4
jvw_g1 : 3
jvw_g2 :4
在需要引用的地方可以通過:${jvw_g1}進行使用3。