LoadRunner特殊函数应用注意事项
上一篇 / 下一篇 2008-07-05 20:24:07 / 个人分类:其他
网上订购地址: http://www.china-pub.com/3987651Testing软件测试网BL f5{F6z
转载请注明:作者 及其 原文链接
特殊函数应用注意事项
在进行测试脚本编写时可能遇到一些问题,函数使用后没有按照我们预先的想法执行,而影响结果的正确性。我在做一个实际测试的项目中,有这样的一个案例:一个进销存管理系统,要测试进货总额计算是否正确,已知进货商品名称、数量和单价,请参见下表:
7qD*Kt{0
序号 A W6EIk&qZ0 |
商品名称 0Gj+T ^ R*d0P0 |
进货数量 i#qA%l:dfB9^\0 |
进货单价51Testing软件测试网!K:x+h?B |
1 kYW`: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*Wy 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.00=6279.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)C0float price[3]={1380.00,859.80,450.00};51Testing软件测试网J Y~)w;A5_#B
int quantity[3]={2,2,4};
!^&FH#C{9TiX0char strtmpres[64];
I1Gw*i%N\G.BP_0float ftotalprice=0;
s3QR9D Ti;p([0int i;
(~MF&R_/Y rl-d0for (i=0;i<=2;i++)51Testing软件测试网_*GM ytr0q6~3HH,de
{51Testing软件测试网sAKq _i7]s)F
ftotalprice=ftotalprice+price[i]*quantity[i];
(U%H_lW3`ADJ0}
$F{}m-\ Ba2J0lr_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+P9g5W0if (*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|-nn~ n
{51Testing软件测试网z@g8lt)a
lr_output_message("预期结果与实际结果不等!");
+xq7Z{)y J8\$o0} 51Testing软件测试网.U6iY-`,o?*x:s n
return 0;51Testing软件测试网-wfD'd"cJ Y
}
Fh}*~G[~0首先,看看在不声明函数atof时,运行结果如图3-19。大家可以看到脚本
:p1X+[s!BRv lr0lr_output_message("用atof格式化输出totalprice=%f",atof(totalprice));
0Dg4`.EU6`'|q0在未声明函数atof函数时,输出结果为
*NB9['Flm/{0用atof格式化输出totalprice=0.00000051Testing软件测试网E{%T3hmr*]
显然这不是期望的结果。51Testing软件测试网r'`!}2_6HW4e9b8j
然后,再看看声明函数atof后,运行结果如图3-20,相应脚本的输出结果为
r/R5I,{? Q0用atof格式化输出totalprice=6279.600000
h#M;\mf0那么为什么会出现这样的结果呢?51Testing软件测试网#B|0B'MPX?#uz
图3-19:未声明atof函数运行结果51Testing软件测试网;P;JvbV%Q(~k|
图3-20:声明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%|s0char totalprice[64]="6279.60"; //期望进货总额数值
c+g aXy0float price[3]={1380.00,859.80,450.00}; //进货商品单价数组
3P_ Njp9y'?N5wZ"mI0int quantity[3]={2,2,4}; //进货商品数量数组51Testing软件测试网W+PI9}H
char strtmpres[64]; //存放格式化浮点字符串的临时变量51Testing软件测试网&wc?y:C a3K;A1VQ:u
float ftotalprice=0; //存放计算进货总额变量,初始化为051Testing软件测试网hv p7N&R5B
int i; //临时整型变量
^w1} f{ET0将三组进货单价*进货数量相加,并将结果存放到ftotalprice。
{[(h jY]Lz4X0for (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:i0lr_output_message("用atof格式化输出totalprice=%f",atof(totalprice));51Testing软件测试网2d+E(Z,h:bQ
为什么会这样?51Testing软件测试网]'Y3|xG:D$oc
LoadRunner的函数联机帮助原文描述如下:
._\/kO|v!X7D:O0图3-21:atof函数联机帮助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\3rd A0浮点数的取值是近似值,计算可以得到1380.00*2+859.80*2+450.00*4=6279.60,而实际结果输出却是6279.600098,从而说明浮点数取的是近似值。所以不能拿两个浮点数进行比较。如:拿6279.60和6279.600098比较判断其是否相等,而应该将浮点数格式化成相同精度的字符串再进行比较,这样可以防止出现意外情况的发生。
};L5} X}{0lr_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最后,加入逻辑控制,如果strtmpres和totalprice的内容相同,则输出“预期结果与实际结果相等!”,否则输出“预期结果与实际结果不等!”,因为两者内容相同,则输出结果为“预期结果与实际结果相等!”。
2?)L7]8|5Z&dC0if (*strtmpres==*totalprice) 51Testing软件测试网3d {Z,V T&q
{
M*{}#mtu-w6g&rlJ0lr_output_message("预期结果与实际结果相等!");
T#UO4q-Q,I a%_0}
+A0G Ou`0else 51Testing软件测试网%H r]0Bky/\+?
{
3vB` Q?wa8PV0lr_output_message("预期结果与实际结果不等!");
8y#@D Vv3d]u(u5|7S0}