引言:
现在有这样的一种场景:
正则匹配到的结果中,随机取出几个值,并拼接起来,传入下一个请求。
比如飞机票的订票系统,当有5张机票时,随机退两张机票。
这时就需要先找到两个随机值,然后拼接起来,组成一个新的请求参数,传入退票的请求当中。
这里用一个简单的例子来讲,道理都是一样的。
依然是用JDBC请求来讲,因为造数据简单些。
1.jdbc请求如下:
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变量的值。
就会在请求标签那里显示出来。
练习资料传送门:
点击打开链接