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

LoadRunner特殊函数应用注意事项

上一篇 / 下一篇  2008-07-05 20:24:07 / 个人分类:其他

 

网上订购地址:  http://www.china-pub.com/3987651Testing软件测试网B L f5{F6z
转载请注明:作者 及其 原文链接 

r)qf5DG6wR3}]R G0

特殊函数应用注意事项

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

7qD*Kt{0

序号

A W6EIk&qZ0

商品名称

0Gj+T ^ R*d0P0

进货数量

i#qA%l:dfB9^\0

进货单价51Testing软件测试网!K:x+h ?B

1

kY W`:BZ0

电视机51Testing软件测试网lpDq$Jy3nu&N.c

251Testing软件测试网 ob K(xe$@a

1380.00

x b4_7Ch7MtZ&Yy0

2

"T:d(`Xm g:N yG(y4O0

电冰箱51Testing软件测试网Bm5y!N}/`:z_CT _

2

4PC6o?B1C0

859.8051Testing软件测试网(T,~)e;K/q'`G

351Testing软件测试网p2I*W y O!j

微波炉

5l*d1qS0p;q(} Z0

451Testing软件测试网 ? MuS%F

450.0051Testing软件测试网B~&mr\c9O5M

表3-3:商品进货列表

X;Z!\^%_~0

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

ZZo!a.U8T&A0

相应脚本代码:51Testing软件测试网O zpf%ho eK5\` C8qm

#include "web_api.h"

%E%S;p_B"T/Xz&f5H0

//double atof ( const char *string );51Testing软件测试网2{B$B7Vg n-j E Dc$B g

Action()51Testing软件测试网h!|;N^)u}$V3[s

{51Testing软件测试网5M+fyESA'f-UzLrX

    char  totalprice[64]="6279.60";

$tf8Fj^"Qj%C)C0

    float   price[3]={1380.00,859.80,450.00};51Testing软件测试网J Y~)w;A5_#B

    int    quantity[3]={2,2,4};

!^&FH#C{9TiX0

    char  strtmpres[64];

I1Gw*i%N\G.BP_0

    float   ftotalprice=0;

s3QR9DTi;p([0

    int i;

(~MF&R _/Yrl-d0

    for (i=0;i<=2;i++)51Testing软件测试网_*GM ytr0q6~3HH,de

       {51Testing软件测试网sAK q _i7]s)F

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

(U%H_lW3`ADJ0

       }

$F{}m-\ Ba2J0

    lr_output_message("atof格式化输出totalprice%f",atof(totalprice));51Testing软件测试网-h2U?}weL

    lr_output_message("浮点数取的是近似值请看函数的输出结果:%f",ftotalprice);51Testing软件测试网9y-V w&Y zyU

    sprintf(strtmpres,"%.2f",ftotalprice); 51Testing软件测试网X${JvT:JO&I#O"O"T}

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

1`_ r+P9g5W0

    if (*strtmpres==*totalprice)

5U.gF.M*S#u/] D{0

    {51Testing软件测试网dKE;PU Lw?0`0m

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

@SPFT0

     }51Testing软件测试网3AITk2N~

    else 51Testing软件测试网6q+]8h|-n n~ n

    {51Testing软件测试网z@g8lt)a

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

+xq7Z{)y J8\$o0

     } 51Testing软件测试网.U6i Y-`,o?*x:s n

       return 0;51Testing软件测试网-wfD'd"cJY

}

Fh}*~G[~0

首先,看看在不声明函数atof时,运行结果如图319。大家可以看到脚本

:p1X+[s!BRv lr0

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

0Dg4`.EU6`'|q0

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

*NB9['F lm/{0

atof格式化输出totalprice0.00000051Testing软件测试网E{%T3hmr*]

显然这不是期望的结果。51Testing软件测试网r'`!}2_6HW4e9b8j

然后,再看看声明函数atof后,运行结果如图320,相应脚本的输出结果为

r/R5I,{?Q0

atof格式化输出totalprice6279.600000

h#M;\mf0

那么为什么会出现这样的结果呢?51Testing软件测试网#B|0B'MPX?#uz

319:未声明atof函数运行结果51Testing软件测试网;P;JvbV%Q(~k|

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

;tN;m ? v*?)C]0

脚本解析:51Testing软件测试网NE$v5R5P4y$Cd

首先,我们声明了atof函数,但为了演示不声明函数会出现的问题,我们先将这部分代码注释掉。51Testing软件测试网e0I5Py Jl2]])h

//double atof ( const char *string );

&DZ^6g!k7u0

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

(vpEE Q%|s0

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

c+g aXy0

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

3P_ Njp9y'?N5w Z"mI0

    int    quantity[3]={2,2,4};              //进货商品数量数组51Testing软件测试网W+PI9}H

    char  strtmpres[64];                               //存放格式化浮点字符串的临时变量51Testing软件测试网&wc?y:C a3K;A1VQ:u

    float   ftotalprice=0;                                 //存放计算进货总额变量,初始化为051Testing软件测试网hvp7N&R5B

    int i;                                                      //临时整型变量

^w1} f{ ET0

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

{[(h jY]Lz4X0

    for (i=0;i<=2;i++)

P RjZXzN0

       {51Testing软件测试网AFBr_w

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

$m NP {B8a0{0

       }51Testing软件测试网l l\Qw)H a

在未声明atof函数时,应用atof函数,输出atof(totalprice),即:将"6279.60"转换成浮点数,但我们发现运行结果输出“0.000000”,而声明函数后运行结果输出为“6279.600000”。

;b.iX w$Ag0c:i0

    lr_output_message("atof格式化输出totalprice%f",atof(totalprice));51Testing软件测试网2d+E(Z,h:bQ

为什么会这样?51Testing软件测试网]'Y3|xG:D$oc

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

._\/kO|v!X7D:O0

321atof函数联机帮助51Testing软件测试网$\[)PWZ:}

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

u\3rdA0

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

};L5}X}{0

lr_output_message("浮点数取的是近似值请看函数的输出结果:%f",ftotalprice);51Testing软件测试网`$Bcw*Z Z}6]

格式化ftotalprice取小数点后两位,并将结果字符串存放到strtmpres,目的就是和totalprice字符串进行相同精度的比较,格式化后,输出strtmpres为“6279.60”。51Testing软件测试网fB8`X"y!u

    sprintf(strtmpres,"%.2f",ftotalprice); 51Testing软件测试网2s:Ji.WqvV$K

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

$fm e6_)t;h{*c+dL0

最后,加入逻辑控制,如果strtmprestotalprice的内容相同,则输出“预期结果与实际结果相等!”,否则输出“预期结果与实际结果不等!”,因为两者内容相同,则输出结果为“预期结果与实际结果相等!”。

2?)L7]8|5Z&dC0

    if (*strtmpres==*totalprice) 51Testing软件测试网3d {Z,V T&q

    {

M*{}#mtu-w6g&rlJ0

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

T#UO4q-Q,Ia%_0

     }

+A0G O u`0

    else 51Testing软件测试网%Hr]0Bk y/\+?

    {

3vB`Q ? w a8PV0

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

8y#@D Vv3d]u(u5|7S0

     }

zzv?/U&Tc#\0

【作者提示】51Testing软件测试网;k5id/xdvB1O.AJ?

1.         在应用函数时应仔细阅读函数的联机说明和示例,要特别注意有无注释,如果函数事先需要声明,则在应用之前必须先声明后使用。51Testing软件测试网3OX Y:n1d_@!e0j6}

2.         浮点数的取值是近似值,所以在进行等值判断时,必须取相同的精度,最好转换为字符串后再进行等值比较。51Testing软件测试网'l/TS5N.m/y;d7a


i?8GKLM"Jl;t'U051Testing软件测试网%??MAx
[新闻]YouTube需提交用户信息 网民隐私或遭威胁51Testing软件测试网YF4q%jV7}
51Testing软件测试网 sCv7F$jLU
Link URL: http://www.cnblogs.com/tester2test/archive/2008/05/16/1200051.html

TAG:

 

评分:0

我来说两句

Open Toolbar