JMeter案例优化:不使用BeanShell,如何控制内置函数生成uuid在一次迭代中仅生成一次

目录

前言

前情回顾

不使用BeanShell,还能用什么呢?

1、User Parameters

2、User Defined Variables

小结

遗留问题


前言

BeanShell作为JMeter的强大扩展,可以帮助我们实现很多JMeter内置组件无法完成的工作。但是,我接触性能测试仅仅一年的时间,在项目中似乎很少有不使用BeanShell的。尤其最近一次因使用BeanShell导致JMeter OOM,而使测试中断后,我开始反思,是否必须要使用BeanShell才能完成呢?或许正是因为我对JMeter的了解不够,而之前又有多年的编码经验,才使我更加习惯于直接编码来解决问题,反而忽略了对JMeter工具本身的探索。

而且,JMeter官网也一再提醒:使用BeanShell会有性能问题。

所以,我开始思考之前做过的案例中,哪些BeanShell是否有可能被替代。还真让我找到了:

JMeter案例分享:使用JMeter内置函数生成uuid,如何控制一次迭代中仅生成一次?

前情回顾

同一个线程组中有两个请求,需要同一个uuid,但是,不同迭代中,需要不同的uuid。之前的思路是:使用BeanShell生成一个uuid,保存在一个自定义变量pic_uuid中:

vars.put("pic_uuid","${__UUID}");

然后,两个请求分别引用该自定义变量${pic_uuid},而非各自调用内置函数${__UUID},以免每次调用都生成一个随机值,导致两个请求中的uuid不一致而出错。

不使用BeanShell,还能用什么呢?

其实,解决问题的核心在于:只能调用一次内置函数${__UUID},所以,需要把调用的结果存在一个自定义变量中,后续需要的时候使用这个自定义的变量。

那么,JMeter中如何自定义一个变量呢?对了,User Parameters和User Defined Variables,下面,我们分别试一下。

1、User Parameters

如图,添加User Parameters,添加变量pic_uuid,并设置其值为${__UUID}:

替换掉原来的BeanShell:

执行一次,两个请求的uuid相同,看起来没问题:

2个用户并发,迭代2次:共执行4次,4组请求都满足:

  • 每组请求中的uuid是一致的
  • 不同组之间的uuid是不同的

综上,使用User Parameters可满足需求。

2、User Defined Variables

如图,添加User Defined Variables,添加变量pic_uuid,并设置其值为${__UUID}:

替换掉原来的BeanShell:

执行一次,两个请求的uuid相同,看起来没问题。

2个用户并发执行一次:

问题来了,四个请求的uuid全都一样。。显然,这不符合需求。不可以。

但是,我们也意外地发现了,User Defined Variables中所定义的变量,其实,是一个常量。

小结

综上可知,想要使${__UUID}在每次迭代中仅运行一次,可以使用BeanShell和User Parameters。 这两种方法哪一种更好?我并没有实际经验,但是官网中提示了BeanShell的性能问题,却未提示User Parameters有性能问题,所以,大概后者更好一点吧。而且,从对于新手的友好程度上来讲,似乎也是后者更好一些吧。

想要使${__UUID}在整个测试计划执行过程中仅运行一次,可以使用User Defined Variables。

遗留问题

至于User Defined Variables和User Parameters为什么会产生这种差异,等我学会了再来分享吧。

  • 37
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值