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

引言:

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

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

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

1.jdbc请求如下:

jmeter从关联到的数据中随机取值,并拼接。_第1张图片

 

jmeter从关联到的数据中随机取值,并拼接。_第2张图片

得到的结果有8个值。

jmeter从关联到的数据中随机取值,并拼接。_第3张图片

 

 

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

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

jmeter从关联到的数据中随机取值,并拼接。_第4张图片

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

jmeter从关联到的数据中随机取值,并拼接。_第5张图片

 

jmeter从关联到的数据中随机取值,并拼接。_第6张图片

 

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

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

3.在前置处理器的beanshell中写java脚本,获得随机数、拼接字符串等。
jmeter从关联到的数据中随机取值,并拼接。_第7张图片

 

 

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

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

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

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

 

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

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

jmeter从关联到的数据中随机取值,并拼接。_第8张图片

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变量的值。

jmeter从关联到的数据中随机取值,并拼接。_第9张图片

 

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

jmeter从关联到的数据中随机取值,并拼接。_第10张图片

 

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

你可能感兴趣的:(jmeter)