背景
阿里的PTS性能测试没有5元白嫖包了,搞得我只能用JMeter通过公网压测,借着周末的时间了解下JMeter采样器HTTP请求,相信这也是大家用的最多的取样器了.
但是,在压测雪花算法IdWorker发号器的时候,如果用HTTP请求是很不科学的,首先IDWorker发号器基于雪花算法,是纯内存计算,TPS非常高,如果用HTTP请求,会由于网络请求等瓶颈,大大降低TPS,测出来的指标也是不准确的.
心想JMeter那么强大一定有测试这种场景的方案,果不其然,JMeter有个采样器叫Java请求,能够直接压测Java方法,下文就介绍我怎么用Java请求采样器压测IdWorker发号器.
编码
根据参考资料,要编写JMeter识别的Java请求就必须继承AbstractJavaSamplerClient
或实现JavaSamplerClient
,因此测试代码必须依赖ApacheJMeter_java
和ApacheJMeter_core
,下面给出GAV坐标
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>5.4.1</version>
</dependency>
复制代码
在我的例子里继承了AbstractJavaSamplerClient
,sampleStart()和sampleEnd()会生成时间戳,差值就是单次测试时间,主要测试逻辑在try部分,生成一个UUID即可.
接下来就是打包,打包不需要ApacheJMeter_java
和ApacheJMeter_core
(JMeter自身肯定包含了),只需要把你的测试代码和其他依赖打进包就可以了,在本例中没有其他依赖,只需打包测试代码.
最后将jar包拷贝进JMeter的lib/ext下,就可以了
压测
重新打开JMeter,在Java请求下就看到你添加的测试类了,放手大胆测试吧
我的压测机器是本地Windows,CPU i5 9400F
, memory 16G
(其实与内存关系不大,只会对CPU造成压力)
并发800线程,TPS达150W,足够面向绝大场景,出现性能瓶颈绝不在IdWorker发号器上.