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,)});

细节的作用域覆盖

Jmeter函数作用域实时取值覆盖[针对HTTP Request等控制器]的更多相关文章

  1. JMeter调试参数是否取值正确,调试正则提取的结果(log.info|log.error|print)

    JMeter调试参数是否取值正确,调试正则提取的结果(log.info | log.error | print) Jmeter的log输出控制(jmeter.log) 1 2 log_level.jm ...

  2. for循环的运算 改变循环的控制流 死循环 遍历数组 定义方法 有名函数匿名函数 定义函数的方法取值 与 自己创建函数取值 局部与全局变量 次幂/随机数/取绝对值/向上取整/平方根

    今天学习的是for循环,对for循环的运算有了理解. document.write(" ")里的内容在网页上展示出来 有名函数非常重要!!!!!!!!!!!!!!!!!!!!!并且 ...

  3. Jmeter VS LR参数取值方式和迭代方式

    Jmeter的参数化 Jmeter中的参数就是变量. 变量的来源:测试计划.UDV.CSV.函数.正则表达式.数据库. 以Jmeter的CSV文件参数化为例:

  4. 410 for 循环 运算 改变循环的控制流 死循环 遍历数组 定义方法 有名函数匿名函数 定义函数的方法取值 date math 局部变量 函数 局部与全局变量 次幂/随机数/取绝对值/向上取整/平方根

    for(1.表达式1;2.表达式2;3.表达式3){ 4.循环体语句; } 先执行1 ,在执行2, 表达式, 如果2结果为false,退出循环 如果2是true 执行4 在执行3 执行2 举例打印1- ...

  5. 跟着太白老师学python day10 名称空间,作用域和取值顺序,变量的加载顺序

    名称空间分为3种: 1. 全局名称空间 2. 内置名称空间 3. 局部名称空间(临时) 作用域 全局作用域              1全局名称空间 2 内置名称空间 局部作用域           ...

  6. python通过函数改变变量取值

    严格讲应该是"通过函数调用,改变引用对象".python中,要区分"变量名"和"对象" 如果是类的对象,是引用类型的,那么可以通过函数调用, ...

  7. jmeter从外部文件取值问题,如果文件中的参数值为纯数字形式的,jmeter会默认将其识别成int型数据

    如果你通过CSV Data Set Config或者_StringFromFile函数来参数化你的请求,需要特别注意当参数为纯数字时,jmeter会默认将其识别成int型数据,说明jmeter并不是默 ...

  8. jQuery 条件搜索查询 实时取值 升降序排序

    一.鼠标点击获取搜索条件中的被选中的值 创建方法  getAttrValue() 方法,每次的 .click 都要调用  function  getAttrValue(){} 例如,把选中的值给到属性 ...

  9. LINQ 用法,返回结果不是在定义时取值,而是在调用时实时取值,有意思!

    var names = new List<string> { "Nino o", "Alberto", "Juan", &quo ...

随机推荐

  1. ubuntu apt-get用法

    如何在ubuntu下面直接查找想要安装的软件?比如我想安装tomcat,但是我又不知道ubuntu里面有哪些版本,也不知道都需要装什么,但是我能确认我装的是tomcat,那么我就可以用搜索命令:例如: ...

  2. JAVA基础知识总结15(集合容器)

    集合框架:用于存储数据的容器. 1:对象封装数据,对象多了也需要存储.集合用于存储对象. 2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合.因为集合是可变长度的. 集合和数组的区别: 1: ...

  3. Windchill 设计变更流程卡死查询方法

    设计变更流程卡死查询方法 1. 导出设计变更表单查看填写了“需要”和“是”字眼的文本框  2.打开进程管理器显示流程卡死的地方,确定哪里出错导致没法执行下一步  3.打开设计变更流程图,里面可以查看有 ...

  4. codeforce469DIV2——D. A Leapfrog in the Array

    题意: 给出1<=n<=10^18和1<=q<=200000,有一个长度为2*n-1的数组,初始时单数位置存(i+1)/2,双数位置是空的.每次找出最右边的一个数将它跳到离它最 ...

  5. 关于sleep的理解

    unix是按时间片轮转调度, windows是抢占式调度 以吃蛋糕为例子,10个人吃蛋糕,如果是unix下, 假设开始时,每个人都处于就绪状态,那么操作系统调度大家排好队,按顺序吃,每个人吃1分钟, ...

  6. 由于挂载的nfs存储目录掉下线,导致创建VM时,无法创建

    具体错误,如下截图 重新挂载存储后,在创建VM,将成功

  7. 关闭是否只查看安全传送的网页内容提示框 和 是否允许运行软件,如ActiveX控件和插件提示框

    关闭是否只查看安全传送的网页内容提示框 最新编写 爬虫程序,运行程序后,电脑就总是出现下面这个提示框,一遍遍点"是"或"否"繁琐又麻烦.我看得有点不耐烦了.于是 ...

  8. Linux查看内存,负载状态

    Linux查看内存,负载状态 查看内存使用情况  www.ahlinux.com cat /proc/meminfo MemTotal:       16332644 kB MemFree:     ...

  9. Django框架 之 MTV模型、 基本命令、简单配置

    浏览目录 MTV模型 Django框架前奏 Django基础必备三件套 Djaogo基本命令 MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Te ...

  10. wireshark抓取qq数据包

    抓包接口设置成本地连接 点击start,登录qq,输入oicq进行过滤qq包 找到第一个OICQ,点击后,点击oicq-IM software 可以看到自己登录的QQ号码为765343409 本机IP ...