6.1、Jmeter 正则表达式--案例详解(一)

Jmeter自带后置处理器:正则表达式,可用于提取接口响应数据信息,当作后续接口参数用。

例如:提取响应结果中的seedTxnId字段,响应内容如下图:

 

 "seedTxnId":"143cbac705f74a8cb9bee6aee69c56cc","totalExperience":40,提取器如下设置:

 

 

 正则表达式提取器说明:

Apply to:应用范围(一般就选择默认的Main sample only),就算有重定向,一般也是提取最终那个请求的接口。
要检查的响应字段:样本数据源。
主体: 接口响应主体内容,一般要提取普通http响应结果的数据,都勾选这个。
信息头:响应头的所有内容。
Request Headers:请求头的所有内容。
  url:是对sample的url进行匹配,也就是查看结果树里请求内容的第一行url,不包含data里的请求参数(即只能匹配protocol(协议)+host+path+querystring,如:https://www.baidu.com/index.php?tn=monline_3_dg)。
  响应代码:http响应代码,如101,200,302,404,501等。
  响应信息:http响应代码对应的响应信息,例如:OK, Found(HTTP/1.1 200 Ok;HTTP/1.1 302 Found)。
引用名称:其他地方引用时的变量名称,名称只能是一个,引用方法:${seedTxnId}。如图:

 

 正则表达式:数据提取器,一般简单的通用语法就是:左边界(.*?)右边界,左右边界就是为了能准确定位到想匹配的内容,如最上面图的"seedTxnId":"(.*?)","totalExperience", 其中"seedTxnId":"以及","userName"这2个就是左右边界,(.*?) 是替换了想要提取的内容,里面的'?'为非贪婪匹配,(非贪婪模式就是说在遇到第一个右边界后就停止匹配,这样就可以精确拿到想要的内容)。建议均使用非贪婪匹配,除非特殊情况。

模板:对应正则表达式提取器类型,样式为:$n$。若模板为:$0$,则为整个表达式匹配到的内容,就是包括小括号内跟小括号外的内容,即("seedTxnId":"143cbac705f74a8cb9bee6aee69c56cc","totalExperience":40,"seedId":"d61d5a2af9ca419e93d07606a8a01cfa","tierNum")。若模板为:$1$,则对应正则表达式中的第一个(.*?)所匹配的内容,即(143cbac705f74a8cb9bee6aee69c56cc) ,同理,如果要取字段seedTxnId与seedId值,则模板为:$1$$3$,相当于把2个(.*?)所匹配的内容拼接起来。
 
匹配数字:正则表达式匹配数据的最终结果可以看做一个数组,匹配数字即可看做是数组的第几个元素。当为 0 时,随机返回匹配的数据。当为 1 时,表示返回匹配结果数组的第一个元素。当为负数(-1,-2,-100都可以)时,表示返回全部元素,并且同时会返回一个元素总数的变量seedTxnId_matchNr,在引用时:通过${seedTxnId_1}的方式来取第1个匹配的内容,${seedTxnId_2}来取第2个匹配的内容。
缺省值:匹配失败时的默认值。通常用于后续的逻辑判断,建议使用一些特殊含义的,比如0,NULL,ERROR等。
正则测试:
可以直接在“察看结果树”里选择“Regexp”正则测试模式来测试正则是否写的正确。见下图:

 

 


 

 正则结果校对:

如果查看提取到的内容是想要的内容,可使用后置处理器:Debug PostProcessor

该元件就为调试所用,一般用于查看变量值,添加如下:

 

 查看结果如下:

 

 

 

 

posted @ 2020-07-29 14:00  今天也不迟  阅读(249)  评论(0)    收藏  举报