Jmeter用户自定义变量和脚本中var的关系以及处理

Life is short , play more!
本文来自lihao's Blog,转载请注明。

Jmeter有个配置元素叫做用户自定义变量(英文名称是User Defined Variables) 而我们提到的vars即是Variables 的简写。
之前我们也说到过Jmeter的脚本中(jsr223 sampler或者beanshell 编写的脚本) 使用vars put和vars get的操作(vars get和put的操作仅在threadgroup 测试组线程中执行,所以结果的改变也仅影响该threadGroup,所以不是跨线程组的。 需要跨线程组的的变量共享则可以使用prop, vars和props 的使用可见 vars和props使用对比1vars和props使用对比2 )。 那“用户自定义变量”和脚本中的vars 操作这2个关系是如何的呢?

1) User defined variables (用户自定义变量)jmeter的处理是非常简单粗暴的, 不管该元素位于哪个位置, 例如 位于threadgroup,还是在threadgroup外面的testplan中,位于threadgroup的执行顺序的最下面还是最上面。 jmeter在启动并开始执行脚本之前, 实际上对所有的用户配置类元素,全部初始化操作。

例如

则执行时,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″),仅会修改该脚本执行的线程组的变量。

例如

则执行后。
threadgroup1 中可见 var1=changedvar1 , var2=test2
threadgroup2 中可见 var1=test,var2=test2

3) 那么我们再来看下user defined vars(用户自定义变量)元素定义的变量var和jmeter 脚本中定义var的区别。

jmeter脚本重定义var 仅在自己所属的线程组有效,不是全局的。而 user defind vars(用户自定义变量)定义的是全局(全局的验证,在2部分已经可以看到)

则执行后,
threadgroup1 中可见 var1=changedvar1 , var3=test3
threadgroup2 中可见 var1=test

因此我们在使用user defined vars可以统一写在一个地方,便于脚本的梳理。 而脚本中vars.get,vars.put 的处理仅对线程组内有效(包括listener监听器中的vars.get, vars.put)。 这样我们在脚本开发中就会更清晰和方便定位问题了。

此篇文章已被阅读1083 次


发表评论

电子邮件地址不会被公开。 必填项已用*标注