jmeter正则表达式备忘

正则表达式使用方法(针对多个匹配结果)

方法1:

图1-1

匹配的结果如图1-1,有多个符合条件的值

图1-2

如果使用匹配数字为-1(即全部匹配),那么调用时就要用${goodsid_1_g1},图1-3

Ps:${goodsid_1_g1}的意思是取goodsid这个集合中第一行第一列的值,如果取第 二行第二列即(goodsid_2_g2)

图1-3

方法2:

图2-1

 

匹配的结果如图1-1,有多个符合条件的值

图2-2

如果使用匹配数字为1(即取第一个匹配的结果),那么调用时就要用${spuid_g1},图2-3

Ps:$spuid_g1}的意思是取goodsid这个集合中第一行第一列的值,因为只匹配了第一个符合条件的结果,所以不存在取多行的情况

图2-3

正则表达式取多个响应的值

响应的两个值没有间隔

  1. jmeter的响应结果如下图:

假设需要取横线中的class、oninput 、placeholder的内容,正则表达式可以如下图

使用的时候 name_g1 代表class的值

name_g2 代表oninput的值

name_g3 代表placeholder的值,详细取值结果下图

 

响应的值有间隔

相应文本如下:要取红线标注的2个变量值,但是中间隔了“positionCode”,解决方法如下

正则表达式如下:

ps:不需要的变量复制过来不要动即可。

输出结果如图(debug sampler)

 

正则表达式取多个响应值,并且有多个匹配结果

这种情况是1+2的组合,又分成2种情况。

没有 变量干扰

响应结果没有差异,如图(有3个响应结果,中间隔的“positionCode”值都一样)

这种情况正则表达式可以这么写:

取值结果,如下:

调用的时候:values_1_g1,values_3_g2, 1~3代表行数,g1~g2代表列数

存在变量干扰

同样是上面的响应结果,假设每个匹配结果的positionCode字段值都不一样,这样正则表达式可以这样写:

就是把positionCode的值也取出来,只不过不调用使用

PS:但是这样写有一个问题,假设响应文本中有很多变量不一致,采用全部取值的方法不确 定是否会影响效率

总结

  1. 当jmeter中正则表达式中有多个符合条件的结果是,可以选择全部匹配,然后用 ${name_row_g1}这种,变量名+行数+g(列数)的方法去需要的值;

  2. 选择匹配第一个,然后用${name_g1}来取第一个符合条件的结果,只能看成是第一种方法的简化;

  3. 另外g1为默认值可以省略,所以两种方法可以简写为:

${name_row_g1} ------>${name_row}

${name_g1} ----------->${name}

  1. 如果有多个值可以用随机取值即(匹配数字为:0)来保证请求的多样性

  2. debug sampler可以显示Thread Group中的所有变量值,可以用来调试

posted @ 2021-11-15 17:54  平行时空的旅者  阅读(144)  评论(0编辑  收藏  举报