LoadRunner特殊函数应用注意事项
上一篇 / 下一篇 2008-07-02 09:37:37 / 个人分类:性能测试
网上订购地址: http://www.china-pub.com/3987651Testing软件测试网+r;OQLx+_C
转载请注明:作者 及其 原文链接 51Testing软件测试网jT ~5a0x6x`d
特殊函数应用注意事项
在进行测试脚本编写时可能遇到一些问题,函数使用后没有按照我们预先的想法执行,而影响结果的正确性。我在做一个实际测试的项目中,有这样的一个案例:一个进销存管理系统,要测试进货总额计算是否正确,已知进货商品名称、数量和单价,请参见下表:
~1]5|`x|'g'B0
序号51Testing软件测试网elc[Y5p5tS2| |
商品名称51Testing软件测试网(i1EiWR!J |
进货数量 eO)o0j]!T0 |
进货单价51Testing软件测试网,F2^3{[i}o,L |
151Testing软件测试网2vR%G3Bv,F |
电视机 y9GrAjx$^0 |
2 (y*c#XnI+U u'[0 |
1380.0051Testing软件测试网_)}SHX^ p/p%aD,tr |
2 $b/t w#{|Y0 |
电冰箱 'I@XL\;K$}EJi0 |
2 C]#w2J!s%I0 |
859.8051Testing软件测试网Z2l(~3_.f5A |
351Testing软件测试网iKgC@c ^ |
微波炉51Testing软件测试网6L1HXOqha |
451Testing软件测试网"m^:Vj3s9jMi |
450.0051Testing软件测试网]?R'|dS3i |
表3-3:商品进货列表
BK9?HC6wx-JnL0从上面的数据可知,进货总额应为2*1380.00+2*859.80+4*450.00=6279.60,从页面取得进货总额数据信息转换成浮点数以后与6279.60对比,如果相等则说明系统关于进货总额部分的处理是正确的,如果不等,说明统计错误。从页面上得到的数值为6279.60,脚本的计算结果也为6279.60,为什么系统反馈的提示始终是“预期结果与实际结果不等!”?。下面我们来看这段脚本,在此仅列出关键部分代码。
8h }:L{,@'|y0相应脚本代码:51Testing软件测试网+X!kU1Jtr:I
#include "web_api.h"
x!_iPtj7e9R0//double atof ( const char *string );
{6e0WfU0Action()51Testing软件测试网[+lx4pgujN
{
f/U$L1VAQYS!g0char totalprice[64]="6279.60";51Testing软件测试网m[B c[Kh5Ub
float price[3]={1380.00,859.80,450.00};
6J0eUdV-Ry0int quantity[3]={2,2,4};
0hJ*]^4}q0char strtmpres[64];
gqX7A._]}k e0float ftotalprice=0;51Testing软件测试网K7gwPQ
int i;
FI0tl\ h;t*vP.A0for (i=0;i<=2;i++)51Testing软件测试网k._ p![il3m;D:\
{51Testing软件测试网X)G,la({ vNn ?2UP
ftotalprice=ftotalprice+price[i]*quantity[i];
V5_'F*q F8R*}0}
V"GW5]WmEc0lr_output_message("用atof格式化输出totalprice=%f",atof(totalprice));
TL|"K+\~0lr_output_message("浮点数取的是近似值请看函数的输出结果:%f",ftotalprice);51Testing软件测试网 XL2f}1O-C}
sprintf(strtmpres,"%.2f",ftotalprice); 51Testing软件测试网k~4I&M:Y@
lr_output_message("保留两位小数格式化的浮点数为:%s ",strtmpres);
qI;y/~6s`g(H0if (*strtmpres==*totalprice) 51Testing软件测试网+O2W*Z&mK$`
{
Hdj(E` xg~0lr_output_message("预期结果与实际结果相等!");51Testing软件测试网e `4l%uK+Dm
}
EQ&uMe"VV9W;G7m{0else
hm2~%P k2sgB0{
xFN1v4a9U ?0lr_output_message("预期结果与实际结果不等!");51Testing软件测试网c:o0^%Ou
}
6d!ce7tFb(h!?5U0return 0;51Testing软件测试网7_x.s%Yb9}E
}51Testing软件测试网,E5q7Nq R4^r
首先,看看在不声明函数atof时,运行结果如图3-19。大家可以看到脚本
&}0OF"`,o4edY5`9~K0lr_output_message("用atof格式化输出totalprice=%f",atof(totalprice));
MO4]_tA(w0在未声明函数atof函数时,输出结果为51Testing软件测试网n|N7a-R'PLQ7X
用atof格式化输出totalprice=0.000000
mCTB-_*L-z0显然这不是期望的结果。51Testing软件测试网 T? K/?Mg n(h&b:N
然后,再看看声明函数atof后,运行结果如图3-20,相应脚本的输出结果为51Testing软件测试网?za4VURJ5v6?
用atof格式化输出totalprice=6279.60000051Testing软件测试网9v2EB&tQ*o F5J{W
那么为什么会出现这样的结果呢?
*GL2N3s x4Mc1D0图3-19:未声明atof函数运行结果51Testing软件测试网,BT(P$~&d
图3-20:声明atof函数后运行结果51Testing软件测试网/} G~Ogg,[yW
脚本解析:
S%U.LL5{P'I+|rg0首先,我们声明了atof函数,但为了演示不声明函数会出现的问题,我们先将这部分代码注释掉。51Testing软件测试网'K9q~/z X-{
//double atof ( const char *string );
_ c8NJ2o y"d$I0然后,在Action部分,初始化和声明了一些变量。
&d~Y)^1Z9k"m)|+i0char totalprice[64]="6279.60"; //期望进货总额数值51Testing软件测试网c+fuU&`N4ZM
float price[3]={1380.00,859.80,450.00}; //进货商品单价数组51Testing软件测试网}+h3G`"c?
int quantity[3]={2,2,4}; //进货商品数量数组51Testing软件测试网 _/e!U.bj @;QA L']{k
char strtmpres[64]; //存放格式化浮点字符串的临时变量
m)Q9P i~)b0float ftotalprice=0; //存放计算进货总额变量,初始化为051Testing软件测试网drRY6Qj9i,xp
int i; //临时整型变量
KjN }H5Fy'Ta I6he0将三组进货单价*进货数量相加,并将结果存放到ftotalprice。
z y_ }p&]n/G!CGa0for (i=0;i<=2;i++)51Testing软件测试网"m/_9DG&j8dr3Z
{51Testing软件测试网+_:?&uW;{)N*`
ftotalprice=ftotalprice+price[i]*quantity[i];
0p\PYk'l#w0}
v5N$_N`r0在未声明atof函数时,应用atof函数,输出atof(totalprice),即:将"6279.60"转换成浮点数,但我们发现运行结果输出“0.000000”,而声明函数后运行结果输出为“6279.600000”。51Testing软件测试网_|9fyW-qJ
lr_output_message("用atof格式化输出totalprice=%f",atof(totalprice));
LJ-n/i@H/sW0为什么会这样?
*O'v!Jh+Q0LoadRunner的函数联机帮助原文描述如下:
mK3vLmD&e6[n0图3-21:atof函数联机帮助
'JK&ik:n ?0红色区域的注释信息为:“Note: The function atof, as with all functions that do not return an integer, must be explicitly declared in Vugen scripts.”,这句话的含义就是“注释:atof函数以及所有非返回整型数值的函数,必须在脚本生成器中明确指出。”,所以在应用函数时一定要看看联机帮助有无注释部分,正确应用函数。
]?gY1[c*H8d(e0浮点数的取值是近似值,计算可以得到1380.00*2+859.80*2+450.00*4=6279.60,而实际结果输出却是6279.600098,从而说明浮点数取的是近似值。所以不能拿两个浮点数进行比较。如:拿6279.60和6279.600098比较判断其是否相等,而应该将浮点数格式化成相同精度的字符串再进行比较,这样可以防止出现意外情况的发生。51Testing软件测试网Z%S aRgY
lr_output_message("浮点数取的是近似值请看函数的输出结果:%f",ftotalprice);51Testing软件测试网!LDUQ8kFi
格式化ftotalprice取小数点后两位,并将结果字符串存放到strtmpres,目的就是和totalprice字符串进行相同精度的比较,格式化后,输出strtmpres为“6279.60”。51Testing软件测试网;z!Z)s7?'w1Sl
sprintf(strtmpres,"%.2f",ftotalprice);
pbz'A,{;en+e5y'^w_0lr_output_message("保留两位小数格式化的浮点数为:%s ",strtmpres);
)u_,N ?0c~[6K0最后,加入逻辑控制,如果strtmpres和totalprice的内容相同,则输出“预期结果与实际结果相等!”,否则输出“预期结果与实际结果不等!”,因为两者内容相同,则输出结果为“预期结果与实际结果相等!”。51Testing软件测试网D@@#S_:|z?"{Z
if (*strtmpres==*totalprice) 51Testing软件测试网FE)c&p,bBG
{
V4[Q5q'V6c1A q0lr_output_message("预期结果与实际结果相等!");51Testing软件测试网;BXWyn1Hq-Z
}51Testing软件测试网!O:c6Ty[3rC?cQ
else
u"Z2cm hh0{51Testing软件测试网 Dv.bU4F%H2R&|m
lr_output_message("预期结果与实际结果不等!");51Testing软件测试网5VB+TP/H3G
}
\}^d){5]A0【作者提示】
^6b3?'m&[P#E!jE01. 在应用函数时应仔细阅读函数的联机说明和示例,要特别注意有无注释,如果函数事先需要声明,则在应用之前必须先声明后使用。
&c-anyUVl[7_Y02. 浮点数的取值是近似值,所以在进行等值判断时,必须取相同的精度,最好转换为字符串后再进行等值比较。51Testing软件测试网e#Iv/TZ
51Testing软件测试网A8V6V[.F51Testing软件测试网)Z7h9i$|Il
[新闻]不能帮助客户成功 招聘网站从浮华走向沦落51Testing软件测试网M+b_][joqF
iw2k@:r0Link URL: http://www.cnblogs.com/tester2test/archive/2008/05/16/1200051.html
TAG:
标题搜索
日历
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
1 | 2 | 3 | 4 | 5 | 6 | ||||
7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
28 | 29 | 30 |
我的存档
数据统计
- 访问量: 271177
- 日志数: 689
- 建立时间: 2006-12-05
- 更新时间: 2009-04-15