我的地盘我做主! 博客:http://tester2test.cnblogs.com/   msn:win_soft@163.com

LoadRunner特殊函数应用注意事项

上一篇 / 下一篇  2008-07-24 17:00:37 / 个人分类:其他

 

网上订购地址:  http://www.china-pub.com/3987651Testing软件测试网rJDen.N2C9I\"^H
转载请注明:作者 及其 原文链接 51Testing软件测试网l3R@,}k T

特殊函数应用注意事项

在进行测试脚本编写时可能遇到一些问题,函数使用后没有按照我们预先的想法执行,而影响结果的正确性。我在做一个实际测试的项目中,有这样的一个案例:一个进销存管理系统,要测试进货总额计算是否正确,已知进货商品名称、数量和单价,请参见下表:51Testing软件测试网"ClM_@Z6G#A)D$yE2I

序号

G'? ~d2Z]U \(s0

商品名称

c tJ9o)H(n0

进货数量

%\&K5PPb3d0A0

进货单价

W/O&tBIv0

151Testing软件测试网 P O)DSJz&t OY

电视机51Testing软件测试网Lt9ph^"E&j IB M

251Testing软件测试网FD;XRF)p3\i5kp

1380.0051Testing软件测试网5{)Uq}:F9J9MD

251Testing软件测试网9@&v&I%fut

电冰箱

.BLg1\.D9I'[0

251Testing软件测试网CfEe;XN5e.N

859.80

+r6o,Bpq3v0

3

n(rirV@5m0

微波炉51Testing软件测试网/{Z{A:s1dN Um

451Testing软件测试网 q v'vy@6\/aI"[

450.0051Testing软件测试网Zg&p/Q2B_RK.yh

表3-3:商品进货列表51Testing软件测试网8ub,{ QXX

从上面的数据可知,进货总额应为2*1380.00+2*859.80+4*450.006279.60,从页面取得进货总额数据信息转换成浮点数以后与6279.60对比,如果相等则说明系统关于进货总额部分的处理是正确的,如果不等,说明统计错误。从页面上得到的数值为6279.60,脚本的计算结果也为6279.60,为什么系统反馈的提示始终是“预期结果与实际结果不等!”?。下面我们来看这段脚本,在此仅列出关键部分代码。51Testing软件测试网1}%xh a_OT%S

相应脚本代码:51Testing软件测试网#b [,s,ru+}?1^

#include "web_api.h"51Testing软件测试网1~:Yus%t q ^

//double atof ( const char *string );51Testing软件测试网 ^[Z0v*dc;@

Action()

5~MA;}XXaP"cH0

{51Testing软件测试网1x#o aF9n2Eu

    char  totalprice[64]="6279.60";51Testing软件测试网%D3vHi'g.L

    float   price[3]={1380.00,859.80,450.00};

9C-\0P/T*UxK0

    int    quantity[3]={2,2,4};51Testing软件测试网+C`!_`un\Gp'h1w

    char  strtmpres[64];51Testing软件测试网v&Pt)H,]-_9b

    float   ftotalprice=0;

!fF9J3E,}m0

    int i;51Testing软件测试网i3NJ#J D!F Ms

    for (i=0;i<=2;i++)51Testing软件测试网 e'EY"["B(d vV

       {51Testing软件测试网a)W G\T

       ftotalprice=ftotalprice+price[i]*quantity[i];

;jD,`Y _ [-@0

       }51Testing软件测试网fd8}0?M$At.I

    lr_output_message("atof格式化输出totalprice%f",atof(totalprice));

,U$^_bEXV/O2W^0

    lr_output_message("浮点数取的是近似值请看函数的输出结果:%f",ftotalprice);

7Vg'Q a!Ml9~0

    sprintf(strtmpres,"%.2f",ftotalprice);

D#E C Ce*?c@0

    lr_output_message("保留两位小数格式化的浮点数为:%s ",strtmpres);51Testing软件测试网9x AD5F0AE

    if (*strtmpres==*totalprice)

w)E)k-Q;c2FX J8A0

    {51Testing软件测试网0m"G:sW3GvBe'_*L;~

       lr_output_message("预期结果与实际结果相等!");

l-W;i z)U7X0C _0

     }

T xw1I;sl0

    else

xD,oY.N3L0

    {

;U9vh/mR2@}*Zj0

       lr_output_message("预期结果与实际结果不等!");51Testing软件测试网(k2h7xc%yC"g

     } 51Testing软件测试网"s1a5O yq-l%_

       return 0;51Testing软件测试网 ~3}U,o:oK(xu

}51Testing软件测试网^3Z }P'r/G

首先,看看在不声明函数atof时,运行结果如图319。大家可以看到脚本51Testing软件测试网7`@ k^4MMzi4h

lr_output_message("atof格式化输出totalprice%f",atof(totalprice));51Testing软件测试网yGG_ r`S

在未声明函数atof函数时,输出结果为

2p5^ @&J-W*CW,Q0

atof格式化输出totalprice0.000000

tkCwg/n9ys:T0

显然这不是期望的结果。51Testing软件测试网&A*d/na0e].}

然后,再看看声明函数atof后,运行结果如图320,相应脚本的输出结果为51Testing软件测试网d)B)SN7n6s

atof格式化输出totalprice6279.600000

fT\ }-JN {7K0

那么为什么会出现这样的结果呢?

FH*p*P G Qb Do0

319:未声明atof函数运行结果51Testing软件测试网E(vt I.{&G8Lt

320:声明atof函数后运行结果

P5zvNo9a KV0

脚本解析:51Testing软件测试网'Hry6RL[0^

首先,我们声明了atof函数,但为了演示不声明函数会出现的问题,我们先将这部分代码注释掉。

#Sq~*|7t&f0

//double atof ( const char *string );

8@v'V`@0

然后,在Action部分,初始化和声明了一些变量。

&RUWC#VC m0

    char  totalprice[64]="6279.60";          //期望进货总额数值

Ef o%XzM0

    float   price[3]={1380.00,859.80,450.00}; //进货商品单价数组

;P QJ6o(aj?h)f0

    int    quantity[3]={2,2,4};              //进货商品数量数组

a+e+^ A2]I P0

    char  strtmpres[64];                               //存放格式化浮点字符串的临时变量51Testing软件测试网(Q"Ew D.qY

    float   ftotalprice=0;                                 //存放计算进货总额变量,初始化为0

O|-q.r0i%YIQ0

    int i;                                                      //临时整型变量51Testing软件测试网!|"y(xa B;B

将三组进货单价*进货数量相加,并将结果存放到ftotalprice

DC@6_-~w|6MV0

    for (i=0;i<=2;i++)51Testing软件测试网/OS$Ot#p6~"Uz

       {51Testing软件测试网*R*d7SU)j3Q |h [$K

       ftotalprice=ftotalprice+price[i]*quantity[i];51Testing软件测试网xE({6FT_8VfL)C

       }51Testing软件测试网+c7? Q#OtAm|,GS

在未声明atof函数时,应用atof函数,输出atof(totalprice),即:将"6279.60"转换成浮点数,但我们发现运行结果输出“0.000000”,而声明函数后运行结果输出为“6279.600000”。51Testing软件测试网aG&lxO$}T

    lr_output_message("atof格式化输出totalprice%f",atof(totalprice));

"lx4Q*m/Is0

为什么会这样?51Testing软件测试网E6p5o mp S/}.w7a

LoadRunner的函数联机帮助原文描述如下:

*Dl2A z;qu0

321atof函数联机帮助

kp1lZ'|9C*y:G0

红色区域的注释信息为:“Note: The function atof, as with all functions that do not return an integer, must be explicitly declared in Vugen scripts.”,这句话的含义就是“注释:atof函数以及所有非返回整型数值的函数,必须在脚本生成器中明确指出。”,所以在应用函数时一定要看看联机帮助有无注释部分,正确应用函数。51Testing软件测试网/LukBV!|

浮点数的取值是近似值,计算可以得到1380.00*2+859.80*2+450.00*4=6279.60,而实际结果输出却是6279.600098,从而说明浮点数取的是近似值。所以不能拿两个浮点数进行比较。如:拿6279.606279.600098比较判断其是否相等,而应该将浮点数格式化成相同精度的字符串再进行比较,这样可以防止出现意外情况的发生。51Testing软件测试网!}Fe[#v T^U0WZQ

lr_output_message("浮点数取的是近似值请看函数的输出结果:%f",ftotalprice);

@'Y.l^ud0

格式化ftotalprice取小数点后两位,并将结果字符串存放到strtmpres,目的就是和totalprice字符串进行相同精度的比较,格式化后,输出strtmpres为“6279.60”。

!X5R8J K9lF0

    sprintf(strtmpres,"%.2f",ftotalprice); 51Testing软件测试网ENb:^2yhc6_

    lr_output_message("保留两位小数格式化的浮点数为:%s ",strtmpres);

,Qr6e+ZsOY0

最后,加入逻辑控制,如果strtmprestotalprice的内容相同,则输出“预期结果与实际结果相等!”,否则输出“预期结果与实际结果不等!”,因为两者内容相同,则输出结果为“预期结果与实际结果相等!”。51Testing软件测试网pP5k s t$d X2H@~

    if (*strtmpres==*totalprice)

2?|\+_3UCo0

    {

+n*r| O\0~0

       lr_output_message("预期结果与实际结果相等!");51Testing软件测试网xLv)hR

     }

|!O8] e \d0W0

    else

a _;Q.S{^ZP!O$O~0

    {

x]| m&iH~4L0

       lr_output_message("预期结果与实际结果不等!");51Testing软件测试网.X,rXN!kr

     }

Yj.p)c*axD0

【作者提示】

Z(rpjj0I"IN0

1.         在应用函数时应仔细阅读函数的联机说明和示例,要特别注意有无注释,如果函数事先需要声明,则在应用之前必须先声明后使用。51Testing软件测试网+zok#D"z4ST{6[

2.         浮点数的取值是近似值,所以在进行等值判断时,必须取相同的精度,最好转换为字符串后再进行等值比较。

-u.h6oa{0
9up:YN&OsY,pi.M5e GM0
S8CH6|&oU0[新闻]央视国际联手微软打造数字奥运媒体平台
O z~hE051Testing软件测试网:s IZrs3q;Y eX)F
Link URL: http://www.cnblogs.com/tester2test/archive/2008/05/16/1200051.html

TAG:

 

评分:0

我来说两句

Open Toolbar