Baolu CSV Data Set Config
1.背景
大家在平常使用JMeter测试工具时,对CSV Data Set Config 配置元件肯定不会陌生。如果我们的压测场景涉及到数据库更新操作(如:转账接接口)则需要对参数化数据进行分块,可就犯难了。如果不进行数据分块那么数据库会出现大量锁等待,造成我们测试结果可信度大大降低。今天宝路就聊下JMeter如何优雅的做到数据分块。
2.初衷
前面说到数据分块,大家可能会优先想到传统商业压测工具LoadRunner,因为LR是比较完美的支持数据分块的。
看了今天的文章的主题,相信大家心中应该就有答案了。其实早在宝路刚转这个行不久时就已经开发了这个功能,只不过当时是在官方源码的基础改动,每当升级JMeter版后,还要把这些新增代码移植到新版上,甚是麻烦。。。。。。关于实现逻辑大家可以参考下我早期写的 CSV Data Set Config 拓展开发 这篇文章。
最近宝路把这个功能做成了插件,代码也进行了重构优化,插件下载详见“宝路测试手记”微信公众号,下面我们就来揭开它的神秘面纱。
3.实战
插件截图:
本插件是在JMeter源生的 CSV Data Set Config 进了拓展开发,新增参数说明:
参数 |
说明 |
Allocate data for each thread | When it is true (default false), the parameterized file is partitioned by threads, and each thread is allocated with different block data |
Automatically allocate block size | Only Allocate data for each thread set true |
Set block size for each threads | Only Allocate data for each thread set true and automatically allocate block size set false |
重要的事情说三遍,插件支持中文释义、插件支持中文释义、插件支持中文释义。。。
实战验证--脚本结构图:
实战验证--测试结果(一):
从结果图可以看出,当采用自动分配数据块时,宝路设置线程组共启动5个线程,此时每个线程固定分2条数据。那么我们再把线程大小调整到10看看运行结果。
嗯!此时每个线程固定分配1条数据。
实战验证--测试结果(二):
从结果图可以看出,当采用手动指定线程分配数据块时,宝路设置线程组共启动2个线程,设置每个线程分配5条数据,此时第一个线程只会读取前5条数据,第二个线程仅会读取后5条数据。
如果保持线程组仍启动2个线程,设置每个线程分配6条数据,会是什么样的结果呢?
可以看到出现了<EOF>值,其实不难看出是因为数据不够分了。。。。宝路这边采用EOF标记来提示。
插件下载以及后续优化方向:
由于JMeter分布式压测试模式的原因,目前仍需手动将参数化文件copy到指定slave机目录,后续宝路考虑可能会加入同步salve机参数化文件的功能,或者单独开发一个同步文件插件。
实际使用中可能还有从指定行开始读取数据的场景,比如:某个参数化文件里面存放的是消耗型数据,在某次场景执行完毕后消耗了100行,那么后续再次执行场景时,应该从101行开始读取数据,这样就不用测试人员花大量时间去准备好多参数化文件。
关于Baolu CSV Data Set Config插件,大家如果有任何疑问或建议,欢迎给宝路留言。