本文介绍LoadRunner性能测试工具的C语言脚本开发中常用到的几个方法:
一、事务和事务控制函数的使用案例:如何自己获取DuringTime和WastedTime
a) 定义临时变量存储数据double duringTime;
double wastedTime; |
b) 调用方法获取两个值(在事务中,值稍微比事务时间小,位置灵活)duringTime=lr_get_transaction_duration("login");
wastedTime=lr_get_transaction_wasted_time("login"); |
c) 输出结果lr_output_message("The duration time is %f seconds",duringTime);
lr_output_message("The duration time is %f seconds",wastedTime); |
二、文件操作方法的使用:
(变量放在文件的开头位置)案例:文件的创建、读写操作(如果已存在的文件,打开文件,写入数据,关闭文件;如果文件不存在,创建文件并写入数据,关闭文件流,结束)
使用的方法:long fopen( const char *filename, const char *access_mode);
char *fileName="d:\\123.log";//c盘符需要有管理员的权限long fileStream;//vugen中特有的,与标准c语言有差异。
if((fileStream=fopen(fileName,"a+"))==NULL){ lr_output_message("你打开的文件不存在,打开出现错误"); return -1; } fprintf(fileStream,"Hello world!!!!\n"); fclose(fileStream); |
三、系统信息函数的使用案例1:获取每个虚拟用户信息,在vugen中可以返回-1,none,0;可以借助File的操作将信息写入日志文件
void lr_whoami (int *vuser_id, char **sgroup, int *scid);
参数说明:【int *vuser_id】需先注册,保存正在运行的vuser的ID,在虚拟用户生成器(Virtual User Generator)中回放返回-1
【char **sgroup】需先注册,保存正在运行的vuser的组名(脚本名),在虚拟用户生成器(Virtual User Generator)中回放返回None
【int *scid】需先注册,保存正在运行的Scenario的ID,在虚拟用户生成器(Virtual User Generator)中回放返回0
函数使用技巧:
函数的所有参数都为必须,其中vuser_id、scid两个整形的变量,如果不需要返回则直接用NULL替换即可
例:lr_whoami (&myid,&mygroup,NULL); //就用NULL把scid的变量替换掉了,也就不保存scid了
a)定义变量名
int id; int cid; char* group; |
b)调用方法
lr_whoami(&id,&group,&cid); |
c)输出结果:
lr_output_message("%d,%d,%s",id,cid,group); |
案例2:返回执行Vuser脚本的主机名及运行controller的主机名
涉及到的方法分别是:lr_get_host_name及lr_get_master_host_name
lr_get_host_name格式:Return Values:这个函数成功的返回值是该主机的名字,失败的返回值是空;这个返回值是指向一个静态数据并且不能修改的只读模式
Parameterization:该函数不能被参数化
C语言的格式是:char *lr_get_host_name();
Java语言的格式是:String lr.get_host_name();
a)定义变量
char* myHost; |
b)调用方法
myHost=lr_get_host_name(); |
c)输出结果
lr_output_message("my host is : %s",myHost); |
lr_get_master_host_name获取controller的主机名,自己尝试使用。
四、字符串函数的使用案例1:获取当前日期,并打印到日志中(lr_save_datetime)
lr_save_datetime的格式如下:
void lr_save_datetime(const char *format, int offset, const char *name); |
lr_save_datetime将当前日期和时间,或具有指定偏移的日期和时间保存在参数中。如果达到MAX_DATETIME_LEN个字符,结果字符串将被截断。
参数说明:
1)const char *format格式化信息,同fopen、lr_message等相同;例如:"the first is %s"
2)int offset:时间的偏移量:DATE_NOW(现在的日期)
TIME_NOW(现在的时间)
ONE_DAY(一天的时间)
ONE_HOUR(一小时的时间)
ONE_MIN(一分钟的时间)
需要注意的是,时间的偏移量可以使用公式,例如:DATE_NOW+ONE_DAY, 这样,我们就可以取得昨天、明天的日期了:DATE_NOW-ONE_DAY(昨天)
DATE_NOW+ONE_DAY(明天)
那么,我们就可以使用如下表示得到前天的日期:lr_save_datetime("%Y-%B-%d",DATE_NOW-2*(ONE_DAY),"abc");
lr_save_datetime("%Y-%B-%d",DATE_NOW-2*24*(ONE_HOUR),"abc"); lr_save_datetime("%Y-%B-%d",DATE_NOW-2*24*60*(ONE_MIN),"abc"); |
当然,我们也可以使用如下表示2个小时后的时间:lr_save_datetime("%H:%M:%S",TIME_NOW+2*(ONE_HOUR),"ab");
lr_save_datetime("%H:%M:%S",TIME_NOW+2*60*(ONE_MIN),"ab"); |
3)const char *name参数保存的参数名;使用时lr_eval_string("{参数名}")
五、事务返回值处理
结束事务的标记可以是LR_AUTO、LR_PASS、LR_FAIL。LR_AUTO会根据事务的执行结果直接判断事务成功还是失败。
LR_PASS,则直接确定事务是成功的
LR_FAIL直接确定事务是失败的
也可以通过web_submit_data()的返回值判断事务的状态
int result; lr_start_transaction("login"); result = web_submit_data("login.pl", "Action=http://10.36.142.8:1080/cgi-bin/login.pl", "Method=POST", "RecContentType=text/html", "Referer=http://10.36.142.8:1080/cgi-bin/nav.pl?in=home", "Snapshot=t2.inf", "Mode=HTML", ITEMDATA, "Name=userSession", "Value={userSession}", ENDITEM, "Name=username", "Value=jojo", ENDITEM, "Name=password", "Value=bean", ENDITEM, "Name=JSFormSubmit", "Value=off", ENDITEM, "Name=login.x", "Value=59", ENDITEM, "Name=login.y", "Value=13", ENDITEM, LAST); //结束事务的标记//事务的开始和结束必须承兑出现的,同事务名称匹配//可以是LR_AUTO、LR_PASS、LR_FAIL//lr_end_transaction("login",LR_AUTO); if(result==1){ lr_log_message("事务失败"); lr_end_transaction("login",LR_Fail) }else{ lr_log_message("事务通过"); lr_end_transaction("login",LR_Pass) } |
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理