LR参数和变量
一、参数:
1. 在LR函数中可以直接使用参数。参数必须在双引号“”中才能应用。大部分情况下,可以直接用参数代替函数中双引号内的数据。如下使用方法:
lr_save_string("http://www.baidu.com","url"); web_url("test","URL={url}",LAST);
2. 参数是全局的,同一个脚本的任何一个action都能使用。
3. 在VuGen中,默认带有{}的字符串为参数。
4. 将一个字符串、数字、日期写入一个参数保存的函数分别为:lr_save_string(); lr_save_int(); lr_save_datetime();
5. 参数数组(LR9.x后出现)的三个函数:
lr_paramarr_len("param_name");参数数组的长度。(既param_name_count) lr_paramarr_idx("param_name",i);数组中编号为i的参数值。 lr_paramarr_random("param_name");数组中随机一个参数值。
二、变量
1. 变量是C语言的,无法直接运用在系统函数中。如下使用方法:
char url[100]; strcpy(url,"URL=http://www.baidu.com"); web_url("test",url,LAST);
2. 变量是局部的,只能在定义的那个action中使用。要是希望整个脚本共用,则应该在globals.h中定义变量。
三、参数与变量的使用方法
1. 字符型变量和参数的转换
lr_save_string("teststring","param"); 将字符串teststring保存到参数param中 lr_eval_string("{param}"); 取出参数param中的值
2. 整型变量和参数的转换
int x; x = 10; lr_save_int(x,"param"); 将整形变量保存到参数param中 x = atoi(lr_eval_string("{param}")); 取出参数param中的数值保存到变量x
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 今天琢磨了一下LoadRunner的变量、参数的输出与相互转化的问题,写一例题: /********** 参数和变量传递 ***********/ Variable( ) { char * ip = lr_get_vuser_ip(); //获取当前用户的IP地址,保存在IP变量里。 char * gname = lr_get_host_name (); //获取当前用户的机器名,保存在GNAME变量里。 if (ip) /* 参数转变量 */ //RunTime是已定义的参数,下文也可以直接调用 lr_vuser_status_message( "Ip地址: %s ,参数 : %s" ,ip,lr_eval_string( "{RunTime}" )); else lr_vuser_status_message( "未启动IP欺骗……" ); /* 变量转参数 */ lr_save_string(gname, "GN" ); //把变量IP存在“GN”参数里,下文可以直接用 {GN} 调用。 /* 参数输出 */ web_submit_data( "StatusReporter" , "Name=title" , "Value={RunTime}" , ENDITEM, "Name=content" , "Value={GN}" , ENDITEM, LAST); /* 变量输出 */ lr_output_message( "当前IP地址: %s " ,ip); lr_think_time(2); //停顿两秒便于观察。 return 0; } /*********************END***************************/ 这段代码,虽然很简单,但已含概了变量与参数的转化与输出。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 | 就目前的了解。Loadrunner的脚本语言其实和C没什么区别。他内部的好多机制都是C实现的。 不过是一种“类C” 所以我从几个方面分析 1:定义常量变量和C一样 2:LR函数的参数使用与C有点不一样, 在LR中,C的变量和LR的参数是不一样的。 任何C的变量都不能被LR的函数直接调用。 应该用lr_eval_string来取值。 3:什么循环语句,选择语句都和C一样 4:一些函数的定义和C不一样。虽然名字一样,参数有不同 5: 输入输出也有些不同。 所以重点要突破的地方就是理清参数和变量直接的关系。和多熟悉一LR些函数,其他就是C语言的知识了。 lr它有自己管理的变量,也叫参数,这种参数只能通过reg或者lr_save_方式定义,或者通过文件定义. 1.参数的赋值和取值 lr_save_string( "hello world" , "param" ); lr_eval_string( "{param}" ); 2.变量到参数 int x; x=10; lr_save_string(x, "param" ); lr_eval_string( "{param}" ); 3.变量读参数 char x[100]; x= "{param}" ; lr_save_string( "hello world" , "param" ); lr_eval_string(x); LoadRunner没有提供对参数的算术运算的函数。所以LR的参数必须: 1) 转换成C的整数 2) 使用C的函数来运算最后返回一个C的字符串 3) 把返回的字符串保存成参数 view plaincopy to clipboardprint? // 1. 转换成C的整数: i = atoi( lr_eval_string( "{pNum_in}" ) ); // 2. 使用C的函数来运算最后返回一个C的字符串: sprintf( cBuf, "%d" , i+1); // 3.把返回的字符串保存成参数: lr_save_string( cBuf, "pNum_out" ); // 1. 转换成C的整数: i = atoi( lr_eval_string( "{pNum_in}" ) ); // 2. 使用C的函数来运算最后返回一个C的字符串: sprintf( cBuf, "%d" , i+1); // 3.把返回的字符串保存成参数: lr_save_string( cBuf, "pNum_out" ); lr_eval_string() 函数的主要作用:返回脚本中的一个参数当前的值, 返回值类型: char 一般多用在调试脚本时输出参数的值.具体用法如下: lr_output_message( "The parameter1's value is %s" ,lr_eval_string( "{parameter1}" )),其中参数parameter1在之前已经定义了的参数 lr_log_message(lr_eval_string( "{parameter1}" )) 在LR中,C的变量和LR的参数是不一样的。 任何C的变量都不能被LR的函数直接调用。 应该用lr_eval_string来取值。 比如{NewParam}(LR中参数化的变量)直接用这个引用是没有问题的。 但是如果如下: Action() { char a[10]; strcpy(a, "{NewParam}" ); lr_message(a); return 0; } 这就不对了。 lr_message(a);就会报错。 但是写成lr_message(lr_eval_string(a));就可以。 因为这里的值已经取出来了。 ********** 参数和变量传递 ***********/ Variable( ) char * ip =lr_get_vuser_ip(); //获取当前用户的IP地址,保存在IP变量里。 char * gname =lr_get_host_name(); //获取当前用户的机器名,保存在GNAME变量里。 if (ip) /* 参数转变量 */ //RunTime是已定义的参数,下文也可以直接调用 lr_vuser_status_message( "Ip地址: %s ,参数 : %s" ,ip,lr_eval_string( "{RunTime}" )); else lr_vuser_status_message( "未启动IP欺骗……" ); /* 变量转参数 */ lr_save_string(gname, "GN" ); //把变量IP存在“GN”参数里,下文可以直接用 {GN} 调用。 /* 参数输出 */ web_submit_data( "StatusReporter" , "Name=title" , "Value={RunTime}" ,ENDITEM, "Name=content" , "Value={GN}" ,ENDITEM, LAST); /* 变量输出 */ lr_output_message( "当前IP地址: %s " ,ip); lr_think_time(2); //停顿两秒便于观察。 return0; } 最初我想实现用web_reg_save_param()取到的数保存在数组中,并lr_eval_string()来显示数组中的各个元素。代码如下: web_reg_save_param( "test" , "LB=" , "RB=" , "ORD=All" ,LAST); web_url(); count = lr_eval_string( "{test_count}" ); for (i=1;i<=count,i++) sprintf(str,lr_eval_string( "{test_%d}" ),i); 但是每次得到的数据总是 str = test_1 test_2.....都不是数组中的元素。 其实这个问题就是没有搞懂lr中内部参数和外部参数的区别 web_reg_save_param()中取到的数组,是属于lr的内部函数,在其内部函数中再使用变量,即(test_%d,i),是不能直接取到元素的值。这个中间必须要通过变量(外部变量)来传递。 上述代码改为: web_reg_save_param( "test" , "LB=" , "RB=" , "ORD=All" ,LAST); web_url(); count =atoi( lr_eval_string( "{test_count}" )); for (i=1;i<=count,i++) { sprinf(tmp, "{test_%d}" ,i); sprintf(str,lr_eval_string(tmp)); } 这样就能实现了。 lr_save_string The lr_save_string function assigns the specified null -terminated string to a parameter. This function is useful in correlating queries. To determine the value of the parameter, use the lr_eval_string function. |
作者:Agoly 出处:https://www.cnblogs.com/qmfsun/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 如果文中有什么错误,欢迎指出。以免更多的人被误导。 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!