zoukankan      html  css  js  c++  java
  • Loadrunner C 编程_1

    就目前的了解。Loadrunner的脚本语言其实和C没什么区别。他内部的好多机制都是C实现的。

    不过是一种“类C”

    所以我从几个方面分析

    1:定义常量变量和C一样

    2:在LR中,C的变量和LR的参数是不一样的。
        任何C的变量都不能被LR的函数直接调用。
        应该用lr_eval_string来取值。
        比如{NewParam}(LR中参数化的变量)直接用这个引用是没有问题的。

    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.

  • 相关阅读:
    【实战Java高并发程序设计 3】带有时间戳的对象引用:AtomicStampedReference
    【实战Java高并发程序设计 2】无锁的对象引用:AtomicReference
    access 数据库创建表SQL语法
    如何提高储存卡的读写速度
    SQL 删除重复记录,并保留其中一条
    arcgis for android100.x 禁止地图旋转
    Android中刷新Invalidate和postInvalidate的区别
    Android Studio Gradle配置工具开发
    oracle数据库被注入恶意攻击程序导致tab$被删除恢复方案
    使用Oracle BBED修改Oracle11g数据库实例名称
  • 原文地址:https://www.cnblogs.com/shengs/p/3842568.html
Copyright © 2011-2022 走看看