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

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

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

Xl)B-p(c"w#C0LoadRunner 使用system函数进行log的自动分析

&r-p7DQ$}o:T0

q;@ m$B:rVT:A4D0 51Testing软件测试网4\:lL\t,_

51Testing软件测试网{&D'b)it

PS:本人在51testing和sina blog上的文章全部为原创,转载请注明出处!!51Testing软件测试网k j'UAB@]

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

D\'t5d2R)SW051Testing软件测试网M|F#B_Y3{

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

%^z2O[(u*T~qw051Testing软件测试网%KU2m`7z'Y*A2G5Gf

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

O6RL9Jcb!IN Z F051Testing软件测试网Hr(?Zp

主要实现方法介绍:
JB0wbo^8\C Y-qn01、使用fprintf()及相关函数输出log
AQ/AO&T^;{02、使用mkdir创建新文件夹51Testing软件测试网;y9X2i c:~%o/dp
3、使用system调用dos命令,对log文件进行条件分解
51Testing软件测试网u+Q-l&y Pj ?

51Testing软件测试网]3py&Mqq j

51Testing软件测试网6p pF.}P
如下面的例子,共有5个fprintf()函数进行log输出:51Testing软件测试网'gf!h1Lp{+U&n q'f&l
===================================================================51Testing软件测试网6N-a-j ['K w9m4y(UQ
/*********************************51Testing软件测试网*k)b-gn4Nz2Bv
  * Author:qiguojie
+x0j5s3y%t'o/K4c1C0  * object:software login
-id8p^@(sD.W0  * date:2007-5-28
3f-b{ e!C/MC0***********************************/51Testing软件测试网2h;z ['O Rg_
Action()
&o6N5_2A \l-Fi R0{
W.]_$\']_0//变量定义区51Testing软件测试网1^'txx!V
typedef long time_t;       //定义一个时间变量51Testing软件测试网N oWf-W1L*f'F S
char *filename = "c:\\work\\log\\log.log";      //定义一个文件指针,指向log输入的地址
Y `P Z-Xd+v2HJ0long file_stream;        //定义一个长整型变量
'C9{DIY}b0time_t t;        //定义一个时间变量
51Testing软件测试网t5EMNaPf9h!QKU$q

51Testing软件测试网^*e R] \)j3P

if ((file_stream = fopen(filename,"a+")) == NULL)   //打开文件
;Q'q5~E5c0{
2`P.e p%`0    lr_error_message("Cannot open %s", filename);51Testing软件测试网2y3cw!{ k:U3k
    return -1;51Testing软件测试网?Kh~KK0W#To+L
}51Testing软件测试网W v0y ~O
web_reg_save_param("IsRight","LB=Cache-control: private\r\n\r\n","RB=|",LAST);  //保存返回值51Testing软件测试网_-Qh)a]-R8R(X
time(&t);        //获取当前时间
w%y1X7S$[!~2e @-M zu0web_url("abclogin.asp",51Testing软件测试网M/M@[[)sG/}D9F(B
    "URL=http://192.168.1.9/soft/abclogin.asp?U={user}&P={password}&L=0&H=3HS28QKH",51Testing软件测试网l\P\r.FM3P
    "Resource=0",51Testing软件测试网bwx&j'L2Ik
    "RecContentType=text/html",
4g5\2` {B`*E)?$hY[6B0    "Referer=",
xJ+k5o w1g[2g?0    "Snapshot=t1.inf",
D k(c#HF X p @f0    "Mode=HTML",51Testing软件测试网6| B8_:MY
    LAST);51Testing软件测试网oo'Jjx?)o8GF
fprintf(file_stream,"迭代过程开始…………,时间是%s",ctime(&t));
9SVY2SQ(D c.i+N0fprintf(file_stream,"%s,随机数是%d,",ctime(&t),n);
1ZnN{` u9E0fprintf(file_stream,"用户是:%s,密码是:%s,",lr_eval_string("{user}"),lr_eval_string("{password}"));
$Q2`c,A:Vaqo+G1z0//判断返回值,输入对应日志
Wy'g1o3U)B0if (strcmp(lr_eval_string ("{IsRight}"),"A") == 0)//如果返回值是A
&D%r \@Y,k1^t0{
1Tvlw@'}:r3mD:}0   fprintf(file_stream,"success:用户登录成功,返回值是:%s\n",lr_eval_string("{IsRight}"));
X:?5c(r-j#B&\0K0}
%APHTz s y0else if (strcmp(lr_eval_string ("{IsRight}"),"X") == 0) //如果返回值是X51Testing软件测试网!t^Dnh;v1V}%E
{
h#|PE F)p"]9M&K0    fprintf(file_stream,"failed:用户登录失败,返回值是:%s\n",lr_eval_string("{IsRight}"));
K \W"|w(E-\0}51Testing软件测试网+Qgdw'YA m!d
else if (strcmp(lr_eval_string ("{IsRight}"),"Z") == 0)//如果返回值是Z
#l~Q @B%S0{51Testing软件测试网3|Zz+^ fRUk
    fprintf(file_stream,"success_others:登录特殊页成功,返回值是:%s\n",lr_eval_string("{IsRight}"));51Testing软件测试网rIy;C)s
}
M"Nv Bt0v? |W0else //如果返回值是D
N6ACi\*fU(_0{51Testing软件测试网3}A3|"O3a2jhJ)_i
    fprintf(file_stream,"success_free:登录免费用户成功,返回值是:%s\n",lr_eval_string("{IsRight}"));
Vnh o,c]0}
h6_*j!EX+W;v0fprintf(file_stream,"迭代过程结束…………,时间是%s",ctime(&t));
v.q4g7XW*nq0fclose(
file_stream); 
6w&[9w;\G6}'? ~0return 0;
Q/uq6b As0}
51Testing软件测试网%|)g:o x_+d g
===================================================================51Testing软件测试网'O5R2W is
脚本设置1000个vuser和迭代50次,那么测试完毕正常的话可以输出250000条日志!!这些日志以不同的关键字开始(success、failed、success_others、success_free)!!
5{z'gg1g O gO;?.U0好了,不多白活了,进行分解的脚本编写!!
w.dAk.O$l,|0mkdir()函数说明
S7w` _ w:}0int mkdir ( const char *path );51Testing软件测试网-@ k3{4T:\+D-eu/O
功能:创建一个目录(输入一个完整路径)51Testing软件测试网0Q2c0ge Zqj:uI

51Testing软件测试网k%B?){ E

system()函数说明51Testing软件测试网(@C7M OG ~;hr
int system ( const char *string );51Testing软件测试网^x Z7_ n6Y.r K8l
功能:执行一个操作系统的命令行命令51Testing软件测试网4a*@ V]Z6X
PS:system可以运行dos命令,这样我们的脚本就可以扩展更多的功能51Testing软件测试网 ^xp4a}Z Wr6p

51Testing软件测试网J#j3A%XZ,G"On

DOS命令find函数简易用法51Testing软件测试网4re&U8\b1IWP
find[空格][const char *string][空格][要查找的文件路径]输出运算符">"[查找结果保存的文件]
8|O&T(v$\4i4RM$n3e(t,m0例如:find "123" c:\result.log > c:\123.log
'ShOc$_0      就是把result.log文件里所有包含"123"的行取出来,放到新文件"123.log"里

0Pd-v8|;z3rH0

0YU Z7B;Nj0创建新文件夹放在init()里,而分解log的system()函数则放在end里;脚本分别如下:51Testing软件测试网2tUqm1cy*v [
vuser_init()
XVX kP W ].c0{
qe'R)Mb;R-k"R0    char new_dir[] = "C:\\work\\log\\FJ_log";51Testing软件测试网H.?h9Vj
    mkdir(new_dir);
/T;Oo F&Z[`&Bw6R0    return 0;
Ve_L&H`e fY0}

K\}qE],{&E0

.\3}4jMcpH0vuser_end()
f \ A;c*n0{
O+oqj&u,G0    system("find \"success:\" c:\\work\\log\\log.log >C:\\work\\log\\FJ_log\\success.log");51Testing软件测试网Y8v n)R'OT,? F#C
    system("find \"failed:\" c:\\work\\log\\log.log >C:\\work\\log\\FJ_log\\failed.log");51Testing软件测试网9n+h7k1IVo
    system("find \"success_others\" c:\\work\\log\\log.log >C:\\work\\log\\FJ_log\\success_others.log");51Testing软件测试网p_-x|)yz{i
    system("find \"success_free\" c:\\work\\log\\log.log >C:\\work\\log\\FJ_log\\success_free.log");
P;lS^[ [0`:{ g#hK0    return 0;51Testing软件测试网Gv `9jh(_p
}51Testing软件测试网wm!S:A8]
PS:这些例子里路径都是写死的,每次重新启动测试,都需要更新脚本;大家可以通过强化脚本来实现参数化路径和文件名。51Testing软件测试网-E-v|+kJ"i2j"OW
这样,在全部脚本执行完毕后,去C:\work\log\FJ_log目录下,就可以看到有分别记录不同的结果的4个文件了(success.log、failed.log、success_others.log、success_free.log)51Testing软件测试网E6Z+x%H}T1e jGN

'k(e:`2T(se0

TAG: LoadRunner loadrunner Log System

 

评分:0

我来说两句

qiguojie

qiguojie

北京测试一草根儿

日历

« 2024-10-14  
  12345
6789101112
13141516171819
20212223242526
2728293031  

数据统计

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

RSS订阅

Open Toolbar