jmeter的属性和变量可以简单理解为编程里面的全局变量和局部变量。属性是全局可见,可以跨线程组传递调用,而变量基本上只能存在于一个线程组中(在测试计划定义的变量也是可以跨线程组传递的)。同线程组内的数据传递一般用变量,例如,存放一个临时的过程值。多个进程组共用的一般用属性,例如,登录操作的session值需要传给其他线程组用,避免每个线程组都重复登录。

属性的创建和赋值及访问方法如下:

1.创建一个属性并赋值:

方式一:使用beanShell的内置对象props,props.put("属性名","属性值");

方式二:${__setProperty(cookie3,${COOKIE_session})};

方法二是通过函数setProperty创建属性(jmeter一般通过${__函数名(参数)}的方式调用函数)。cookie3表示待创建的属性名称,第二个参数表示将要赋予的属性值。

注:setProperty函数的属性名和属性值参数无需带引号,否则引号会被jmeter当做属性名或者属性值的一部分。例如,${__setProperty(“cookie3”,${COOKIE_session})} 执行后会创建一个名为“cookie3”的属性而不是cookie3属性,并且属性名和属性值两个参数间不能存在空格,否则这个空格会被认为是属性值的一部分赋值给属性。

2.在其他线程组访问该属性:

方法一:通过函数${__P(属性名)}进行读取;

方法二:通过函数${__property(属性名)}进行读取;

方式三:使用BeanShell内置对象获取props.get("属性名");

注:若属性是通过变量进行赋值的,例如,${__setProperty(session,${cookie})},此时跨线程组且在BeanShell脚本中使用上面方法读取session属性时,读取到的值为“${cookie}”,而不是${cookie}对应的变量值(但是在同一线程组读取session属性则能正确读取变量值,可能原因:猜测是跨线程组访问属性时,读取不到${cookie}导致的,毕竟变量无法跨线程组传递,在测试计划中定义的变量除外)。不过在jmeter的一些控件中,跨进程组的情况下是可以直接读取到通过变量赋值的属性,例如http cookie管理器、用户定义的变量控件等。

变量的创建和赋值及访问:

1.创建一个变量并赋值:

方式一:在jmeter提供的控件中创建;

方式二:使用vars对象在脚本中创建,vars.put("变量名","变量值");

2.访问变量:

方式一:${变量名}

方式二: vars.get("变量名")

以下为笔者更新思路:

BeanShell PostProcessor 全局变量里面为了每个线程组都可以直接采用

//print(""+""+""+);
String imei = "${rcuCode}";
String imei_4 = imei.substring(imei.length() -4,imei.length());
print(imei_4);
vars.put("imei_4",imei_4);
print("======imei_4======== "+vars.get("imei_4"));
${__setProperty(Nimei_4,${imei_4},)};
print("========NuserCode====== "+${__P(Nimei_4,)}); //String port= String userCode="u"+imei_4;
vars.put("userCode",userCode);
print("======userCode======== "+vars.get("userCode"));
String userCode = bsh.args[0];
${__setProperty(NuserCode,${userCode},)};
print("========NuserCode====== "+${__P(NuserCode,)}); String userName="A"+imei_4;
vars.put("userName",userName);
print("======userName======== "+vars.get("userName"));
String userName = bsh.args[1];
${__setProperty(NuserName,${userName},)};
print("========NuserName====== "+${__P(NuserName,)}); String robotName="Robot"+imei_4;
vars.put("robotName",robotName);
print("======robotName======== "+vars.get("robotName"));
String robotName = bsh.args[2];
${__setProperty(NrobotName,${robotName},)};
print("========NrobotName====== "+${__P(NrobotName,)}); String rcuName="RCU"+imei_4;
vars.put("rcuName",rcuName);
String rcuName = bsh.args[3];
print("======rcuName======== "+vars.get("rcuName"));
${__setProperty(NrcuName,${rcuName},)};
print("========NrcuName====== "+${__P(NrcuName,)}); String pushName="u"+imei_4;
vars.put("pushName",pushName);
String pushName = bsh.args[4];
print("======pushName======== "+vars.get("pushName"));
${__setProperty(NpushName,${pushName},)};
print("========NpushName====== "+${__P(NpushName,)}); String policy_name="push"+imei_4;
vars.put("policy_name",policy_name);
String policy_name = bsh.args[5];
print("======policy_name======== "+vars.get("policy_name"));
${__setProperty(Npolicy_name,${policy_name},)};
print("========Npolicy_name====== "+${__P(Npolicy_name,)});

细节的作用域覆盖

最新文章

  1. .net 高效开发实用工具
  2. phpcms v9图片生成缩略图变成黑色解决方法
  3. 在自定义TableViewCell类里面添加按钮事件触发不了的一些实践
  4. [CareerCup] 17.11 Rand7 and Rand5 随机生成数字
  5. HTML5动画软件工具编辑器 HTML5动画分类 工具推荐
  6. tnsnames linux找的位置顺序
  7. HDU 1789 Doing Homework again (贪心)
  8. File-nodejs
  9. log4net 将日志写入数据库
  10. Ch02 从零开始实例学习3
  11. MongoDB在实际项目
  12. js中三目运算符和&& || 符的个人浅见
  13. Brainfuck与Ook!编程语言解析与解密
  14. Windows环境下多线程编程原理与应用读书笔记(4)————线程间通信概述
  15. POJ 1021 2D-Nim
  16. NSParagraphStyle 的属性
  17. Fragment传参
  18. 在进行商业运算时解决BigDecimal的精度丢失问题
  19. 在Ubuntu18.04下将应用程序添加到启动器
  20. featuremap尺寸的计算

热门文章

  1. Android P2P语音通话实现
  2. Service和IntentService的区别
  3. postfix配置积累(不断的积累)
  4. Flask框架 之 上下文管理前戏
  5. JavaScript 组件编写
  6. C# 随机数 Radom 循环生成同一的数字
  7. HttpAnalyzerStdV7安装教程
  8. python2.7响应数据中unicode转中文
  9. c++基本
  10. 快速获取.NET DLL文件编译时间