Jmeter有个配置元素叫做用户自定义变量(英文名称是UserDefinedVariables)而我们提到的vars即是Variables的简写。
之前我们也说到过Jmeter的脚本中(jsr223sampler或者beanshell编写的脚本)使用varsput和varsget的操作(varsget和put的操作仅在threadgroup测试组线程中执行,所以结果的改变也仅影响该threadGroup,所以不是跨线程组的。需要跨线程组的的变量共享则可以使用prop,vars和props的使用可见vars和props使用对比1和vars和props使用对比2)。那“用户自定义变量”和脚本中的vars操作这2个关系是如何的呢?
1)Userdefinedvariables(用户自定义变量)jmeter的处理是非常简单粗暴的,不管该元素位于哪个位置,例如位于threadgroup,还是在threadgroup外面的testplan中,位于threadgroup的执行顺序的最下面还是最上面。jmeter在启动并开始执行脚本之前,实际上对所有的用户配置类元素,全部初始化操作。
例如
TestPlan
  - User defined vars1(定义了var1=test)
  - threadgroup1
    - User defined vars2(定义var2=test2)
  - threadgroup2
则执行时,Userdefinedvars1和Userdefinedvars1都执行了初始化操作。同时threadgroup1和threadgroup2中均可以看到var1和var2.Userdefinedvars(用户自定义变量)初始化后,会将所有的定义变量copy到每一个线程组中,所以每一个线程组都可以看到userdefindvars(用户自定义变量)定义的参数。
2)jmeter脚本中(jsr223sampler或者beanshell编写的脚本)的vars.put操作,例如vars.put(“var1″,”changedvar1″),仅会修改该脚本执行的线程组的变量。
例如
TestPlan
  - User defined vars1(定义了var1=test)
  - threadgroup1
    - User defined vars2(定义var2=test2)
    - vars.put("var1