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

posted @ 2022-11-01 14:46  xyztank  阅读(1493)  评论(0编辑  收藏  举报