JMeter测试Java请求

背景

阿里的PTS性能测试没有5元白嫖包了,搞得我只能用JMeter通过公网压测,借着周末的时间了解下JMeter采样器HTTP请求,相信这也是大家用的最多的取样器了.

但是,在压测雪花算法IdWorker发号器的时候,如果用HTTP请求是很不科学的,首先IDWorker发号器基于雪花算法,是纯内存计算,TPS非常高,如果用HTTP请求,会由于网络请求等瓶颈,大大降低TPS,测出来的指标也是不准确的.

心想JMeter那么强大一定有测试这种场景的方案,果不其然,JMeter有个采样器叫Java请求,能够直接压测Java方法,下文就介绍我怎么用Java请求采样器压测IdWorker发号器.

编码

根据参考资料,要编写JMeter识别的Java请求就必须继承AbstractJavaSamplerClient或实现JavaSamplerClient,因此测试代码必须依赖ApacheJMeter_javaApacheJMeter_core,下面给出GAV坐标

<dependency>
  <groupId>org.apache.jmeter</groupId>
  <artifactId>ApacheJMeter_java</artifactId>
  <version>5.4.1</version>
</dependency>
复制代码

image.png

在我的例子里继承了AbstractJavaSamplerClient,sampleStart()和sampleEnd()会生成时间戳,差值就是单次测试时间,主要测试逻辑在try部分,生成一个UUID即可.
image.png

接下来就是打包,打包不需要ApacheJMeter_javaApacheJMeter_core(JMeter自身肯定包含了),只需要把你的测试代码和其他依赖打进包就可以了,在本例中没有其他依赖,只需打包测试代码.

image.png

最后将jar包拷贝进JMeter的lib/ext下,就可以了

压测

重新打开JMeter,在Java请求下就看到你添加的测试类了,放手大胆测试吧

image.png

我的压测机器是本地Windows,CPU i5 9400F, memory 16G(其实与内存关系不大,只会对CPU造成压力)
并发800线程,TPS达150W,足够面向绝大场景,出现性能瓶颈绝不在IdWorker发号器上.

image.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享