Jmeter—正则表达式提取器

2020-12-16  本文已影响0人  yywfy的昵称

重定向时会产生主请求和子请求,主请求和最后一个子请求的值是一样的。

Jmeter Variable Name to use,有时候有些变量需要使用多次正则提取才能获取,下面举例说明:

新创建一个test plan,添加一个线程组,在线程组下面添加一个Java request:

java request

将下面的Json数据添加到java request的ResultData中:

{"name":"yangyang",

"data":

{"student":[ {

    "name":"明",

    "sex":"男",

    "email":"zhangguoli@123.com",

    "url":"./img/1.jpg"

  },

  {

    "name":"铁林",

    "sex":"男",

    "email":"zhangtieli@123.com",

    "url":"./img/2.jpg"

  }],

"teacher":[{

    "name":"邓",

    "sex":"女",

    "email":"zhenjie@123.com",

    "url":"./img/3.jpg"

  },

  {

    "name":"默",

    "sex":"男",

    "email":"zhangguoli@123.com",

    "url":"./img/4.jpg"

  }]

}}

request data

在线程组下面添加Debug Sampler和View Results Tree:

bedug sampler

运行request,可以在View Result Tree中看到返回的json字符串:

在Java request下面添加2个正则表达式提取器,来提取student的名字列表:

regular Expression Extractor

第一个regular expression extractor用于提取student的所有信息的字符串:

获取student所有信息的字符串

可以在View Results Tree中调试正则表达式,看是否能匹配到想要的字符串:

第二个regular expression extractor用于提取student名字,这里要用到第一个正则提取器的结果变量student_info_list:

再次运行request,在debug sampler中能看到提取的学生名字:

正则提取器的结果是这3个参数共同决定的:正则去找,模版去拼接,匹配数字去指定要哪些数据。

当需要从返回值中一次提取多个参数时,可以参看下列例子:

添加线程组,2个java request,第一个request下添加regular expression extractor,Debug sampler, View Results tree。

第一个Java request中添加ResultData:a1b甲c a2b乙c a3b丙c a4b丁c。regular expression extractor中的正则表达式为a(.*?)b(.*?)c,template为$1$,Match NO为默认值0,会随机从匹配结果中挑选一个值赋值给变量:

运行request,可以在debug sampler中看到匹配的结果,

param=3     //匹配结果 $1$

param_g=2    //匹配参数的个数

param_g0=a3b丙c        //符合正则的字符串

param_g1=3         //第一个匹配结果$1$,也就是第一个小号中的值

param_g2=丙        //第二个匹配结果$2$,也就是第二个小号中的值

修改第二个java request的Name为:

Java Request {"name":"${param_g2}", "value":"${param_g1}"}

多次运行request,可在View Results Tree中看到第二个java request

的name是用前一个java request中提取的变量随机组成的:

也可在正则提取器中先使用{"name":"$1$", "value":"$2$}"}拼接好后面需要的参数,第二个request直接写成Java Request ${param}使用这个参数即可。


当匹配次数填写-1时,会返回一个list,可以添加foreach来遍历返回结果中的所有值:

如果查看debug sampler,可以看到返回的数组:

还可以使用计数器来获取变量,在foreach下面添加计数器元件:

这样我们想获取的变量就可以写成{"name":"${param_${index}_g1}", "value":"${param_${index}_g2}"},但是${param_${index}_g1}是变量名中含有变量名,需要用到函数生成器V:

将函数表达式替换到第二个request的Nmae字段:

Java Request {"name":"${__V(param_${index}_g2,)}", "value":"${__V(param_${index}_g1,)"}

也可以得到相同的效果!

上一篇下一篇

猜你喜欢

热点阅读