LoadRunner 脚本开发和常用函数
开发性能测试脚本原则.简单 正确 高效
在lr中,脚本运行是解释执行的。所以在运行时,需要先编译。
局部变量和全局变量
1、在init、action、end中定义的变量就是局部变量
2、在globals.h中定义的变量是全局变量
3、什么时候定义全局变量 ? 整个过程中固定不变的,例如URL地址、KEY、其他
int a=100;//这个a是文件级别的。除了globals.h 都可访问
Action()
{
int a =;
int b =; //在lr要使用变量,必须放在最上面。
printf("%d",a);//c语言自带的打印函数不能用
lr_output_message("%d",a);
//int c =6;不支持其他位置定义变量
return ;
}
vuser_init()
{
p=(char*)malloc(*sizeof(char)); //给p分配内存
return ;
}
Action()
{
lr_output_message("hello");
return ;
}
vuser_end()
{
free(p);
return ;
} 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 ;
}
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 ;
}
char a[] ="ABCDE";//因为定义的是5,所以自动加上的\0被丢了。所以还要往后打。应该把长度改成>5的数值。保证数据都能装下
char b ='a';
lr_output_message("a数组的输出是:%s",a);
//运行结果:a数组的输出是:ABCDEa
//LR 对判断循环语句的支持
int m=;
int n=;
int a[]={,,,,};
int i=;
if(m==){
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=;i<;i++){
lr_output_message("a[%d]=%d",i,a[]);
}
lr_output_message("*********************");
while(n>){
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 ;
}
Action()
{
int a=;
int b=;
lr_output_message("a+b=%d",sum(a,b));
return ;
}
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(): (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[],*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 ;
}
//运行结果
Action.c(): fullpath after strcpy:c:\tmp
Action.c(): 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 =;
char filename[],*suffix="txt";
sprintf(filename,"log_%d_%s",index,suffix);
lr_output_message("the new file name is %s",filename);
return ;
}
//执行结果
Action.c(): 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 ;
}
运行结果:
Time in seconds since //:
Formatted time and date: Mon Jun ::
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 ;
}
//运行结果
Action.c(): 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 == )
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 ;
}
Action()
{
char *p="myLoadRunner";
int len =strlen(p);
char *result=(char *)Calculate(p,len);
lr_output_message("MD5的结果是:%s",result);
return ;
}
//返回MD5加密的字符串
LoadRunner 脚本开发和常用函数的更多相关文章
- Loadrunner 脚本开发-利用web_submit_data函数实现POST请求
脚本开发-利用web_submit_data函数实现POST请求 by:授客 QQ:1033553122 概述 web_link()和web_url()函数都是页面访问型函数,实现HTTP请求中的 ...
- Loadrunner 脚本开发-利用web_custom_request函数进行接口测试
脚本开发-利用web_custom_request函数进行接口测试 by:授客 QQ:1033553122 一.POST + JSON格式参数 例: web_custom_request(" ...
- loadrunner 脚本开发-参数化之将内容保存为参数、参数数组及参数值获取
转自:http://blog.sina.com.cn/s/blog_13cc013b50102v49c.html(查看原文) 在VuGen中默认使用{}的字符串称为参数 注意:参数必须在双引号中才能用 ...
- Loadrunner脚本开发规范
Loadrunner脚本开发规范 目录 1.一般约定... 3 2.代码注释约定... 4 3.格式化代码... 5 1.一般约定 1.1具体脚本规则,必须在具体代码中加注释,以便脚本开发人员阅读和理 ...
- iOS开发之----常用函数和常数
介绍一下Objective-c常用的函数,常数变量 算术函数 [算术函数] 函数名 说明 int rand() 随机数生成.(例)srand(time(nil)); //随机数初期化int val = ...
- Loadrunner 脚本开发-soap_request函数介绍及WebService接口测试
脚本开发- soap_request函数介绍及WebService接口测试 by:授客 QQ:1033553122 函数介绍 soap_request 函数执行一个SOAP请求 函数原型 int so ...
- loadrunner 脚本开发-web_custom_request函数详细介绍
脚本开发-web_custom_request函数详细介绍 by:授客 QQ:1033553122 c语言版本: int web_custom_request(const char *RequestN ...
- loadrunner 脚本开发- web_url函数详解
脚本开发- web_url函数详解 by:授客 QQ:1033553122 加载指定url的web页面(GET请求) C语言函数 int web_url( const char *StepName ...
- loadrunner 脚本开发-基本知识
脚本开发-基本知识 1)编码工具设置 自动补全输入Tools->General Options->Environment->Auto complete word 显示功能语法Tool ...
随机推荐
- Python 把二进制mnist数据库转换为图片
mnist数据库可以通过caffe里的get_mnist.sh文件下载,路径是: caffe-master/data/mnist/get_mnist.sh,get_mnist.sh内容如下: #!/u ...
- "==" 与 "is"的区别
Is there a difference between `==` and `is` in Python? "=="是比较内容相当;"is"是比较对象的id是 ...
- python之Beautiful Soup库
1.简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索 ...
- LG4779 【模板】单源最短路径(标准版)
题意 给定一个 \(N\) 个点,\(M\) 条有向边的带非负权图,请你计算从 \(S\) 出发,到每个点的距离. 数据保证你能从 \(S\) 出发到任意点. \(1≤N≤100000\): \(1≤ ...
- goreplay(gor) golang 流量拷贝工具试用
1. 项目地址 https://github.com/buger/goreplay 2. 安装 wget https://github.com/buger/goreplay/releases/down ...
- Yii CDbCriteria类中方法
$criteria = new CDbCriteria; //select $criteria->select = '*';//默认* $criteria->select = 'id,na ...
- aspupload ,在winows server 2008 下无法使用
aspupload ,在winows server 2008 下无法使用.求助解决办法 2014-01-12 13:31 goolean | 浏览 775 次 操作系统 aspupload64位,安装 ...
- (转)从android一个apk中启动第三方apk应用
从android一个apk中启动第三方apk应用 我们在开发中,经常遇到遇到在一个apk中要去运行另外一个apk,就像我们windows一样,搞一个快捷方式一样,那怎么实现呢? 问题的核心点在于我们要 ...
- flask 之 mongodb
查看mongod 是否启动,启动了会显示进程ID和程序名 pgrep mongod -l 查找mongod的位置whereis mongod 或locate mongod 启动mongodmongod ...
- PMODB GT202 WIFI的使用
pHTTPSession = (P_HTTP_SESSION)malloc(ALIGN(sizeof(HTTP_SESSION))) PMODA/PMODB都可做WIFI使用,现介绍PMODB WIF ...