Jmeter 的变量类型和作用域

发表时间

Jmeter 的有多种变量类型,有其各自的作用域。有时候不小心就会使它们之间相互冲突或者覆盖,本文梳理各种类型变量的生成方法、使用特点、作用范围。


变量类型

Jmeter 中的变量分别有以下几种:

  • User Defined Variables
  • User Parameters
  • 属性 Properties
  • 运行中创建的变量

我们分开单独研究各自的特点。

User Defined Variables(UDV)

User Defined Variables 是一种 Config Element,简称 UDV,用于在测试开始时,设定静态值,添加方法如下所示:

Add > Config Element > User Defined Variables

初始化

UDV 在测试计划开始时初始化, 官方文档 是这么解释的:

不能将每次调用都会改变返回值的函数作为 UDV 的取值来源,如果这么做了,仅第一次返回值会被保存在 UDV 中。

这说明 UDV 是在测试开始时初始化,所以 UDV 无法引用那些后续测试元件中才出现的变量。

静态值

UDV 的值在整个测试期间是不变的,用于保存在整个测试期间的静态值。使用 UDV 的好处是方便维护测试用例,避免在多个地方重复填写,而且方便后续修改。比如,被测系统的 IP、端口。

作用域

无论 UDV 在任何位置上,都会在测试开始时初始化,并且影响所有线程组。例如,如果在UDV中定义了一个变量 a=1,那么在所有线程组中都可以看到这个变量 a=1

Test Plan
  ├─Thread Group 1(${a}=1,来自 UDV)
  │    └─User Defined Variables (定义a=1)
  └─Thread Group 2 (${a}=1,来自 UDV)

不过,为了更好的可读性,应该把 UDV 放置于 Test Plan 的最顶部,当测试用例初始化后,UDV 的值将被复制到各个 Thread Group 中。例如这样:

Test Plan
  ├─ User Defined Variables (定义a=1)
  ├─ Thread Group 1 (${a}=1,来自 UDV)
  └─ Thread Group 2 (${a}=1,来自 UDV)

如果运行时创建的变量和某个 UDV 重名, UDV 的值会在当前的 Thread Group 内被覆盖。

Test Plan
  ├─ User Defined Variables (a=1)
  ├─ Thread Group 1 
  │     └─ Post Processor
  │          └─(${a}=2,覆盖 UDV)
  └─ Thread Group 2 (${a}=1,来自 UDV)

动态的设置变量值,可以使用 User Parameters .

User Parameters

首先,User Parameters 是 Pre Processors 的一种,添加方法如下所示:

Add > Pre Processors > User Parameters

用来建立线程间独立的、属于各用户的变量,和 上面的 UDV 最大的不同就是,User Parameters 可以指定各个用户(线程)的变量值。比如设置了如下用户变量值:

Name: User_1 User_2 User_3
a 1 2 3

那么这时创建多个用户(线程),他们会依次读取列表中的数值。如果用户数量比列表中的数值个数多,则会循环往复。如果创建5个用户,那么每个用户拿到的变量值可能是这样:

运行时动态创建的线程:
Thread 1: ---- a=1 ----
Thread 2: ---- a=2 ----
Thread 3: ---- a=3 ----
Thread 4: ---- a=1 ----
Thread 5: ---- a=2 ----
……

属性 Properties

Properties,属性是 Jmeter 最顶层的命名空间,在整个 Test Plan 里都可读写,可以随时随地的使用,用于在 线程组间共享值

Test Plan (读取同一个属性a)
  ├─ User Defined Variables (读取同一个属性a)
  ├─ Thread Group 1 (${a}=1,读取同一个属性a)
  └─ Thread Group 2 (${a}=1,读取同一个属性a)
声明属性

声明属性的方法有以下几种:

  • 在 bin 文件夹下的 jmeter.properties 文件
  • ${__setProperty} 函数
  • Jmeter 的启动参数中携带 -J属性名
  • Groovy 语言中的 props.put 方法
读取属性

读取属性有以下几种途径:

  • ${__property} 函数
  • ${__P} 函数
  • Groovy 语言中的 props.get 方法

运行中创建的变量

当你使用正则表达式处理器(Regular Expression Extractor)提取出特定的字符串时,就可以自动创建变量,保存提取出的字符串。

这个变量只能在当前的线程组中访问,跨线程组,需要用到 Jmeter 属性 . 访问的方法有:

本页面内容采用 署名协议 CC-BY 授权。欢迎转载,请保留原文链接


分类

相关文章