更新時間:2021-06-28 12:31:03 來源:動力節點 瀏覽1039次
1.概覽
JMeter中包含范本匹配軟件Apache Jakarta ORO 。在Jakarta網站上有一些關于它的文檔,例如a summary of the pattern matching characters :
http://jakarta.apache.org/oro/api/org/apache/oro/text/regex/package-summary.html。
另外,還有關于該軟件老版本的文檔OROMatcher User's guide ,也許會有一些幫助。URL地址:http://www.savarese.org/oro/docs/OROMatcher/index.html。
JMeter的范本匹配與Perl語言的范本匹配類似。一個安裝完整的Perl會包含很多關于正則表達式的文檔(搜尋perlrequick、perlretut、perlre、perlreref)。
我們有必要分清楚包含(Contains)和匹配(Matches)的差異,它們用于響應斷言測試元件:
包含(Contains)意味著正則表達式至少部分匹配目標,例如,'alphabet' 包含 'ph.b.',因為正則表達式匹配其子字符串'phabe'。
匹配(Matches)意味著正則表達式完全匹配目標。例如,'alphabet'匹配'al.*t'。
在這一情況下,它等同于使用^ 和$封裝正則表達式,即'^al.*t$'。但是事情并不總是這樣。例如,正則表達式'alp|.lp.*'包含于'alphabet',但并不匹配'alphabet'。
原因在于當范本匹配器在'alphabet'中找到序列'alp'后,就會停止嘗試其他組合,而且'alp'不同于'alphabet',它不包含'habet'。
不同于Perl,沒必要將正則表達式用//封裝。
2.實例
(1)提取單個字符串
假設測試人員期望匹配Web頁面的如下部分:name="file" value="readme.txt">并提取readme.txt。
一個符合要求的正則表達式:
name="file" value="(.+?)"> 。
上面用到的特殊字符包括如下幾個。
( 和 ):封裝了待返回的匹配字符串。
.:匹配任何字符。
+:一次或多次。
?:不要太貪婪,在找到第一個匹配項后停止。
如果沒有?,在找到第一個">后,會繼續尋找,直到最后一個">,這么做很可能不是測試人員期望的。
盡管上面的表達式可以達到目的,但是使用如下表達式更有效率:name="file" value="([^"]+)">,其中[^"]-意味著匹配任何東西(除了")。在這種情況下,匹配引擎在找到第一個右側"后,就會停止搜索。而 上面例子中的匹配引擎會去尋找">。
(2)提取多個字符串
假設測試人員期望匹配Web頁面的如下部分:name="file" value="readme.txt">,并提取file.name和readme.txt。
一個符合要求的正則表達式:
name="([^"]+)" value="([^"]+)"
這會創建兩個組合,并可用于JMeter正則表達式模板,形如$1$ 和$2$。
JMeter正則表達式提取器會將組合的值放在指定變量中。
例如,
引用名稱:MYREF。
正則表達式:name="(.+?)" value="(.+?)"。
模板:$1$$2$。
不要用/ /封裝正則表達式。
如下變量的值將會被設定。
MYREF: file.namereadme.txt。
MYREF_g0: name="file.name" value="readme.txt"。
MYREF_g1: file.name。
MYREF_g2: readme.txt。
這些變量后續可以在JMeter測試計劃中引用,形如${MYREF}、${MYREF_g1}等。
3.關鍵字
正則表達式使用特定字符作為關鍵字,這些字符對正則表達式引擎有特殊意義。在字符串中使用這些字符必須進行轉義(使用反斜杠"\"),目的是將它們當成原始字符,而非正則表達式的關鍵字。下面是關鍵字和它們的含義。
( ):組合。
[ ]:字符集合。
{ }:重復。
+ ?:重復。
.:任意匹配字符。
\:轉義字符。
| -:選擇符。
^ $:字符串或行的起始和結尾。
注意,ORO不支持\Q和\E關鍵字。
4.修改器(Modifier)
理論上修改器可以被放置在正則表達式的任何地方,并被放置的位置開始向后生效。(ORO存在一個BUG,修改器不能放在正則表達式的末尾。盡管修改器在這里不生效)。
單行(?s)和多行(?m)修改器通常都被放在正則表達式的開頭。
忽略(?i)修改器可以被用來僅僅影響正則表達式的某一部分,例如:
Match ExAct case or (?i)ArBiTrARY(?-i) case
由于單行和多行修改器的設置不同,范本匹配的表現也略有不同。請注意,單行和多行操作符之間沒有任何關聯;它們可以被單獨指定。
(1)單行模式
單行模式只影響關鍵字符"."。默認情況下,"."可以匹配任何字符(除了換行)。在單行模式下,"."還匹配換行。
(2)多行模式
多行模式只影響關鍵字符"^"和"$"。默認情況下,"^"和"$"僅僅匹配字符串的開始和結尾。而在多行模式下,"^"和"$"匹配每一行的開始和結尾。
在動力節點官網上有更多Java相關視頻教程可以免費下載,在技術文檔頁面也有JMeter教程文檔可以學習。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習