写点什么

软件测试 | JMeter 函数和变量

  • 2023-05-31
    北京
  • 本文字数:1253 字

    阅读完需:约 4 分钟

获取更多相关知识

JMeter 函数可以被认为是某种特殊的变量,它们可以被采样器或者其他测试原件所引用。函数调用的语法如下:

$ {_functionName(var1,var2,var3)}
复制代码

其中,_functionName 匹配被调用的函数名称。用圆括号包含参数的形参,例如 $(_time(YMD)),不同函数要求的参数不同。有些 JMeter 函数不要求参数,则可以不适用圆括号,例如 $(_threadNum)。

如果一个函数的参数中包含逗号,那么必须对逗号进行转义(使用“\”),否则 JMeter 会把逗号当成参数分隔符。例如:

$(_time(EEE\, d MMM yyy)}

变量引号的语法如下:

${VARIABLE}

如果测试计划中引用了未定义的变量或者函数,那么 JMeter 并不会报告/记录错误信息,引用返回的值就是引用自身。例如,假设字符串 UNDEF 没有被定义为变量,那么 ${UNDEF}返回的值就是 $(UNDEF)。变量、函数(包括属性)都是大小写敏感的。JMeter2.3.1 及其后续版本会剔除参数名中的空格,例如,$(_Random(1,63,LOTTERY)}中的“LOTTERY”会被“LOTTERY”所代替。

1.使用函数可以做些什么

目前有两种类型的函数:用户定义的静态值(或者变量)和 JMeter 内置函数。

当需要编译测试树或者提交运行时,用户可以使用自定义变量来代替常用的静态值。这种替换只在测试的开始阶段执行一次。一个典型的应用就是使用自定义变量来替换所有 HTTP 请求的 DOMAIN 域,例如,做出轻微改动,就可以让同一个测试脚本适配多个服务器。

需要注意,目前变量不支持嵌套:例如 ${Var${N}}不能正常工作。但是在 JMeter2.2 及其以后版本中,可以借助函数_V(variable)来达成嵌套变量的目的(如 ${_V(Var${N})})。在早期的 JMeter 版本中可以使用 $(_BeanShell(vars.get("Var${N}")))。

这种类型的替换也可以不用函数来实现,但是就不像使用函数时那么直观和方便。用户可以创建默认配置测试元件,它们会填充采样器中的空白设置。

使用 JMeter 内置函数,用户可以基于前面的服务器响应数据、函数所在线程、当前时间或者其他资源来动态地计算变量值。这些变量的值会在整个测试期间针对每个请求动态更新。

2.函数和变量可以被用在哪里

函数和变量理论上可以被用在任何测试元件的任何输入域之中(除了测试计划之外,见下面的内容)。有些输入域不支持随机数组,因为它们只接受数字,这样一来就不支持函数。当然,大多数输入域支持函数。

将函数用于测试计划(Test Plan)的设置时,会受到一些限制。此种情况下,JMeter 线程的变量在函数被处理时还没有被设定,因此变量作为参数传递时没有初始化,函数引用当然不会生效。如此一来,split()、regex()及变量赋值函数就都不能正常工作。函数 threadNum()同样不能正常工作,该函数在测试计划层没有意义。在测试计划中,函数 intSum、longSum、machineName、BeanShell、JavaScript、jexl、random、time、property functions、log functions 应该能正常工作。

配置元件是通过一个独立线程处理的。因此函数(如_threadNum)不能在这些测试元件(如用户定义的变量)之中正常工作。另外还需要注意,在用户定义的变量(UDV)中定义的变量,在 UDV 被处理前是不能使用的。

搜索微信公众号:霍格沃兹测试学院

用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
软件测试 | JMeter函数和变量_测试_测吧(北京)科技有限公司_InfoQ写作社区