Jmeter中有关随机参数的那些事

  • 2019 年 10 月 4 日
  • 筆記

相信大家已经看过前面一些介绍jmeter的文章,对这个测试工具已经有了“深入”的了解。在接口测试中,通常我们发送的请求不是一成不变的,使用参数化功能可以解决对不同数据的需求,但对于需要随机参数的地方,我们需要另外的一些方法。今天我就来介绍一下jmeter中很重要的一类功能——随机参数。

一、利用Jmeter内置函数方法生成随机参数

Jmeter中内置了一些十分方便实用的函数,可以大大丰富我们测试的内容与覆盖度。其中有一类含Random关键字的函数便是我们本次介绍的主题。从函数的名字就可以看出,它们都是与随机有关的,下面我就来简单介绍一下它们的用法。

提示:

在jmeter中,可以使用函数助手来快速生成函数,调用函数时无需手动输入整个函数,只要设置几个参数值,点击Generate & Copy to clipboard即可自动生成完整的函数,粘贴至需要的位置即可:

函数助手菜单栏入口

1、__Random函数

最常用的随机函数之一,可以生成一定范围内的随机整数。

函数助手中的参数设置

参数说明:

第一个参数:范围下限

第二个参数:范围上限

第三个参数:函数值返回的目标参数(变量)

使用举例:

在合成主播项目的测试中,每次发送文本需要用到不同的文本序号,可以用__Random函数生成,如下图所示:

json中的seqNo字段设置为100-999范围内随机数字

2、__RandomString函数

与__Random函数类似,用于生成随机字符串,可以生成一定长度的、由指定字符组成的随机字符串。

函数助手中的参数设置

参数说明:

第一个参数:字符串长度

第二个参数:用于生成随机字符串的字符

第三个参数:函数值返回的目标参数(变量)

3、__RandomDate函数

与__Random函数类似,用于生成一定时间范围内的随机日期。

函数助手中的参数设置

参数说明:

第一个参数:日期格式

第二个参数:起始日期

第三个参数:终止日期

第四个参数:地域

第五个参数:函数值返回的目标参数(变量)

4、__RandomFromMultipleVars函数

这个函数与前面的几个略有区别,是通过随机取变量的方式来获取函数值,因此在使用前,我们需要预先定义好用于随机的变量及变量值。

函数助手中的参数设置

参数说明:

第一个参数:用于随机的变量名(竖线分隔)

第二个参数:函数值返回的目标参数(变量)

使用举例:

在输入法变声服务的测试中,服务支持多种音色变换,为模拟线上用户实际使用时的情况,需要随机取用音色:

首先利用自定义用户变量的方式设置音色列表:

音色列表

在speaker(音色)参数中调用函数获得随机音色

二、利用BeanShell生成随机参数

尽管jmeter内置的函数已经足以解决大部分随机参数的问题,但还是有一些场景无法完全覆盖。比如两个随机的变量需要对应出现(如音频编码和音频扩展名),需要生成一定范围内随机小数等等。这时候,万能的BeanShell可以为我们提供更加灵活的解决方案来满足这些需求。

使用举例:

1、在语音合成项目的测试中,需要合成不同音频格式的音频,为了模拟线上情况,音频编码和输出音频的扩展名应设置为随机,但二者需要对应。

首先,利用用户自定义变量的方式分别添加所需的音频编码类型和扩展名,为了方便,二者变量名的序号部分设置为一一对应。

音频编码和扩展名

我们可以在请求下添加BeanShell前置处理器(BeanShell PreProcessor),在脚本框中输入如下代码:

BeanShell中生成随机参数

其中,f和w分别对应音频编码和扩展名,在请求中调用即可。

请求中调用生成的随机变量

2、同样在语音合成项目的测试中,需要为合成的音频设置不同的语速、音调、音量等,这些参数为一定范围内的随机小数。这时,我们依然可以使用BeanShell来获取这些随机参数值。

BeanShell中生成随机参数

volume、pitch和rate即为生成的三个随机参数值。进一步我们可以通过设置边界值变量,再利用上文中介绍的__RandomFromMultipleVars函数来提高边界值的命中概率(结合线上实际数据分析和测试的需要,边界值的命中概率会比较高)

三组边界值变量

参数调用

如此设置可以实现上限值、下限值、中间值命中概率各三分之一,明显提升了上下边界值的命中概率,更加符合实际场景与测试需求。

好了,关于jmeter随机参数有关的内容就介绍到这里,希望能给大家的测试带来一些帮助,我们下期再见啦~。