• 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.
    
  • 相关阅读:
    判断ios版本
    DBL_EPSILON和 FLT_EPSILON的用法
    __bridge,__bridge_retained和__bridge_transfer的意思,区别与使用
    ios俩个APP之间跳转、传值,以及直接跳转到指定app页面 或者 app 评价页面 的方法
    如何参与GitHub开源项目
    第202题:快乐数
    第217题:存在重复元素
    第234题:回文链表
    第242题:有效的字母异位词
    JAVASRIPT
  • 原文地址:https://www.cnblogs.com/qmfsun/p/4479957.html
Copyright © 2020-2023  润新知