Jmeter函数助手之setProperty、Property及P函数
一、背景
在使用Jmeter做性能测试、接口自动化测试时,各个线程之间或接口之间存在接口参数的依赖,而此参数需要跨线程传递,这需要使用setProperty
函数设置JMeter属性,这样在bean shell里面可以用到,全局参数化也可以调用到。
二、函数助手调用
1、调用函数助手
启动jmeter界面后,可以在JMeter的选项菜单中找到函数助手对话框(快捷键:Ctrl+Shift+F1),如下图所示:
打开函数助手后,可从下拉列表中选择需要的函数,并为其参数设定值,不同的函数要求的参数也不同。
函数参数,第一列是名称,这是函数参数的简要描述,第二列是值,这是需要用户填充参数的值。
2、查看属性
可以通过点击“添加”,点击“非测试元件”,选中“属性显示”查看属性,只要在%JMETER_HOME%bin\bin\jmeter.properties
文件中设置的属性,都可以通过这个属性获取到。另外,也可以通过property
函数方法获取到属性值。
三、setProperty函数
1、界面说明
该函数用来给JMeter属性设置值,默认返回值为空字符串,所以在函数在任何地方被调用是有效的。界面如下:
2、参数说明
-
第一个参数
- Name of property:必填;属性名称
-
第二个参数
- Value of property:必填;属性值
-
第三个参数
- Return Original Value of property (default false)?:非必填;是否返回原始值,当设置为:true,将返回原始值
注意:
- 跨线程组调用, 可以在任意地方调用
- 参数不用加双引号引用
四、property函数
1、界面说明
该函数是用来获取jmeter属性值。如果找不到到属性值而且没有提供默认值,将返回属性名。在有提供默认值时,可以选择不用提供引用名(可选的),函数名的值可以设置为null,但会被忽略函数值;
2、参数说明
-
第一个参数
- Name of property:要检索的属性名,必填
-
第二个参数
- Name of variable in which to store the result (optional):引用名,用于被赋值的变量,非必填
-
第三个参数
- Default value:默认值,非必填
3、示例说明
${__property(key)}
- 读取 key 属性
- 如果找不到 key 属性,则返回 key(属性名)
${__property(key,,default)}
- 读取 key 属性
- 如果找不到 key 属性,则返回 default值
${__property(key,prop,default)}
- 将读取到的属性值存储到 prop 变量中,可通过 ${prop} 引用变量
五、P函数
1、界面说明
P函数与property函数类似,均是获取jmeter的属性值,但这是简化版的属性函数。它与property函数的区别在于,它不能存储值的变量,可以在命令行中使用,也可以在beanshell中用;
如果没有提供默认值,默认为1,选择1的原因是它对常用的测试变量有效,例如:循环,线程数,ramp up。
2、参数说明
-
第一个参数
- Name of property:要检索的属性名,必填
-
第二个参数
- Default value:默认值,非必填
六、综合运用
有两个线程组,第一个线程组中的接口值响应值,需要作为第二个线程组接口的入参,此时需要跨线程组传递参数,此处可以将第一个接口的响应值,设置为属性值,然后供第二个请求调用。
首先,第一个接口为请求成都天气的接口
当请求成功后,将响应值赋值给city
变量
然后,通过setProperty
函数将${city}
的值,赋值给属性P_city
,供跨线程的接口调用参数值。
${__setProperty(P_city,${city},)};
注意:在性能测试时,不建议用BeanShell开头的元件,建议用JSR223开头的元件,因为BeanShell开头的元件性能不佳。仅仅在功能测试可以用BeanShell开头的元件。
然后,第二个接口通过property函数或者p函数,获取属性P_city
,获取到变量city
的值“成都”。
#property函数
${__property(P_city,,)}
#p函数
${__P(P_city,)}
最后,可以发现请求发送成功
七、参考
1、setProperty函数官网:https://jmeter.apache.org/usermanual/functions.html#__setProperty
2、Property函数官网:https://jmeter.apache.org/usermanual/functions.html#__property
3、P函数官网:https://jmeter.apache.org/usermanual/functions.html#__P