jmeter学习记录--11--jmeter正则表达式


在jmeter里正则表达式用的位置比较多。

一、正则表达式

功能是从请求的响应结果中取到需要的内容,作为下一个接口的入参从而实现关联。正则表达式提取器可配合Debug Sampler来查看各变量取值。

对应session位于信息头,格式类似于 Set-Cookie:JSESSION=1SEDEGGDFJSDKFJASDLKGJAD;

 

引用名称:下一个请求要引用的参数名称,如填写session,则可用${session}引用它。

正则表达式:

    ():括起来的部分就是要提取的。()括号里表示要的数值,(相当于LR左边界,     )相当于LR的右边界
    .:匹配任何字符串。
    +:一次或多次。
    ?:不要太贪婪,在找到第一个匹配项后停止。

模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$$3$等等,表示解析到的第几个值给引用名称。$0$表示随机取值,$1$表示取第1个值,$2$表示取第2个值,$n$表示取第n个值,$1$$2$表示取第1第2共2个值;

匹配数字:-1表示全部取值,0表示随机取值,1表示取值第一个,2表示取值第2个。。。

缺省值:没取到值时,默认用这个。

 

问题1:(.+?) 与(.*?)  区别

(.+?)  匹配一个以上

(.*?)   匹配0个及以上,要取的值是空值的时候可以取到

比如labelId":"";  要取labelId的值,使用(.+?) 匹配不到值,使用(.*?) 就可以取到值为空对应写法为 labelId":"(.*?) ";

如果正则中有转义怎么办?

id?labelId":"1290"   正则写法 id\?labelId":"(.+?)"
labelId\":\"1290\"     正则写法 labelId\\":\\"(.+?)\\"
labelId":(1290),       正则写法 labelId":\((.+?)\),

 

问题2:提取固定位置变量

 

把全部值(-1)取出来,然后取其中第二个值(id_1)

 

问题3:一个表达式匹配多个参数

 调用方法${list_g1} ${list_g2}  

  • 表达式:name="(.+?)" value="(.+?)"
  • 模板:$1$$2$
  • MYREF: file.namereadme.txt
  • MYREF_g0: name="file.name" value="readme.txt"
  • MYREF_g1: file.name
  • MYREF_g2: readme.txt

 

 

 

二、自带录制时

http代理服务器时,选择包含模式、不包含模式。

只包含指定的地址的请求,如只www.test.com 对应  .+(test\.com).+      ,ip:8080/mcp-manage/ 对应  .+(8080/mcp).+

不包含图片,如

 

三、网上看到的一些示例

例1: <input type="hidden" name="hidName" value="(.*)">   // 提取HTML中隐藏域的值

例2:^(.*)$    // 提取整个response返回 

例3:<input value="(.+?)".*\n.*My Label   // 提取My Label关联的input的值

<input value="radio43" type="radio" name="myradio" id="long_nested_path"/> 
<label for="long_nested_path">My Label</label> 

例4:"(.+:create:.+?)"                           // 提取下面link的href的值 
<a href="?wicket:interface=:4:create::ILinkListener:"> 

 

 

测试正则表达式的工具:RegexTester


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM