Jmeter用户自定义变量和脚本中var的关系以及处理
Jmeter有个配置元素叫做用户自定义变量(英文名称是User Defined Variables) 而我们提到的vars即是Variables 的简写。
之前我们也说到过Jmeter的脚本中(jsr223 sampler或者beanshell 编写的脚本) 使用vars put和vars get的操作(vars get和put的操作仅在threadgroup 测试组线程中执行,所以结果的改变也仅影响该threadGroup,所以不是跨线程组的。 需要跨线程组的的变量共享则可以使用prop, vars和props 的使用可见 vars和props使用对比1 和 vars和props使用对比2 )。 那“用户自定义变量”和脚本中的vars 操作这2个关系是如何的呢?
1) User defined variables (用户自定义变量)jmeter的处理是非常简单粗暴的, 不管该元素位于哪个位置, 例如 位于threadgroup,还是在threadgroup外面的testplan中,位于threadgroup的执行顺序的最下面还是最上面。 jmeter在启动并开始执行脚本之前, 实际上对所有的用户配置类元素,全部初始化操作。
例如
TestPlan
- User defined vars1(定义了var1=test)
- threadgroup1
- User defined vars2(定义var2=test2)
- threadgroup2
则执行时,User defined vars1和 User defined vars1 都执行了初始化操作。 同时 threadgroup1 和 threadgroup2中均可以看到 var1 和 var2. User defined vars(用户自定义变量) 初始化后, 会将所有的定义变量copy到每一个线程组中,所以每一个线程组都可以看到user defind vars (用户自定义变量)定义的参数。
2) jmeter 脚本中(jsr223 sampler或者beanshell 编写的脚本) 的vars.put 操作,例如vars.put(“var1″,”changedvar1”),仅会修改该脚本执行的线程组的变量。
例如
TestPlan
- User defined vars1(定义了var1=test)
- threadgroup1
- User defined vars2(定义var2=test2)
- vars.put("var1","changedvar1")
- Debug sampler1
- threadgroup2
- Debug sampler2
- sleep 5秒(等待 threadgroup1 执行完成后,用于确认threadgroup1 中的vars.put 是否对threadgroup2的vars 变量有影响)
则执行后。
threadgroup1 中可见 var1=changedvar1 , var2=test2
threadgroup2 中可见 var1=test,var2=test2
3) 那么我们再来看下user defined vars(用户自定义变量)元素定义的变量var和jmeter 脚本中定义var的区别。
jmeter脚本重定义var 仅在自己所属的线程组有效,不是全局的。而 user defind vars(用户自定义变量)定义的是全局(全局的验证,在2部分已经可以看到)
如
TestPlan
- User defined vars1(定义了var1=test)
- threadgroup1
- vars.put("var1","changedvar1")
- vars.put("var3","test3")
- Debug sampler1
- threadgroup2
- Debug sampler2
- sleep 5秒(等待 threadgroup1 执行完成后,用于确认threadgroup1 中的vars.put 是否对threadgroup2的vars 变量有影响)
则执行后,
threadgroup1 中可见 var1=changedvar1 , var3=test3
threadgroup2 中可见 var1=test
因此我们在使用user defined vars可以统一写在一个地方,便于脚本的梳理。 而脚本中vars.get,vars.put 的处理仅对线程组内有效(包括listener监听器中的vars.get, vars.put)。 这样我们在脚本开发中就会更清晰和方便定位问题了。
此篇文章已被阅读1878 次