? JMeter-正則表達(dá)式提取器常用的使用場(chǎng)景是:從前一個(gè)請(qǐng)求的響應(yīng)結(jié)果中墨闲,提取到某些需要的內(nèi)容,可以作為下一個(gè)接口需要的入?yún)亩鴮?shí)現(xiàn)關(guān)聯(lián)。例如:用戶的登錄登出。
? 下面是JMeter-正則表達(dá)式提取器的界面(添加->后置處理器->正則表達(dá)式提取器):
? 參數(shù)解釋:
應(yīng)用范圍
Main sample and sub-sample:匹配范圍包括當(dāng)前父取樣器并覆蓋至子取樣器;
Main sample only:匹配范圍是當(dāng)前父取樣器米碰;
Sub-samples only:僅匹配子取樣器见间;
Jmeter Variable Name to use:支持對(duì)Jmeter變量值進(jìn)行匹配
要檢查的響應(yīng)字段
主體:響應(yīng)數(shù)據(jù)的主體部分米诉;
Body(unescaped):針對(duì)替換了轉(zhuǎn)義碼的Body部分篷帅;
Body as a Document:返回內(nèi)容作為一個(gè)文檔進(jìn)行匹配魏身;
信息頭:只匹配信息頭部分的內(nèi)容箭昵;
URL:只匹配URL鏈接家制;
響應(yīng)代碼:匹配響應(yīng)代碼,比如狀態(tài)碼200觅廓;
響應(yīng)信息:匹配響應(yīng)信息涵但,比如返回成功矮瘟;
引用名稱:下一個(gè)請(qǐng)求要引用的參數(shù)名稱,如填寫token篡殷,則下一個(gè)請(qǐng)求接口可用${token}引用它埋涧。
正則表達(dá)式 :
():括起來的部分就是要提取的內(nèi)容;
.:匹配任意字符串劲弦;
+:匹配一次或多次醇坝;
?:不要太貪婪,在找到第一個(gè)匹配項(xiàng)后停止匹配砸琅。
其余具體使用可以參考我另一篇文章正則表達(dá)式症脂,學(xué)習(xí)一下
模板:用$$引用起來诱篷,如果在正則表達(dá)式字段中棕所,文本框?qū)懥硕鄠€(gè)正則表達(dá)式進(jìn)行模板匹配琳省,則可以是$2$$3$等等躲撰,表示提取到的第幾個(gè)值給引用名稱茴肥。如:$1$表示匹配到的第1個(gè)值賦給引用名稱坚踩。
匹配數(shù)字:在匹配的時(shí)候往往會(huì)出現(xiàn)多個(gè)值匹配的情況,不同模板可能會(huì)匹配一組值瓤狐,那么可以使用數(shù)字來確定取這一組值中的哪一個(gè),0代表隨機(jī)取值础锐,-1代表全部取值,通常情況下填0皆警。
缺省值:如果正則表達(dá)式?jīng)]有匹配到值拦宣,則使用此缺省值給引用名稱信姓。
PS:(.+?)? 和? ? ?(.*?)? 的區(qū)別:
(.+?)提取1個(gè)字符串及以上鸵隧,不要太貪婪,在找到第一個(gè)匹配項(xiàng)后停止意推; ? ? ? ??
(.*?)提取0個(gè)字符串及以上,要取的值是空值的時(shí)候可以取得到菊值。
例如:“test":"",如果要取test的值昵宇,使用? (.+?) 匹配不到值砸喻。使用? (.*?) 則可以取到test的值為空杭煎,寫法是:? “test":"(.*?)"卒落。
下面是關(guān)于正則表達(dá)式的舉例說明:
1儡毕、提取單個(gè)字符串:
假設(shè)我們想要匹配Web頁面的如下部分:name = "file" value = "readme.txt">并要提取readme.txt也切。一個(gè)合適的正則表達(dá)式是:name = "file" value = "(.+?)">。我們可以這么寫:
引用名稱:file
正則表達(dá)式:name = "file" value = "(.+?)">
模板:$1$
readme.txt在需要引用的地方可以通過:${file}進(jìn)行使用腰湾。
2雷恃、提取多個(gè)字符串:
假設(shè)我們想要匹配Web頁面的如下部分:name = "file.name" value = "readme.txt">并要提取file.name和readme.txt。一個(gè)合適的正則表達(dá)式是:name = "(.+?)" value = "(.+?)"费坊。這樣就會(huì)創(chuàng)建2個(gè)組倒槐,分別用于$1$和$2$。我們可以這么寫:
引用名稱:file
正則表達(dá)式:name = "(.+?)" value = "(.+?)"
模板:$1$$2$
如下變量的值將會(huì)被設(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}進(jìn)行使用附井。
3讨越、正則表達(dá)式中有轉(zhuǎn)義符(例如: \? ?),需要進(jìn)行轉(zhuǎn)義:
例如:id?test\":"1234" 永毅,我們想要匹配出1234把跨。
一個(gè)合適的正則表達(dá)式是: id\?test\\":"(.+?)"
4、從消息頭(header)提取session:
5沼死、可以使用換行 “\n”結(jié)尾進(jìn)行匹配着逐,例如提取Server的值nginx:
6、還有一種不常用的情況是意蛀,出現(xiàn)了多處匹配耸别,可以根據(jù)模板先提取第幾處的數(shù)據(jù),再根據(jù)引用名稱_g0县钥、引用名稱_g1秀姐、引用名稱_g2等進(jìn)行匹配:
例如:上圖有3處匹配,我們?nèi)绻胩崛?(第2行第1個(gè))魁蒜,我們可以這么寫:
引用名稱:jvw
正則表達(dá)式:javawind:(.*)javawind:(.*)
模板:$2$
如下變量的值將會(huì)被設(shè)定為:
jvw_g0 : javawind:3javawind:4
jvw_g1 : 3
jvw_g2 :4
在需要引用的地方可以通過:${jvw_g1}進(jìn)行使用3囊扳。
第6點(diǎn)理解:參考博客Jmeter中正則表達(dá)式提取器使用詳解