LoadRunner 7 脚本开发和常用函数

开发性能测试脚本原则.简单 正确 高效

在lr中,脚本运行是解释执行的。所以在运行时,需要先编译。

局部变量和全局变量

1、在init、action、end中定义的变量就是局部变量

2、在globals.h中定义的变量是全局变量

3、什么时候定义全局变量 ? 整个过程中固定不变的,例如URL地址、KEY、其他

int a=100;//这个a是文件级别的。除了globals.h 都可访问
Action()
{
    int a =10;
    int b =6; //在lr要使用变量,必须放在最上面。
    printf("%d",a);//c语言自带的打印函数不能用
    lr_output_message("%d",a);
    //int c =6;不支持其他位置定义变量
    return 0;
}
vuser_init()
{
    p=(char*)malloc(1024*sizeof(char)); //给p分配内存
    return 0;
}
Action()
{
    lr_output_message("hello");
    return 0;
}
vuser_end()
{
    free(p);
    return 0;
}

globals.h

#ifndef _GLOBALS_H
#define _GLOBALS_H

//--------------------------------------------------------------------
// Include Files
#include "lrun.h"
#include "web_api.h"
#include "lrw_custom_body.h"

//--------------------------------------------------------------------
// Global Variables

#endif // _GLOBALS_H
char *p ; //定义变量p
Action()
{
    //lr对指针的支持;
    char var =‘A‘;//定义字符
    char *s =&var;//定义指向字符的指针,取字符的地址
    char *name ="LoadRunner";//定义指针,将字符串赋值给指针。
    lr_output_message("var=%c",*s);//以字符的形式输出指针
    lr_output_message("name=%s",name);//以字符串的形式输出指针
    return 0;
}
Action2()
{
    char p[]={‘A‘,‘B‘,‘\0‘};//这种方式赋值,需要手动加上/0。因为输出的时候,只有遇到\0才结束.不加\0的话 会输出ABLoad Runner!!!。尽量不要用这种方式赋值
    char s[]="Load Runner!!!";//这种方式赋值,会自动加上\0
    lr_output_message("p=%s",p);
    lr_output_message("s=%s",s);

lr_output_message("%d",sizeof(s)); //返回15.多了一个看不到的\0。这个不建议用
      lr_output_message("%d",strlen(s)); //返回14。用这个。

return 0;
}
    char a[5] ="ABCDE";//因为定义的是5,所以自动加上的\0被丢了。所以还要往后打。应该把长度改成>5的数值。保证数据都能装下
    char b =‘a‘;
    lr_output_message("a数组的输出是:%s",a);
//运行结果:a数组的输出是:ABCDEa
//LR 对判断循环语句的支持
        int m=0;
        int n=5;
        int a[5]={1,2,3,4,5};
        int i=0;
        if(m==0){
            lr_output_message("m=0");
        }
        else
            { lr_output_message("m<>0");
        }
         lr_output_message("m++是:%d",m++);
         lr_output_message("++n是:%d",++n);
         for(i=0;i<5;i++){
             lr_output_message("a[%d]=%d",i,a[1]);
         }
         lr_output_message("*********************");
         while(n>0){
             lr_output_message("in while");
            n--;
         }

需要注意的事项:

1、注意中文的分号。注意全角半角

2、变量使用前尽量初始化。如果不初始化,可能是0,可能是空指针等。

3、字符数组尽量少用。尽量用字符串

-----------------------------------------------------------------------------------------------------

LoadRunner中的三种类型的函数:

a、通用函数 lr开头的(例如日志函数,思考时间函数...)

b、与编程语言相关的函数

c、与协议相关的函数

自定义函数

Action()
{
    vuser_init(); //action init end 都是函数。可以互相调用。
       lr_output_message("action");
    return 0;
}
Action()
{
    int a=1;
    int b=2;
    lr_output_message("a+b=%d",sum(a,b));
    return 0;
}
sum(int a,int b){
    return a+b;
}

将sum函数放入c:/a.h 文件中,在globals.h中加上#include "c:/a.h" 也可以正常调用。

或者 file-addfilesscript将a.h引用。并在action最上方引入#include "a.h" 这里不需要加路径,不需要加分号。

查某一个函数的帮助。F1

通用函数解析

lr_think_time()

lr_get_host_name( )

    char * my_host;
    my_host =lr_get_host_name();
    lr_output_message("%s",my_host);

lr_whoami()

int id, scid;
char *vuser_group;
lr_whoami(&id, &vuser_group, &scid);
lr_message( "Group: %s, vuser id: %d, scenario id %d",vuser_group, id, scid);

lr_get_attrib_string函数的使用

1)通过运行时设置使用

2)通过命令行

第一种使用方法:获取全局变量的值。

    char *p =lr_get_attrib_string("hello");
    lr_output_message("%s",p);
        //返回结果
        Action.c(13): (null)

设置hello的值

继续运行返回:Action.c(13): abcd

第二种使用方法:命令行传入。

LoadRunner错误机制解析

1、 LoadRunner错误处理机制 2、lr_continue_on _error函数解析

运行时,是mmdrv.ext进程执行脚本.

lr_continue_on _error 会覆盖运行时设置的设置。

lr_continue_on_error(1); 后面发生错误继续执行

lr_continue_on_error(0);后面发生错误结束执行

日志函数解析

lr_output_message 不仅在本地写,还会上传到主机、 lr_log_message 只在本地写 、 lr_message 、 lr_error_message区别

调试代码

1) F10 一步一步的执行 F9断点

2) 右键代码-- 可以选择快速打开脚本目录

3) 右键代码-- 可以选择快速定位到回放日志的地方

与编程语言相关的函数(可在文档中查到。)

1) strcpy 拷贝一个字符串到另一个字符串 与 strcat 连接2个字符串

Action()
{
    char fullpath[1024],*filename ="logfile.txt";
    strcpy(fullpath,"c:\\tmp"); //拷贝一个字符串到另一个字符串中。在头进行添加
    lr_output_message("fullpath after strcpy:%s",fullpath);
    strcat(fullpath,"\\"); //连接2个字符串,在尾进行添加
    strcat(fullpath,filename);
    lr_output_message("Full path of file is %s",fullpath);
    return 0;
}
//运行结果
Action.c(5): fullpath after strcpy:c:\tmp
Action.c(8): Full path of file is c:\tmp\logfile.txt

2) strcmp函数

3) atoi函数解析

atoi 类型转换 前面是数字进行转换,后面不是的进行丢弃。

Action()
{
    int i=0;
    char *s="7元";
    i = atoi(s); // 类型转换 前面是数字进行转换,后面不是的进行丢弃。
    lr_output_message("price $%d",i);
    return 0;
}
//运行结果
Action.c(6): price $7

4)sprinf 将字符串组合成特定的格式

Action()
{
    int index =56;
    char filename[64],*suffix="txt";
    sprintf(filename,"log_%d_%s",index,suffix);
    lr_output_message("the new file name is %s",filename);
    return 0;
}
//执行结果Action.c(6): the new file name is log_56_txt

5) time  以秒的形式,返回197001010000到现在的时间差。

Action()
{
    typedef long time_t;
    time_t t;
    lr_message ("Time in seconds since 1/1/70: %ld\n", time(&t));
    lr_message ("Formatted time and date: %s", ctime(&t));
    return 0;
}
运行结果:Time in seconds since 1/1/70: 1498489129
Formatted time and date: Mon Jun 26 22:58:49 2017

6) 文件操作.

与协议相关的函数

1)web_link 与 web_url (都是get)

2)web_submit_form 与 web_submit_data (都是POST) web_submit_form中的hidden自动发送

3)web_custom_request 自定义请求,可上传文件。

z4)web_add_header 添加指定的头给下一个http请求。web_add_auto_header 下面所有的请求都加上

Action()
{
    web_add_header("ggg", "myLoadRunner");
    web_url("WebTours",
        "URL=http://127.0.0.1:1080/WebTours/",
        "Resource=0",
        "RecContentType=text/html",
        "Referer=",
        "Snapshot=t10.inf",
        "Mode=HTTP",
        LAST);
    return 0;
}
//运行结果
Action.c(4):     ggg: myLoadRunner\r\n

5)web_get_int_property 拿到HTTP request的返回信息

int HttpRetCode;
web_url("my_home",
    "URL=http://my_home",
    "TargetFrame=_TOP",
    LAST );
HttpRetCode = web_get_int_property(HTTP_INFO_RETURN_CODE);
if (HttpRetCode == 200)
    lr_log_message("The script successfully accessed the My_home home page");
    else
    lr_log_message("The script failed to access the My_home home page ");
} 

需要注意的

在脚本的任何系统函数中,都不能使用C语言函数。在系统函数之间可以任意使用C元素。如果在函数中药使用C语言的变量,LR提供参数化的功能。

DLL解析

lr_load_dll 加载一个外部的dll

vuser_init()
{
   lr_load_dll("c:\\md5.dll"); //md5.dll,自己准备。有一个方法Calculate,将字符串用MD5加密
    return 0;
}
Action()
{
    char *p="myLoadRunner";
    int len =strlen(p);
    char *result=(char *)Calculate(p,len);
    lr_output_message("MD5的结果是:%s",result);
    return 0;
}
//返回MD5加密的字符串
时间: 2024-10-10 20:23:24

LoadRunner 7 脚本开发和常用函数的相关文章

iOS开发之----常用函数和常数

介绍一下Objective-c常用的函数,常数变量 算术函数 [算术函数] 函数名 说明 int rand() 随机数生成.(例)srand(time(nil)); //随机数初期化int val = rand()P; //0-49之间的随机数 int abs(int a) 整数的绝对值(例)int val = abs(-8); →8※浮点数的时候用fabs. double fabs(double a) 浮点数的绝对值(例)double val = fabs(-12.345); →12.345※

IOS开发之----常用函数和常数--秀清

介绍一下Objective-c常用的函数,常数变量 算术函数 [算术函数] 函数名 说明 int rand() 随机数生成.(例)srand(time(nil)); //随机数初期化int val = rand()P; //0-49之间的随机数 int abs(int a) 整数的绝对值(例)int val = abs(-8); →8※浮点数的时候用fabs. double fabs(double a) 浮点数的绝对值(例)double val = fabs(-12.345); →12.345※

php开发之常用函数

在日常开发中,使用自带的函数会比我们自己造的轮子更好用,更高效,所以就总结了一下,开始撸起来!!! 1. gethostbyname 返回主机名对应的 IPv4地址 function host2ip($host) { $host=trim($host.'.'); $ip= gethostbyname($host); return $ip == $host ? '' : $ip; } 原文地址:https://www.cnblogs.com/xingxia/p/php_functions.html

LR脚本示例之常用函数

1.变量和参数的设置 //将IP地址和端口放入到参数中lr_save_string("127.0.0.1:1080","ip"); //退出脚本建议使用lr_exitlr_exit(LR_EXIT_VUSER,LR_PASS); //计算变量数组的元素个数int arr_m1[100]; int len1=0len1=sizeof(arr_m1)/sizeof(int); //返回字符串的长度char *tempStr="test is a house&q

SecureCRT脚本编写常用函数(一)

SecureCRT脚本编写常用函数(一) 测试 python 引言 在测试网络设备中,通常使用脚本对设备端进行配置和测试以及维护:对于PE设备的测试维护人员来说使用较多是SecureCRT工具:SecureCRT支持VB.JavaScript.Python等多种脚本语言,为了实现脚本在CRT中更加丰富稳定地执行,掌握CRT的常用函数是非常有用的.接下来的时间我将对SecureCRT脚本编写的常用函数展开学习应用. 索引 本阶段重点对SecureCRT中Screen相关函数进行学习,针对Pytho

【COCOS CREATOR 系列教程之二】脚本开发篇&事件监听、常用函数等示例整合

[Cocos Creator ](千人群):  432818031 上一篇,介绍了Himi在使用过cc所有组件后的一篇总结,没有具体介绍每个组件的原因在于官方文档很齐全,而且也有视频的介绍. 所以希望童鞋们可以把我这两篇博文当成对组件.脚本两部分开发的整理与总结. 后续的文章,Himi应该主要更新一些官方还未补充或者还没有的教程.避免无用功. 下面直接放出代码,因为不是很难理解.所以不再一一赘述,都是常用的函数.事件监听.动作回调.定时器等开发过程中必接触的. 大致内容如下: cc 属性介绍 获

LoadRunner中常用函数参考手册

基础篇1:LoadRunner中常用函数参考手册 常用函数列表 web_url web_submmit_form VS web_submmit_data VS web_custom_request web_custom_request web_concurrent_start(NULL); web_concurrent_end(NULL); ============================分割线================================ 1. web_url Loa

loadrunner 脚本开发-参数化之将内容保存为参数、参数数组及参数值获取

转自:http://blog.sina.com.cn/s/blog_13cc013b50102v49c.html(查看原文) 在VuGen中默认使用{}的字符串称为参数 注意:参数必须在双引号中才能用 将字符串保存为参数 lr_save_string("string you want to save", "arg_name"); 举例:用参数来替换需要打开的url链接 Action2() { lr_save_string("http://172.25.75

Web常用函数介绍(LoadRunner相关)

介绍大纲:1. web_url2. web_image3. web_link4. web_submmit_form 详细介绍: 一. web_url web_url 语法: Int Web_url(const char *name, const char * url, <Lists of Attributes>, [EXTRARES,<Lists of Resource Attributes>,LAST) 返回值 成功时返回LR_PASS (0),失败时返回 LR_FAIL (1)