前言
最近工作中进行的性能测试,需要在Jmeter中生成随机浮点数,但是发现Jmeter自带的函数助手不能直接生成小数类型的随机数。通过多方查找,在此整理了四种生成随机浮点数的方法,并对其性能进行了初步探究,记录如下
注:下文举例使用的随机数区间为0-10
一、使用CSV生成随机小数
Jmeter自带的CSV工具是不支持随机取值的。通过引入外部jar包jmeter-plugins-manager-1.3.jar来获得随机CSV插件:
字段解释:
1.文件名: csv文件的路径,最好选择绝对路径;对于分布式测试,必须将CSV文件存储在服务器主机系统上与JMeter服务器启动所在的正确相对目录中
2.文件编码: 此CSV文件的编码,用于读取此文件的编码
3.分隔符:默认逗号
4.变量名称: 引用csv配置文件中的数据时,要指定变量名;
5.random order
随机顺序:选中则会随机顺序从文件中读取数据,如果不选择,则和常规的CSV数据集配置-样工作。
6. Rewind on end of list
遇到文件结束符再次循环:在一个测试循环完成后, Jmeter再运行一个,这对于检查一段时间内的性能非常有用,当选择随机顺序时 ,第二次和后续的每一次重新循环都会以不同顺序读取CSV数据集中的数据。
如果选择了该标志并且迭代循环已经结束,则将开始新的循环。
7.First line is CSV head
第一行是CSV标题: 如果指定了“变量名称” , 并且想要跳过文件中的第一行,请选中此复选框;如果第一行是定义了变量名称,那么此项勾选!
选择此标志以跳过标题(仅在Variable Names不为空时使用)
8.Independent list per thread
使用"随机顺序"进行检查时,每个线程均以随机顺序运行自己的CSV值副本。如果未选中,则所有线程将遍历相同的随机值列表。
9.测试/test读取CV文件: 在真正使用之前,可以先测试下读取数据的规则,以供后续正确使用。
制作CSV文件:
测试是否能够生成所需要的的随机数:
二、使用随机变量生成随机数生成随机小数
Jmeter自带的随机变量元件,可以生成随机数,将两个元件组合使用,即可生成随机浮点数:
测试是否能够生成所需要的的随机数:
注:本方法生成的随机数仅限于0-9.99之间,且不会自动去零(展示为0.00,1.10)
三、引用Math.random函数生成随机数
使用如下语句引入函数并赋值给变量:
vars.put(“float”,"${__javaScript((Math.random() * (10)).toFixed(2) * 1,)}");
测试是否能够生成所需要的的随机数:
四、使用函数助手Random函数生成随机小数
单个函数助手只能生成随机整数,将三个函数拼接起来即可生成两位小数的随机浮点数:
测试是否能够生成所需要的随机数:
注:本方法生成的随机数仅限于0-9.99之间,且不会自动去零(展示为0.00,1.10)
性能探究
下面对以上四种随机浮点数生成方法对压测机的性能负载做了初步的测试
测试方案如下:
选定某种随机数生成方法,设置100并发线程无限循环,持续10秒,重复三次得到大致的CPU使用情况
- 使用CSV生成随机小数:
- 使用随机变量生成随机数生成随机小数:
- 引用Math.random函数生成随机数:
- 使用函数助手Random函数生成随机数:
总结
根据以上四种方法的随机数生成情况和性能指标,我整理了如下的结论表格:
生成方法 | 优点 | 性能占比 | 缺点 |
---|---|---|---|
使用Random CSV元件 | 可以涵盖所有随机数,性能损耗小 | 约占用CPU50% | 需要设置大量随机数时极其繁琐,且不好维护变更 |
使用随机变量 | 使用Jmeter自带元件,设置简便,性能损耗小 | 约占用CPU50% | 以0-10为例,无法取到10,且无法去零,覆盖范围不完全 |
引用Math.random函数 | 取值精确,易于变更维护 | 约占用CPU100% | 性能损耗极大,不适合高并发压测使用 |
使用函数助手Random函数 | 使用Jmeter自带元件,设置简便,性能损耗小 | 约占用CPU60% | 以0-10为例,无法取到10,且无法去零,覆盖范围不完全 |
以上方法为个人收集整理,如有不足之处欢迎指正探讨。