jmeter 正则表达式


理论:

Jmeter的正则表达式:

对于一个页面来说:

主体:<script...(通过firebug可以查看到主体)

信息头:HTTP/1.1(之类的)。

URL:它最后一个重定向的url,从httpheaders里面可以看到,就是它最后一个跳转为200OK的那个url的值。

响应代码:200OK (或者是:302之类的。从Jmeter运行结果的察看结果树的取样器结果Response code信息里获得)。

响应信息:OK(从Jmeter运行结果的察看结果树的取林器结果的Response message信息里获得)

正则表达式参数:

实践:

对应的源代码:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJMjQzOTQ3MzY2D2QWAmYPZBYCAgMPZBYGAgMPZBYCAgEPDxYCHgRUZXh0BQc4NjIwLjY4Z" />

这里正则表达式前面用的是id=,jmeter中的正则表达式如果 是这种形式的:

type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJMjQzOTQ3MzY2D2QWAmYPZBYCAg"

那么我们要用离你要找的值最近的那个字段,如这里用的是id,而不是name,用name的话会出错。

另外从Url中取值:

这里的正则表达式要用括号括起来,把你要用的正则表达式写在括号里就行了

对于要取:href="ItemDetails.html?itemId=172485040"里面的itemId的值,这里的正则表达式可以为:

引用名称:itemId

正则表达式:href="ItemDetails.html\?itemId=(\d*)"

模板:$1$

匹配数字:1

其实这里引用正则表达式,它是从第一个()内开始匹配,以()为限jmeter知道里面的是正则表达式,则有多少个括号就有多少个正则表达式,如果有两个的话,模板可以用$2$,从而取第二个正则表达式的职,如果正则表达式里面包含(),但是它并不是正则表达式的内容的话,这里的()要写成:(),这样才不会被jmeter认为是正则表达式,而是知道里面有()括起来的内容。

补充:

正则表达式之:()

(1). 在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰
(2). 取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到

也有取符合要求的字符的含义,如(\w):其中\w是匹配单个字符,那这样的话,如果db这样的字符串它是匹配不到的,但是加上括号()后它就可以匹配到其 中的字符了,这里括号的涵义是提取出只要有满足要求的:如db中d和b都单独满足\w的要求,但是合到一起就不满足了,这里用了()后就可以匹配到单独的 d和b了

加入“后置处理器”->“正则表达式提取器”:

引用名称即使用的参数名;填入正则表达式;模板选取匹配的组(模板:此处填写$1$,如果有两个表达式,则可以设置为$1$,$2$);匹配数字为匹配的个数,负数表示全部匹配;缺省值为没有匹配到时的取值。

示例中用正则表达式匹配出产品id作为后续使用的参数。 提 取到的参数,调用时用${product_id_1},${product_id_2}${product_id_3}……;如果想要得到匹配出的参数 的个数,用${product_id_matchNr};如果想随机选取其中一个,只需将匹配数字设为0,使用${product_id}调用即可。

可 以一次匹配多组;示例中只匹配了一个,假如正则表达式为name="chkProductIds" id="chk(.+?)" value="(.+?)",就会有两组参数;想获得匹配到的组个数用${product_id_g};模板针对的是匹配到的字符串再做组的区分,比如希 望${product_id}取出的是第二组参

Joyce /
Published under (CC) BY-NC-SA in categories jmeter  tagged with jmeter  regex