正则取第一个匹配到的值_Jmeter之正则表达式提取器

f0ae9a00e8e879110b1479ab33c816cb.gif

Jmeter Regular Expression Extractor允许用户使用perl类型的正则表达式从服务器响应中提取值。作为后置处理器,它将在其作用域内的每个Sample request之后执行,具体步骤为:应用正则表达式并提取请求值,生成模板字符串,最后将结果存储到给定的变量名中。

4e5e8fe7-7456-eb11-8da9-e4434bdf6706.svg

特性参数

4f5e8fe7-7456-eb11-8da9-e4434bdf6706.svg

Apply to(应用范围)

Main sample only (默认):匹配范围是当前父采样器;

Sub-samples only :仅匹配子采样器;

Main sample and sub-samples :匹配范围包括当前父采样器并覆盖子采样器;

JMeter Variable Name to use:Extraction is to be applied to the contents of the named variable

Field to check(要检查的相应字段)

针对Response不用内容进行匹配,可选项有七个,分的比较细,也比较好容易理解。

Name of create variable

设置变量名,调用时使用${name}即可。

Regular Expression

设置用于解析响应数据的正则表达式,用圆括号表示要提取的字符串,此处圆括号的作用类似于LoadRunner中的左右边界。

Template

模板用于从正则表达式的匹配结果中创建字符串。正则表达式可以设置多个模板,此处可以指定引用哪个模板。语法为:$0$表示整个表达式匹配的内容,$1$表示组1,$2$表示组2,以此类推。如果只有一个正则表达式时,写$1$即可。

Match No

指定要使用的匹配项。正则表达式可以匹配多次,使用0值表示JMeter应该随机选择匹配的值;正整数N表示选择第N个匹配项;负数表示选择全部匹配到的内容,一般与ForEach控制器结合使用。

Default Value

如果正则表达式不匹配,则将引用变量设置为默认值。可以勾选Use empty default value 将默认值设置为空。

0fd9a89633435954bc0563293ec5235f.png 4e5e8fe7-7456-eb11-8da9-e4434bdf6706.svg

DEMO

4f5e8fe7-7456-eb11-8da9-e4434bdf6706.svg

免费接口:GET, http://qzone-music.qq.com/fcg-bin/cgi_playlist_xml.fcg?uin=${uin}&json=1&g_tk=1916754934 ,其中${uin}为QQ号码。如下图:

91eb614e5379b146894c572bd5e1a25c.png

下面参照官网的说明文档,分别介绍几种不同情况。

1. Match No 设置为非负数,并且发生匹配

正则表达式内容为:xqusic_mid:"(.*?)",xqusic_id:(\d+) ,Template:,Match No:1,Default Value设置为:test,这表示取第一个分组中匹配到的第一个内容,如果没有发生匹配,则将模板的值复制为test。如下图:

9d857b5952d7cd255a5148b7384f442f.png


运行结果为:

b9151fba14d08ba0edfade224cbaaf5c.png

下面来分析一下运行结果中给出的变量,如下:

# 模板的值,即分组1的第一个数据;rethink=002iYN6V0lHUjb# 正则表达式中的分组数,可以看到正则表达式中一共给出了两个要匹配的项;rethink_g=2# 分组的匹配内容rethink_g0=xqusic_mid:"002iYN6V0lHUjb",xqusic_id:3018351066rethink_g1=002iYN6V0lHUjbrethink_g2=3018351066

2. Match No 设置为负数,并且发生匹配

将Match No设置为-1,表示取第一个分组全部匹配到的内容。其他参数保持不变,运行脚本后的结果为:

994739f28bf711223d77f1f2c0af351a.png
# 模板设置的默认值rethink=test# rethink_n(1,2,3...) 当前匹配到的模板的值rethink_1=002iYN6V0lHUjbrethink_1_g=2# 分组的匹配内容rethink_1_g0=xqusic_mid:"002iYN6V0lHUjb",xqusic_id:3018351066rethink_1_g1=002iYN6V0lHUjbrethink_1_g2=3018351066rethink_2=0011OcRB3SIlGBrethink_2_g=2rethink_2_g0=xqusic_mid:"0011OcRB3SIlGB",xqusic_id:2177446616rethink_2_g1=0011OcRB3SIlGBrethink_2_g2=2177446616# 内容匹配数,可能为0rethink_matchNr=2

3. 没有发生匹配

将正则表达式修改为:\sxqusic_mid:"(.*?)",xqusic_id:(\d+),Default Value设置为:test ,然后运行脚本,结果为:

97a9ba5fe85b873671788a4a418a848a.png

可以看到模板的取值被设置为Default Value,并且删除了以下变量:rethink_g,rethink_gn(n=0,1,2...)

4. 多模板发生匹配

设置Template为$1$|||$2$,Match No为1,运行脚本后结果如下:

155758e4d6ce53ac01b774dd40dee311.png


通过以上栗子可以发现,JMeter中的正则表达式提取器还算是比较灵活的,可以自由设置特性参数以满足具体需要。不过要想熟练掌握,还是需要多加练习。

b61aa5698bd062720d10a23f8326848d.gif

22744478745f51c2def685392898d849.png

链接:https://www.jianshu.com/p/cca384c5900f

本文为51Testing经授权转载,转载文章所包含的文字来源于作者。如因内容或版权等问题,请联系51Testing进行删除

推荐阅读

点击阅读☞如何提升Jmeter操作?前提是你一定要会BeanShell!

点击阅读☞JMeter测试迭代数据要求多?参数化的几种方式了解一下!

点击阅读☞点名JMeter:来!再走一遍流程!

点击阅读☞JMeter提高工作效率的新方法,我怕你不知道

点击阅读☞JMeter前后置处理器的另类玩法

52330d36ffb78bf4b4c54e448867cb3f.gif

7d2bf4b9678549afd86df3ddfdb999a9.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值