Jmeter函数作用域实时取值覆盖[针对HTTP Request等控制器]

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

细节的作用域覆盖

原文地址:https://www.cnblogs.com/a00ium/p/10528504.html

时间: 2024-10-13 12:49:50

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

javascript--函数定义与函数作用域--详解

最近在学习javascript的函数,函数是javascript的一等对象,想要学好javascript,就必须深刻理解函数.本人把思路整理成文章,一是为了加深自己函数的理解,二是给读者提供学习的途径,避免走弯路.内容有些多,但都是笔者对于函数的总结. 1.函数的定义 1.1:函数声明 1.2:函数表达式 1.3:命名函数的函数表达式 1.4:函数的重复声明 1.5:不能在条件语句中声明函数 2.函数的部分属性和方法 2.1:name属性 2.2:length属性 2.3:toString()方

python函数作用域简介

1.定义:函数中变量取值的地方:2.函数中的变量名除了特殊声明为全局变量或本地变量,否则均为局部变量:3.变量的作用域解析原则:LEGB原则,即:?变量名引进分为三个作用域进行查找,首先是本地,再是函数内(如果存在),之后才是全局变量,最后是内置作用域(内置作用域:内置函数所在模块的范围):?在默认情况下,变量名赋值会创建或者改变本地已有的变量:?全局声明或非本地变量声明会将赋值的变量名映射到模块文件的内部作用域:LEGB机制:?Python搜索的四个作用域,最先是本地作用域(L):之后是上一层

loadrunner动态从mysql取值

loadrunner动态从mysql取值 loadrunner动态从mysql取值 [需要下载跟数据库服务器一致的dll,32位或64位] loadrunner中有参数化从数据库中取值,但是只是静态的,对于一些要实时取值的数据就game over了,比如取短信验证码,因为MySQL中有一个libmysql.dll,里面提供了可以操作数据库的方法,所以我们可以调用这个dll连接数据库实时从数据库中取值 1 Action() 2 { 3 4 int status; //定义状态变量,0表示成功,非0

Mvc4_传值取值应用

Mvc路由运行机制:   首先,Web 浏览器向服务器发送一条URL 请求,如http://HostName/ControllerName/ActionName/Parameters. 其次,请求被ASP. NET MVC 的路由映射系统获取, 并按照映射规则, 解析出 ControllerName,ActionName 和Parameters: 再次,到Controllers 目录下找到ControllerNameController.cs 类, 并在这个类中找到与 ActionName 同名

SSH中各种形式的取值方式

现在这个项目是用SSH来开发的,遇到很多取值方式,在此总结一下,因为一直在用,很容易弄混,取值有问题: JSP通过url参数值取值: 例如:http://127.0.0.1:8080/portal/login!toAddPag.action?keyCode=1234555 通过以下语句取值: <% String keyCode=request.getParameter("keyCode"); %> 在页面中显示值:有以下两种方式: 第一: <%=keyCode  %&

jmeter参数化随机取值实现

jmeter能用来做参数化的组件有几个,但是都没有随机取值的功能,遇到随机取值的需求怎么办呢? 突发奇想,可以用函数__CSVRead()来实现: __CSVRead() CSV file to get values from | *alias:表示要读取的文件路径 CSV文件列号| next| *alias:表示当前变量读取第几列数据,注意第一列是0: 由此可见我们只需将参数化数据在csv中横向排列,然后用随机函数__Random()指定文件序列号即可. ${__CSVRead(D:\t.tx

ThinkPHP源码学习 cookie函数 设置 取值 删除

/** * Cookie 设置.获取.删除 * @param string $name cookie名称 * @param mixed $value cookie值 * @param mixed $option cookie参数 * @return mixed */ 系统内置了一个cookie函数用于支持和简化Cookie的相关操作,该函数可以完成Cookie的设置.获取.删除操作. Cookie设置 cookie('author','津沙港湾','3600'); 执行代码段 $expire =

linux shell自定义函数(定义、返回值、变量作用域)介绍

http://www.jb51.net/article/33899.htm linux shell自定义函数(定义.返回值.变量作用域)介绍 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1.可以带function fun() 定义,也可以

转 linux shell自定义函数(定义、返回值、变量作用域)介绍

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1.可以带function fun() 定义,也可以直接fun() 定义,不带任何参数. 2.参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值. retu