![f0ae9a00e8e879110b1479ab33c816cb.gif](https://i-blog.csdnimg.cn/blog_migrate/e190c5c2166286937e4e2efa4df1332e.gif)
Jmeter Regular Expression Extractor允许用户使用perl类型的正则表达式从服务器响应中提取值。作为后置处理器,它将在其作用域内的每个Sample request之后执行,具体步骤为:应用正则表达式并提取请求值,生成模板字符串,最后将结果存储到给定的变量名中。
特性参数
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](https://i-blog.csdnimg.cn/blog_migrate/679c9ab0dea363e08e2d5d10a2b13269.png)
DEMO
免费接口:GET, http://qzone-music.qq.com/fcg-bin/cgi_playlist_xml.fcg?uin=${uin}&json=1&g_tk=1916754934 ,其中${uin}为QQ号码。如下图:
![91eb614e5379b146894c572bd5e1a25c.png](https://i-blog.csdnimg.cn/blog_migrate/9829d5836624b4c6c273e69aac85ce70.png)
下面参照官网的说明文档,分别介绍几种不同情况。
1. Match No 设置为非负数,并且发生匹配
正则表达式内容为:xqusic_mid:"(.*?)",xqusic_id:(\d+) ,Template:,Match No:1,Default Value设置为:test,这表示取第一个分组中匹配到的第一个内容,如果没有发生匹配,则将模板的值复制为test。如下图:
![9d857b5952d7cd255a5148b7384f442f.png](https://i-blog.csdnimg.cn/blog_migrate/4c4ac783ab5be4f41d742cd57af5e54b.png)
运行结果为:
![b9151fba14d08ba0edfade224cbaaf5c.png](https://i-blog.csdnimg.cn/blog_migrate/2357b0df94cb2b3162faf32de2252a63.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](https://i-blog.csdnimg.cn/blog_migrate/408a3e680c45adc1e1d9bf59e27dac75.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](https://i-blog.csdnimg.cn/blog_migrate/228b8c8e8f17968947f8bc24b2379a0f.png)
可以看到模板的取值被设置为Default Value,并且删除了以下变量:rethink_g,rethink_gn(n=0,1,2...)
4. 多模板发生匹配
设置Template为$1$|||$2$,Match No为1,运行脚本后结果如下:
![155758e4d6ce53ac01b774dd40dee311.png](https://i-blog.csdnimg.cn/blog_migrate/69bf0b35fe635c4c07f74a7669abe93f.png)
通过以上栗子可以发现,JMeter中的正则表达式提取器还算是比较灵活的,可以自由设置特性参数以满足具体需要。不过要想熟练掌握,还是需要多加练习。
![b61aa5698bd062720d10a23f8326848d.gif](https://i-blog.csdnimg.cn/blog_migrate/ed97ff4465453b5e872a897f16754248.gif)
链接:https://www.jianshu.com/p/cca384c5900f
本文为51Testing经授权转载,转载文章所包含的文字来源于作者。如因内容或版权等问题,请联系51Testing进行删除
推荐阅读点击阅读☞如何提升Jmeter操作?前提是你一定要会BeanShell!
点击阅读☞JMeter测试迭代数据要求多?参数化的几种方式了解一下!
点击阅读☞点名JMeter:来!再走一遍流程!
点击阅读☞JMeter提高工作效率的新方法,我怕你不知道
点击阅读☞JMeter前后置处理器的另类玩法
![52330d36ffb78bf4b4c54e448867cb3f.gif](https://i-blog.csdnimg.cn/blog_migrate/afc36d4d179ba41f3e2bc433893e1aea.gif)