美文网首页
Jmeter—正则表达式提取器

Jmeter—正则表达式提取器

作者: yywfy的昵称 | 来源:发表于2020-12-16 13:04 被阅读0次

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

    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,)"}

    也可以得到相同的效果!

    相关文章

      网友评论

          本文标题:Jmeter—正则表达式提取器

          本文链接:https://www.haomeiwen.com/subject/wbtggktx.html