用jmeter做性能测试时,较多http请求需要用上个接口的返回值作为下个接口的入参,请问1、用beanshell后置处理器与用JDBC取数据库的数据作为参数哪个更耗性能?

用jmeter做性能测试时,较多接口请求需要用上个接口的返回值作为下个接口的入参,请问1、用beanshell后置处理器与用JDBC取数据库的数据作为参数哪个更耗性能?2、此种情况下,接口参数化时取数据库的信息还是用beanshell后置处理器取上个接口的返回值作为参数更好?

回答第一个问题

  • 通过JDBC Request获取数据,jmeter需要与外部数据库资源进行交互,需要消耗网络资源,数据库资源,还有jmeter本身的资源;
  • 通过Beanshell 后置处理器获取数据,如果只是解析接口的返回值(不是自己写代码去请求数据库的资源),常规而言只是消耗jmeter的运算资源,不会涉及其他的交互;
    基于这两点条件,如果去判断 是JDBC Request 与 Beanshell 两个哪个更耗性能,一般来说,只要你的beanshell解析返回值的算法,复杂度别太离谱的高,常规来说 beanshell的解析会比jdbc request 消耗性能少。

回答第二个问题

  • 如果你的测试里面必须通过jdbc request 读取数据库的信息,那就没啥说的,直接用jdbc request最好,也最方便;
  • 如果你需要得到的数据库信息,可以通过某个接口请求得到的返回值获取;这种情况下,建议通过后置 beanshell 来解析得到,没有必要一定做一次数据库的交互请求;
  • 如果非要比较 通过jdbc request 访问数据库 或者 自己在 beanshell 里面写代码访问数据库,哪个性能效率更好,那我的建议是,还是直接用jdbc request, jmeter的代码优化程度还是值得信赖的;
2 个赞

谢谢大佬的解答,用beanshell解析返回值,有个问题是可能上个接口返回为空或者响应超时导致没有正确的返回值,这个时候下jmeter调用下个接口的话就会有问题,这种情况该怎么避免呢?

还是优先考虑beanshell读取返回值比较省资源,因为从程序角度说就是读取内存存的然后解析出来!如果说上个接口返回超时啥的话,这种是无法避免的,只能判断一下如果无返回就从数据库取,这样能减少错误率!但是从程序角度来说,上个接口有问题我们就需要去排查,如果直接用数据库取值就会导致程序即使有错,你也无法排查原因在哪里,或者说有问题也给你跑出了 没问题

这个属于接口功能的问题,开始压测之前要保证接口的功能测试基本完成,接口功能处于正确可用的状态。

另外,可以加上断言校验接口的功能正确性,如果出现功能错误,则JMeter会按照错误进行记录统计。