jmeter从关联到的数据中随机取值,并拼接。

引言:

现在有这样的一种场景:
正则匹配到的结果中,随机取出几个值,并拼接起来,传入下一个请求。
比如飞机票的订票系统,当有5张机票时,随机退两张机票。
这时就需要先找到两个随机值,然后拼接起来,组成一个新的请求参数,传入退票的请求当中。

这里用一个简单的例子来讲,道理都是一样的。

依然是用JDBC请求来讲,因为造数据简单些。

1.jdbc请求如下:

 



得到的结果有8个值。

 

 

2.我们想找到包含"yanglong"字符串的所有结果。

2.1.用后置处理器中的正则来关联。

2..2.用Debug Sampler可以看到关联到的数据。

 

 

这里面出现的descName_1、descName_2...、username_1、username_2...都是参数,可以直接使用的。
可理解为将上述几个变量都放进了线程组变量池,要用的时候直接用vars.get()取值就好。
 

使用java请求,是因为这个请求不会报错,适合有强迫症的童鞋使用,这里使用http请求也是一样的,只不过请求是失败的而已,并不影响。
 

3.在前置处理器的beanshell中写java脚本,获得随机数、拼接字符串等。

 

 

接下来是对部分代码的解释:

log.info("${descName_matchNr}");

打印关联到的数据总数。这个地方即使禁用掉Debug Simpler,也一样存在这个参数的。
加上Debug Simpler,是为了更加直观的显示各个参数。
 

int matchNo = Integer.valueOf("${descName_matchNr}"); //将字符串转换为数字

 

int rand1 = new Random().nextInt(matchNo)%(matchNo) + 1;  //取1 到 matchNo 的随机数

取得随机数,可以参照下图:



s1 = vars.get("descName_"+rand1);  

生成的随机数,就是为了随机取得一个descName参数,比如descName_2、descName_4。
 

用StringBuffer拼接字符串,比string拼接要好。因为每一个字符串都是String类的匿名对象。

比如:

String str = "hello" + "world" +"heihei";
这里就有4个对象了。
就很浪费内存空间。
具体是怎么回事,想要了解的小伙伴们就自行百度吧,网上讲的很详细的。
 

vars.put("newString",combine); 
在线程组中加入newString变量,其值为combine。

 

在java请求中的Label中填入newString变量的值。

 

就会在请求标签那里显示出来。

 

练习资料传送门:
点击打开链接

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值