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

今天琢磨了一下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.
原文地址:https://www.cnblogs.com/qmfsun/p/4479957.html