正则表达式使用方法(针对多个匹配结果)
方法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
正则表达式取多个响应的值
响应的两个值没有间隔
-
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:但是这样写有一个问题,假设响应文本中有很多变量不一致,采用全部取值的方法不确 定是否会影响效率
总结
-
当jmeter中正则表达式中有多个符合条件的结果是,可以选择全部匹配,然后用 ${name_row_g1}这种,变量名+行数+g(列数)的方法去需要的值;
-
选择匹配第一个,然后用${name_g1}来取第一个符合条件的结果,只能看成是第一种方法的简化;
-
另外g1为默认值可以省略,所以两种方法可以简写为:
${name_row_g1} ------>${name_row}
${name_g1} ----------->${name}
-
如果有多个值可以用随机取值即(匹配数字为:0)来保证请求的多样性
-
debug sampler可以显示Thread Group中的所有变量值,可以用来调试