【最佳实践】MeterSphere 中常用 JMeter 函数详细使用说明


Administrator
飞致云 发布于 2023-01-09 / 1717 阅读 / 0 评论 /
JMeter 提供了很多函数,如果能够熟练使用,可以为测试带来很多方便。函数调用的格式 ${__functionName(var1,var2,var3)}其中,__functionName为函数名,括号内是函数的参数,无参数JMeter时可以不用括号,如$如果参数包含逗号,那么一定要使用 “\”来转

JMeter 提供了很多函数,如果能够熟练使用,可以为测试带来很多方便。

函数调用的格式 ${__functionName(var1,var2,var3)}

其中,__functionName为函数名,括号内是函数的参数,无参数JMeter时可以不用括号,如$

如果参数包含逗号,那么一定要使用 “\”来转义,否则 JMeter 会把它当作一个参数分隔符

在Metersphere实际使用时,可通过点击参数后面的铅笔选择函数,或在参数值一栏直接输入**${__** 可自动联想补全

函数亦可在脚本中使用,可参考:JMeter 函数

1-1673256251633

JMeter 中的函数主要分为如下几类:

函数类型 函数名称 函数作用
脚本函数 __BeanShell 执行 beanshell 脚本
__javaScript 执行 javaScript 脚本
获取信息函数 __log 输出日志信息
__machineIP 返回机器(电脑)IP
__machineName 返回本机的主机名
__time 以多种格式返回当前时间
变量操作函数 __split 根据分隔符分割传递给它的字符串
__V 执行嵌套函数引用
__eval 执行字符串表达式
__evalVar 执行保存在变量中的表达式
数据计算函数 __counter 计数器
__intSum 整数求和
__longSum 长整型求和
__Random 随机数
__RandomString 随机字符串
__UUID 伪随机类型的唯一标识符ID

1. 脚本函数

1.1 __BeanShell:执行 beanshell 脚本

它有两个参数,第一个参数是要执行的语句,可以是beanshell语句或者是文件地址,是必选参数;第二个参数是保存结果的变量名称,非必选参数。

字段 含义 是否必传
BeanShell script beanshell 脚本(不是文件名) yes
Name of variable 用于重用此函数计算的值的引用名称 no

示例:

${__BeanShell(vars.put("name"\,"value"))} 

${__BeanShell(123*456)}  返回56088

//根据不同系统返回端口号
${__BeanShell(import java.util.*;Properties props = System.getProperties();String osName  = props.getProperty("os.name");if(osName.contains("Linux"))return 443;return 8443;,beanshell)} 

//取数组中随机值
${__BeanShell(import java.util.*;Random random = new Random();int[] array = {1\,100\,1000\,1100};int i = array[random.nextInt(array.length-1)];return i;,beanshell)} 
//实际业务:随机值+当前时间
${__javaScript((Number(Math.random().toString().substr(3\, 11) + Date.now()).toString(36)))}

与 beanshell 元件比较:

该函数与 beanshell 元件(beanshell sampler、beanshell preprocess等)作用是一样的,只是 beanshell 函数更常用于一些简单的判断或计算等,可以把少量的脚本放在函数中直接赋值给一个变量,而不用总是添加 beanshell 元件。
beanshell简单使用

3-1673257327870

4-1673257349574

1.2 __javaScript:执行 js 脚本

函数__javaScript可以用来执行JavaScript代码片段(非Java),并返回结果值。

该函数会调用标准的 JavaScript 解释器,还可以直接调用 JMeter 的内置函数。

字段 含义 是否必传
Expression 要执行的 JavaScript 表达式 yes
Name of variable 重用此函数计算的值的引用名称 no

示例:

${__javaScript(new Date(),MYDATE)} # 返回当前日期和时间
${__javaScript(Math.floor(Math.random()*(${maxRandom}+1)),MYRESULT)} # 将使用 maxRandom 变量,返回一个介于 0 和 maxRandom 之间的随机值并将其存储在 MYRESULT
${__javaScript(${minRandom}+Math.floor(Math.random()*(${maxRandom}-${minRandom}+1)),MYRESULT)} #将使用maxRandom和minRandom变量,返回maxRandom和minRandom之间的随机值并将其存储在变量MYRESULT下
${__javaScript("${VAR}"=="abcd",MYRESULT)} # 将VAR变量的值与abcd进行比较,返回true或false并将结果存储在 MYRESULT

注意:文本字符串要添加必要的引号。如果表达式中有逗号,要确保对其转义。

例如:{__javaScript('{sp}'.slice(7,99999))},对 7 之后的逗号进行了转义。
5-1673257748918

6-1673257767801

2. 获取信息函数

2.1 __log : 输出日志信息

函数记录一条消息,并返回其输入字符串

${__log(Message)}:写入日志文件,形如"...threadName:Message"。
${__log(Message,OUT)}:写到控制台窗口。
${__log(${VAR},,,VAR=)}:写入日志文件,形如"...threadNameVAR=value"。

参数说明:

字段 含义 是否必传
日志内容 引用变量名 yes
Log Level OUT, ERR, DEBUG, INFO (default), WARN or ERROR no
Throwable text 如果非空,则创建一个 Throwable 传递给记录器 no
Comment 如果存在,则显示在字符串中。用于识别正在记录的内容 no

7-1673258220533

8-1673258244515

2.2 __machineIP : 返回机器(电脑)IP

字段 含义 是否必传
Variable Name 引用变量名 no

9

2.3 __time : 通过多种格式返回当前时间

字段 含义 是否必传
格式 要传递给SimpleDateFormatSimpleDateFormat的格式。该函数支持各种速记别名,见下文。如果省略,则该函数返回自纪元以来的当前时间(以毫秒为单位) no
变量名 要设置的变量的名称 no

如果省略了格式字符串,那么函数会以毫秒的形式返回当前时间。其他情况下,当前时间会被转成简单日期格式。

JMeter 中默认定义的时间格式属性值有:
YMD = yyyyMMdd。
HMS = HHmmss。
YMDHMS = yyyyMMdd-HHmmss。
10-1673258665952

3. 变量操作函数

3.1 __split:字符串分割函数

函数__split会通过分隔符来拆分传递给它的字符串,并返回原始的字符串。如果分隔符紧挨在一起,那么函数就会以变量值的形式返回"?"。拆分出来的字符串,以变量${VAR_1}、{VAR_2}…以此类推的形式加以返回。

分隔符默认是逗号,如果你想要多此一举,明确指定使用逗号,需要对逗号转义,如“,”

参数说明:

字段 含义 是否必传
String to split 分隔字符串,例如“ a | b| c ” yes
Name of variable 用于重用此函数计算的值的引用名称。 no
Delimiter 指定分隔符,如 " \ : , ”等,若省略,默认使用",“进行分割。若指定”,“进行分割,则需要将”,“进行转义为”," no

前后置脚本中,示例特殊情况‘a||c|’分割,分隔符紧挨在一起,返回"?“,以分隔符结束,返回”?"
11-1673259654168

分割后的数组可搭配循环控制器使用,这里循环控制引用上图分割好的${var}变量
12-1673259704000

参数中示例分割字符串“admin|b|c”
13

3.2 __V:执行变量名表达式

函数__V可以用于执行变量名表达式,并返回执行结果。它可以被用于执行嵌套函数引用。

 ${A1}:能正常工作。
 ${A${N}}:无法正常工作(嵌套变量引用)。
 ${__V(A${N})}:可以正常工作。A${N}变为A1,函数 __V返回变量值A1。

参数说明:

字段 含义 是否必传
Variable name 要评估的变量。 yes
Default value 未找到变量时的默认值,如果为空且未找到变量,则函数返回变量名称 no

场景使用:将数据库获取的数据作为下一个接口的参数(循环控制器+计数器函数){__V(name_{__counter(,)})} 详细使用说明 点击这里

3.3 __eval:返回计算字符串表达式的结果

这允许在存储在变量中的字符串中插入变量和函数引用

例如,给定变量name=Smith、column=age、table=birthdays、SQL=selectcolumnfrom{column}from{table}wherename='name,那么通过{name}',那么通过{__eval(${SQL})},就能执行"selectagefrombirthdayswherename=‘Smith’"。这样一来,就可以与CSV数据集相互配合,例如,将SQL语句和值都定义在数据文件中。

字段 含义 是否必传
Variable name 要评估的变量。 yes

使用场景:
①场景内容对某商品的增删改查,该商品的id为固定前缀xxx+32位随机数。
14

15

②原来一个注册,因为用到的参数都是随机生成,所以不方便写入csv参数化文件里,只能出现这种多个if控制器+请求样本的脚本设计来跑这些用例。这样脚本就会很繁琐,改动也不方便。

数据文件中直接使用函数或者前文提取的变量。很方便的实现了数据驱动,脚本缩减。
16

17

18

3.4 __evalVar:返回计算存储在变量中的表达式的结果

这允许人们从文件中读取字符串,并处理其中的任何变量引用。例如,如果变量“ query ”包含“ select ${column} from table”并且“column”和“table”包含“name”和“customers”,则{table} ”并且“ column ”和“ table ”包含“ name ”和“ customers ”,则{__evalVar(query)} 将评价为“select name from customers”。

字段 含义 是否必传
Variable name 要评估的变量。 yes

使用场景同上,使用 __evalVar 里面不用 ${} 就可引用到变量
19

4. 数据计算函数

4.1 __counter:计数器

1、每次调用计数器函数都会产生一个新值,从1开始每次加1。计数器既可以被配置成针对每个虚拟用户是独立的,也可以被配置成所有虚拟用户公用的。

2、如果每个虚拟用户的计数器是独立增长的,那么通常被用于记录测试计划运行了多少遍。全局计数器通常被用于记录发送了多少次请求。

3、计数器使用一个整数值来记录,允许的最大值为2,147,483,647。
20

4.2 __intSum:整数求和函数

1、函数__intSum可以被用来计算两个或者更多整数值的合。至少需要两个整数,如果指定变量名则名称中必须包含一个非数字字母,否则它会被当成另一个整数值,而被函数用于计算。

2、当有多个整数时点击添加按钮来增加参数,但是需要注意的是,添加完参数后,点击”生成”的函数默认是把手动添加的函数放在后面,这时需要手动调整变量名的位置,把它放到最后,否则会报错。
21

4.3 __longSum:计算两个或多个长值的和

longSum 函数可用于计算两个或多个 long 值的总和,只要您知道您的值不在 -2147483648 到 2147483647 的区间内,请使用它而不是 __intSum。

字段 含义 是否必传
First argument 第一个长值 yes
Second argument 第二个长值 yes
nth argument 第n个长值 no
last argument 重用此函数计算的值的引用名称 no

22-1673260626366

4.4 __Random:随机数函数

random 函数返回一个介于给定最小值和最大值之间的随机数。

字段 含义 是否必传
Minimum value 最小值 yes
Maximum value 最大值 yes
Variable Name 重用此函数计算的值的引用名称 no

23

4.5 __RandomString:随机字符串

RandomString 函数使用要使用的字符中的字符返回长度的随机字符串

字段 含义 是否必传
Length 生成的字符串的数字长度 yes
Characters to use 用于生成字符串的字符 no
Variable Name 重用此函数计算的值的引用名称 no

24

4.6 __UUID:随机数函数

UUID 函数返回一个伪随机类型 4 通用唯一标识符 (UUID) 备注:此函数无参数
25
将返回此格式的 UUID:c69e0dd1-ac6b-4f2b-8d59-5d4e8743eecd



是否对你有帮助?