一、参数:

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

今天琢磨了一下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***************************/   这段代码,虽然很简单,但已含概了变量与参数的转化与输出。
就目前的了解。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.

LR参数和变量的更多相关文章

  1. LoadRunner 参数和变量的区别(未完)

    挺久没来更新了,坚持是件不容易的事呢,之后坚持每天总结下前一天的学习点 在LR中,参数是一种更高级的变量,他们能起到同样的效果,但同时也有几点不同 1. 定义方法不同 (这个还没看懂) 2. 调用语法 ...

  2. LoadRunner中的参数与变量

    在LoadRunner脚本开发中,经常会遇到参数与变量相互转换的情况,本文对常见的转换情形进行了方法总结. 1.变量的赋值 //将字符串赋值给变量 ]; strcpy(strTemp, "H ...

  3. LR参数组取值操作方法

    LR参数组取值操作方法 奶奶的,每次都要重写一次,粘这里,以后备用.这个使用频率高. Action(){//定义一个变量int rNum; //关联参数组,前提是请求的页面中,存在参数组web_reg ...

  4. LoadRunner中的参数与变量-产生20位的随机数

    LoadRunner中的参数与变量-产生20位的随机数 在LoadRunner脚本开发中,经常会遇到参数与变量相互转换的情况,本文对常见的转换情形进行了方法总结. 1.变量的赋值 //将字符串赋值给变 ...

  5. lr参数与C语言函数参数的区别

    C变量不能再lr函数中使用: c变量必须定义在lr函数之前: LR参数可以在LR函数中直接当做字符串使用. LR参数是lr自己封装的一个钟对象, LR参数的表达方式:{ParamName}

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

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

  7. Execute SQL Task 参数和变量的映射

    Execute SQL Task能够执行带参数的SQL查询语句或存储过程(SP),通过SSIS的变量(Variable)对参数赋值.对于不同的Connection Manager,在Task中需要使用 ...

  8. RGB颜色中的参数是变量的时候,为什么要加上两个+号在左右?

    <script> function draw(){ var c=document.getElementById("mycanvas"); var cxt=c.getCo ...

  9. vue写请求接口--请求参数的变量要在return里面声明

    //谨记return里面是返回所有声明的变量的名字,数组以及对象等等 export default { data () { return { //所有的变量都是写在data 的return里面的,主要 ...

随机推荐

  1. 洛谷P1588 丢失的牛

    P1588 丢失的牛 158通过 654提交 题目提供者JOHNKRAM 标签USACO 难度普及/提高- 时空限制1s / 128MB 提交  讨论  题解 最新讨论更多讨论 答案下载下来是对的,但 ...

  2. php使用 SImpleXMLElement 把 xml 和 数组 互转

    <?php $xml = <<<XML <xml> <ToUserName><![CDATA[toUser]]></ToUserNam ...

  3. 2015/10/9 Python基础(21):可调用和可执行对象

    在Python中有多种运行外部程序的方法,比如,运行操作系统命令或另外的Python脚本,或执行一个磁盘上的文件,或通过网络来运行文件.这完全取决于想要干什么.特定的环境包括: 在当前脚本继续运行 创 ...

  4. JAVA多线程提高九:Semaphere同步工具

    java 中Semaphere可类比操作系统信号量,硬件资源如IO.内存.磁盘等都是有固定量的,多个程序需要竞争这些资源,没有资源就需要被挂起. 一.类和方法摘要 构造函数: public Semap ...

  5. Android Studio 更新失败的解决办法

    编辑$ANDROID_STUDIO_HOME/bin/ 下的 studio.exe.vmoptions(如果系统用的Ubuntu,文件应该是studio.vmoptions或者如果是64位系统,应该是 ...

  6. logstash 收集 IIS 日志实践

    IIS日志示例: 2017-02-20 00:55:40 127.0.0.1 GET /MkWebAPI/swagger/ui/index - 80 - 127.0.0.1 Mozilla/5.0+( ...

  7. DELPHI中的快捷方式一览(完全版)

    1.SHIFT+鼠标左键    先选中任一控件,按键后可选中窗体(选中控件后按Esc效果一样)2.Shift+F8          调试时弹出CPU窗口.3.Shift+F10         等于 ...

  8. 《JavaScript 实战》:JavaScript 实现图片切割效果

    很久之前就在一个网站的截取相片的功能中看到这个效果,也叫图片裁剪.图片剪切(设置一下也可以做出放大镜等类似的效果).当时觉得很神奇,碍于水平有限,没做出来.前些日子突然想做一个透镜效果,就突然想到了这 ...

  9. 【NOIP】普及组2009 细胞分裂

    [算法]数论 [题解]均分的本质是A整除B,A整除B等价于A的质因数是B的子集. 1.将m1分解质因数,即m1=p1^a1*p2^a2*...*pk^ak 所以M=m1^m2=p1^(a1*m2)*p ...

  10. webpack编译报错:Module not found: Error: Cannot resolve 'file' or 'directory' ./../../node_modules..

    在同事的mac电脑上,可以正常编译,拿到我这边就出错了(⊙﹏⊙) 好像是webpack在window下的一个bug,需要让 webpack 和你的项目保持在一个盘符下,参考. 解决方法: 修改conf ...