LoadRunner 使用system函数进行log的自动分析『转载』

上一篇 / 下一篇  2007-08-25 11:29:24 / 个人分类:测试工具

LoadRunner使用system函数进行log的自动分析

摘自:http://www.51testing.com/?6343/action_viewspace_itemid_18997.html

我在《明确LoadRunner可以输出的结果》中,讲到可以使用lr_out_message输出log,但是这个是lr自己的log,是按vuser分成一个个的小文件;也可以使用fprintf()等相关函数来进行自定义log的输出,使fprintf()函数进行的log输出,有很大的灵活性,语句也不复杂,实在是强化脚本一大利器。

但是如果运行1000vuser,测试过程中脚本平均每个vuser迭代执行50次,每个脚本共输出5条log,那么log文件有多少行?
      1000*50*5=250000
如果用记事本打开+查找那也实在太麻烦了,我这人太懒,琢磨着还是自己写脚本实现吧。

其实在文本处理这块,用perl程序(脚本语言)或者shell(脚本语言)来处理是比较方便的,在windows下也可以用批处理文件+find来进行自动分析,不过偶既然在学lr,当然是用lr来实现是最好。

主要实现方法介绍:
1、使用fprintf()及相关函数输出log
2、使用mkdir创建新文件夹
3、使用system调用dos命令,对log文件进行条件分解


如下面的例子,共有5个fprintf()函数进行log输出:
===================================================================
/*********************************
  * Author:qiguojie
  * object:software login
  * date:2007-5-28
***********************************/
Action()
{
//变量定义区
typedef long time_t;       //定义一个时间变量
char *filename = "c:\\work\\log\\log.log";      //定义一个文件指针,指向log输入的地址
long file_stream;        //定义一个长整型变量
time_t t;        //定义一个时间变量

if ((file_stream = fopen(filename,"a+")) == NULL)   //打开文件
{
    lr_error_message("Cannot open %s", filename);
    return -1;
}
web_reg_save_param("IsRight","LB=Cache-control: private\r\n\r\n","RB=|",LAST);  //保存返回值
time(&t);        //获取当前时间
web_url("abclogin.asp",
    "URL=http://192.168.1.9/soft/abclogin.asp?U={user}&P={password}&L=0&H=3HS28QKH",
    "Resource=0",
    "RecContentType=text/html",
    "Referer=",
    "Snapshot=t1.inf",
    "Mode=HTML",
    LAST);
fprintf(file_stream,"迭代过程开始…………,时间是%s",ctime(&t));
fprintf(file_stream,"%s,随机数是%d,",ctime(&t),n);
fprintf(file_stream,"用户是:%s,密码是:%s,",lr_eval_string("{user}"),lr_eval_string("{password}"));
//判断返回值,输入对应日志
if (strcmp(lr_eval_string ("{IsRight}"),"A") == 0)//如果返回值是A
{
   fprintf(file_stream,"success:用户登录成功,返回值是:%s\n",lr_eval_string("{IsRight}"));
}
else if (strcmp(lr_eval_string ("{IsRight}"),"X") == 0) //如果返回值是X
{
    fprintf(file_stream,"failed:用户登录失败,返回值是:%s\n",lr_eval_string("{IsRight}"));
}
else if (strcmp(lr_eval_string ("{IsRight}"),"Z") == 0)//如果返回值是Z
{
    fprintf(file_stream,"success_others:登录特殊页成功,返回值是:%s\n",lr_eval_string("{IsRight}"));
}
else //如果返回值是D
{
    fprintf(file_stream,"success_free:登录免费用户成功,返回值是:%s\n",lr_eval_string("{IsRight}"));
}
fprintf(file_stream,"迭代过程结束…………,时间是%s",ctime(&t));
fclose(filename); 
return 0;
}

===================================================================
脚本设置1000个vuser和迭代50次,那么测试完毕正常的话可以输出250000条日志!!这些日志以不同的关键字开始(success、failed、success_others、success_free)!!
好了,不多白活了,进行分解的脚本编写!!
mkdir()函数说明
int mkdir ( const char *path );
功能:创建一个目录(输入一个完整路径)

system()函数说明
int system ( const char *string );
功能:执行一个操作系统的命令行命令
PS:system可以运行dos命令,这样我们的脚本就可以扩展更多的功能

DOS命令find函数简易用法
find[空格][const char *string][空格][要查找的文件路径]输出运算符">"[查找结果保存的文件]
例如:find "123" c:\result.log > c:\123.log
      就是把result.log文件里所有包含"123"的行取出来,放到新文件"123.log"里

创建新文件夹放在init()里,而分解log的system()函数则放在end里;脚本分别如下:
vuser_init()
{
    char new_dir[] = "C:\\work\\log\\FJ_log";
    mkdir(new_dir);
    return 0;
}

vuser_end()
{
    system("find \"success:\" c:\\work\\log\\log.log >C:\\work\\log\\FJ_log\\success.log");
    system("find \"failed:\" c:\\work\\log\\log.log >C:\\work\\log\\FJ_log\\failed.log");
    system("find \"success_others\" c:\\work\\log\\log.log >C:\\work\\log\\FJ_log\\success_others.log");
    system("find \"success_free\" c:\\work\\log\\log.log >C:\\work\\log\\FJ_log\\success_free.log");
    return 0;
}
PS:这些例子里路径都是写死的,每次重新启动测试,都需要更新脚本;大家可以通过强化脚本来实现参数化路径和文件名。
这样,在全部脚本执行完毕后,去C:\work\log\FJ_log目录下,就可以看到有分别记录不同的结果的4个文件了(success.log、failed.log、success_others.log、success_free.log)


TAG: 测试工具

 

评分:0

我来说两句

Open Toolbar