关注于测试自动化和测试管理,我是一个永远的测试新手。

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

上一篇 / 下一篇  2007-08-23 14:10:58

ZQy.H?m4s0LoadRunner 使用system函数进行log的自动分析

1{U9gvVm;?p0

G `\ \z(M"^!l+RI0 

C;~4L7}uMm*m)} Vs0

y i0L s_ W(s\4?J^0PS:本人在51testing和sina blog上的文章全部为原创,转载请注明出处!!

5dP~;@8O051Testing软件测试网7Hf#h9x A c3r?

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

p-GW@B {051Testing软件测试网!Yb*RV @tP

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

HZIi\$^P051Testing软件测试网\(ojB2cA{ E-d7J

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

"hp-RA9o\1BA0

;P/o2l i8O'm5iTTq0主要实现方法介绍:51Testing软件测试网'om&D6gYK-_-_
1、使用fprintf()及相关函数输出log51Testing软件测试网u,Sg]4j.V0CRd!VL
2、使用mkdir创建新文件夹51Testing软件测试网G!L d~!j
3、使用system调用dos命令,对log文件进行条件分解

-k(vR]"m q p*M0

.K?mO\ r0
A)x/fE'RD.P6s0如下面的例子,共有5个fprintf()函数进行log输出:51Testing软件测试网#r3u_`-IJ V7^-Qf
===================================================================
0]EC])v uv V` I0/*********************************51Testing软件测试网^'M{Hg6r Wb.yx
  * Author:qiguojie51Testing软件测试网ZI3G'l[
  * object:software login
kOo'J:vH0  * date:2007-5-2851Testing软件测试网 F:y/K:Sf nxn/q
***********************************/
}P*qtd;[!tPb0Action()51Testing软件测试网0J w({7I[
{51Testing软件测试网3_?1_&TUQ?#aF
//变量定义区51Testing软件测试网6o+S a%Y0}$h^
typedef long time_t;       //定义一个时间变量51Testing软件测试网$y;y |*y8h x gQ
char *filename = "c:\\work\\log\\log.log";      //定义一个文件指针,指向log输入的地址
ZCC!M:}~\4g#cl_0long file_stream;        //定义一个长整型变量
)`1xu w*EFR(s(M:f0time_t t;        //定义一个时间变量

A{/p$q,f[f0

[P X.? q_0if ((file_stream = fopen(filename,"a+")) == NULL)   //打开文件51Testing软件测试网.f"r3w!jT1wW;P
{
0XN5X(TB5DvX%A(q0    lr_error_message("Cannot open %s", filename);
9Pr"W1pjrQ v7t.u0    return -1;
:P1rm-@/KC,p!MS9H8Z0}
9e8X0b`U&Y)_&znV0web_reg_save_param("IsRight","LB=Cache-control: private\r\n\r\n","RB=|",LAST);  //保存返回值51Testing软件测试网jA.fdFF%w)V
time(&t);        //获取当前时间
*e-ul#m5Q{0web_url("abclogin.asp",51Testing软件测试网`2]X5]#?u9M
    "URL=http://192.168.1.9/soft/abclogin.asp?U={user}&P={password}&L=0&H=3HS28QKH",51Testing软件测试网IV{UTH
    "Resource=0",
h1Q V#C)elz0    "RecContentType=text/html",51Testing软件测试网(e9QF%vb
    "Referer=",51Testing软件测试网{j+\v1b2PI*~2PN
    "Snapshot=t1.inf",51Testing软件测试网AK(DtM
    "Mode=HTML",51Testing软件测试网P6r;{s2`^
    LAST);
S6J j1`N0Vv0fprintf(file_stream,"迭代过程开始…………,时间是%s",ctime(&t));
/e~8du?lM)t%V0fprintf(file_stream,"%s,随机数是%d,",ctime(&t),n);
2u3e5km8q"Xz0fprintf(file_stream,"用户是:%s,密码是:%s,",lr_eval_string("{user}"),lr_eval_string("{password}"));
/kui [[\`D"U~0//判断返回值,输入对应日志
` z5[F |e0if (strcmp(lr_eval_string ("{IsRight}"),"A") == 0)//如果返回值是A
bl:~%m#ay0{51Testing软件测试网1d$q%K$dVq NA#d
   fprintf(file_stream,"success:用户登录成功,返回值是:%s\n",lr_eval_string("{IsRight}"));51Testing软件测试网-j$oW1H5}(K#elF
}51Testing软件测试网,U_:Bl1v
else if (strcmp(lr_eval_string ("{IsRight}"),"X") == 0) //如果返回值是X
%s5g_ [$m_"^0{
,Dv4LJI0    fprintf(file_stream,"failed:用户登录失败,返回值是:%s\n",lr_eval_string("{IsRight}"));51Testing软件测试网%c2r;g}u"b E7w
}
;P2Gy)f#?k_0else if (strcmp(lr_eval_string ("{IsRight}"),"Z") == 0)//如果返回值是Z
P wWL%[!{'N"Z]0{
?eF0U-~0    fprintf(file_stream,"success_others:登录特殊页成功,返回值是:%s\n",lr_eval_string("{IsRight}"));
"~3Ha;d!`)lw0}
~Fu bo;vp]i0else //如果返回值是D
,Fw chV-Z l6y0{
pE8` o5? Ps.k7R0    fprintf(file_stream,"success_free:登录免费用户成功,返回值是:%s\n",lr_eval_string("{IsRight}"));51Testing软件测试网z7S1E)y+X(CSiD p\
}
2sJ[_&}k.VIZN0fprintf(file_stream,"迭代过程结束…………,时间是%s",ctime(&t));51Testing软件测试网3dmz?]dg
fclose(
file_stream); 
i&VaGe.N0return 0;
:xRTv\'gVBu;v^0}
51Testing软件测试网:\X7DyS
===================================================================
(D6p0~IBU f3@ {0脚本设置1000个vuser和迭代50次,那么测试完毕正常的话可以输出250000条日志!!这些日志以不同的关键字开始(success、failed、success_others、success_free)!!
1ZCeXjCC7n0好了,不多白活了,进行分解的脚本编写!!51Testing软件测试网uJ%nYm/m,h:p
mkdir()函数说明
5UO&V4c{'d+N.e0int mkdir ( const char *path );
"A'Ly"}:_#k \8`0功能:创建一个目录(输入一个完整路径)51Testing软件测试网Hv Lp6`1{9r(@N

51Testing软件测试网JDt\ L'N

system()函数说明51Testing软件测试网2s G-F eM9ud(u
int system ( const char *string );51Testing软件测试网v.F+y+^ \%z@d
功能:执行一个操作系统的命令行命令
(J4U#HD"['t.Eh0PS:system可以运行dos命令,这样我们的脚本就可以扩展更多的功能51Testing软件测试网:bq#LzQ

&cDT)W6Z6@j x&t0DOS命令find函数简易用法51Testing软件测试网 UZ4g2aL}*z"c
find[空格][const char *string][空格][要查找的文件路径]输出运算符">"[查找结果保存的文件]51Testing软件测试网NV|[!uO [n
例如:find "123" c:\result.log > c:\123.log51Testing软件测试网3nbIa]3RO
      就是把result.log文件里所有包含"123"的行取出来,放到新文件"123.log"里

S4l2`(e\c`uL0

b `,I_Cj[0创建新文件夹放在init()里,而分解log的system()函数则放在end里;脚本分别如下:
Q/L0wtO;I3h l0vuser_init()51Testing软件测试网H4R"QT8nU
{
bM%i/QmV0    char new_dir[] = "C:\\work\\log\\FJ_log";
;S$Zy}NFFRF!~0    mkdir(new_dir);51Testing软件测试网.e8y H!P,V,l}(O^
    return 0;51Testing软件测试网0g$s(^ K;s
}

b[!aO`W E051Testing软件测试网Q7u'mf f4U L

vuser_end()
'gF+FUi9do+EUm0{51Testing软件测试网!]&l o"Y_Zr
    system("find \"success:\" c:\\work\\log\\log.log >C:\\work\\log\\FJ_log\\success.log");51Testing软件测试网 Zf]O_:S
    system("find \"failed:\" c:\\work\\log\\log.log >C:\\work\\log\\FJ_log\\failed.log");
5O ^@?T6~f.\Db0    system("find \"success_others\" c:\\work\\log\\log.log >C:\\work\\log\\FJ_log\\success_others.log");51Testing软件测试网/cq)U1C-T k4w3v Zf
    system("find \"success_free\" c:\\work\\log\\log.log >C:\\work\\log\\FJ_log\\success_free.log");51Testing软件测试网 T+GF.Z7NR_
    return 0;
hN$BH[0}51Testing软件测试网%N2m6z&`_} u
PS:这些例子里路径都是写死的,每次重新启动测试,都需要更新脚本;大家可以通过强化脚本来实现参数化路径和文件名。51Testing软件测试网$n N Z c6GA:| U#Q
这样,在全部脚本执行完毕后,去C:\work\log\FJ_log目录下,就可以看到有分别记录不同的结果的4个文件了(success.log、failed.log、success_others.log、success_free.log)
om6vCi2q051Testing软件测试网#G5_-?0A,O


TAG: LoadRunner loadrunner Log System

 

评分:0

我来说两句

qiguojie

qiguojie

北京测试一草根儿

日历

« 2024-05-02  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 120429
  • 日志数: 39
  • 图片数: 1
  • 建立时间: 2007-06-05
  • 更新时间: 2011-06-29

RSS订阅

Open Toolbar