先打个广告:欢迎关注我的公众号,参与 文史大挑战 趣味题目。使用方法见 这篇文章 。
正文开始:
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 的好处是方便维护测试用例,避免在多个地方重复填写,而且方便后续修改。比如,被测系统的 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 里都可读写,可以随时随地的使用,用于在 线程组间共享值 。
├─ 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 属性 . 访问的方法有:
${变量名}
- Groovy 语言中的 vars.get 方法,具体用法参考 Jmeter 的 vars 和 props 用法
如果您对本文有疑问或者寻求合作,欢迎 联系邮箱 。邮箱已到剪贴板
精彩评论
本站 是个人网站,采用 署名协议 CC-BY-NC 授权。
欢迎转载,请保留原文链接 https://www.lfhacks.com/tech/jmeter-variable-scope/ ,且不得用于商业用途。