网上订购地址: http://www.china-pub.com/39876
转载请注明:作者 及其 原文链接
特殊函数应用注意事项
在进行测试脚本编写时可能遇到一些问题,函数使用后没有按照我们预先的想法执行,而影响结果的正确性。我在做一个实际测试的项目中,有这样的一个案例:一个进销存管理系统,要测试进货总额计算是否正确,已知进货商品名称、数量和单价,请参见下表:
序号
|
商品名称
|
进货数量
|
进货单价
|
1
|
电视机
|
2
|
1380.00
|
2
|
电冰箱
|
2
|
859.80
|
3
|
微波炉
|
4
|
450.00
|
表3-3:商品进货列表
从上面的数据可知,进货总额应为2*1380.00+2*859.80+4*450.00=6279.60,从页面取得进货总额数据信息转换成浮点数以后与6279.60对比,如果相等则说明系统关于进货总额部分的处理是正确的,如果不等,说明统计错误。从页面上得到的数值为6279.60,脚本的计算结果也为6279.60,为什么系统反馈的提示始终是“预期结果与实际结果不等!”?。下面我们来看这段脚本,在此仅列出关键部分代码。
相应脚本代码:
#include "web_api.h"
//double atof ( const char *string );
Action()
{
chartotalprice[64]="6279.60";
float price[3]={1380.00,859.80,450.00};
int quantity[3]={2,2,4};
charstrtmpres[64];
float ftotalprice=0;
inti;
for (i=0;i<=2;i++)
{
ftotalprice=ftotalprice+price[i]*quantity[i];
}
lr_output_message("用atof格式化输出totalprice=%f",atof(totalprice));
lr_output_message("浮点数取的是近似值请看函数的输出结果:%f",ftotalprice);
sprintf(strtmpres,"%.2f",ftotalprice);
lr_output_message("保留两位小数格式化的浮点数为:%s ",strtmpres);
if (*strtmpres==*totalprice)
{
lr_output_message("预期结果与实际结果相等!");
}
else
{
lr_output_message("预期结果与实际结果不等!");
}
return 0;
}
首先,看看在不声明函数atof时,运行结果如图3-19。大家可以看到脚本
lr_output_message("用atof格式化输出totalprice=%f",atof(totalprice));
在未声明函数atof函数时,输出结果为
用atof格式化输出totalprice=0.000000
显然这不是期望的结果。
然后,再看看声明函数atof后,运行结果如图3-20,相应脚本的输出结果为
用atof格式化输出totalprice=6279.600000
那么为什么会出现这样的结果呢?
图3-19:未声明atof函数运行结果
图3-20:声明atof函数后运行结果
脚本解析:
首先,我们声明了atof函数,但为了演示不声明函数会出现的问题,我们先将这部分代码注释掉。
//double atof ( const char *string );
然后,在Action部分,初始化和声明了一些变量。
chartotalprice[64]="6279.60"; //期望进货总额数值
float price[3]={1380.00,859.80,450.00};//进货商品单价数组
int quantity[3]={2,2,4}; //进货商品数量数组
charstrtmpres[64]; //存放格式化浮点字符串的临时变量
float ftotalprice=0; //存放计算进货总额变量,初始化为0
inti; //临时整型变量
将三组进货单价*进货数量相加,并将结果存放到ftotalprice。
for (i=0;i<=2;i++)
{
ftotalprice=ftotalprice+price[i]*quantity[i];
}
在未声明atof函数时,应用atof函数,输出atof(totalprice),即:将"6279.60"转换成浮点数,但我们发现运行结果输出“0.000000”,而声明函数后运行结果输出为“6279.600000”。
lr_output_message("用atof格式化输出totalprice=%f",atof(totalprice));
为什么会这样?
LoadRunner的函数联机帮助原文描述如下:
图3-21:atof函数联机帮助
红色区域的注释信息为:“Note: The function atof, as with all functions that do not return an integer, must be explicitly declared in Vugen scripts.”,这句话的含义就是“注释:atof函数以及所有非返回整型数值的函数,必须在脚本生成器中明确指出。”,所以在应用函数时一定要看看联机帮助有无注释部分,正确应用函数。
浮点数的取值是近似值,计算可以得到1380.00*2+859.80*2+450.00*4=6279.60,而实际结果输出却是6279.600098,从而说明浮点数取的是近似值。所以不能拿两个浮点数进行比较。如:拿6279.60和6279.600098比较判断其是否相等,而应该将浮点数格式化成相同精度的字符串再进行比较,这样可以防止出现意外情况的发生。
lr_output_message("浮点数取的是近似值请看函数的输出结果:%f",ftotalprice);
格式化ftotalprice取小数点后两位,并将结果字符串存放到strtmpres,目的就是和totalprice字符串进行相同精度的比较,格式化后,输出strtmpres为“6279.60”。
sprintf(strtmpres,"%.2f",ftotalprice);
lr_output_message("保留两位小数格式化的浮点数为:%s ",strtmpres);
最后,加入逻辑控制,如果strtmpres和totalprice的内容相同,则输出“预期结果与实际结果相等!”,否则输出“预期结果与实际结果不等!”,因为两者内容相同,则输出结果为“预期结果与实际结果相等!”。
if (*strtmpres==*totalprice)
{
lr_output_message("预期结果与实际结果相等!");
}
else
{
lr_output_message("预期结果与实际结果不等!");
}
【作者提示】
1. 在应用函数时应仔细阅读函数的联机说明和示例,要特别注意有无注释,如果函数事先需要声明,则在应用之前必须先声明后使用。
2. 浮点数的取值是近似值,所以在进行等值判断时,必须取相同的精度,最好转换为字符串后再进行等值比较。
分享到:
相关推荐
### 特殊函数应用注意事项(操作技巧) #### 知识点概述 本文主要探讨了在进行性能测试过程中,特别是使用脚本语言时遇到的一些特殊函数使用上的问题及其解决方法。通过对一个具体的案例——《软件性能测试与...
为了更好地理解和使用51单片机的中断功能,本文将详细介绍51单片机中断函数的注意事项。 #### 二、中断函数概述 在51单片机编程中,中断函数是一类特殊的函数,它们用于响应外部或内部事件而执行特定的任务。与普通...
本文将深入探讨EL的使用注意事项,以及如何结合相关工具,如JSTL,进行高效开发。 1. EL基础: EL是一种表达式语言,它的主要任务是读取和设置Java对象的属性。它使用一种简洁的语法,例如`${expression}`,来访问...
内联函数(inline function)是 C++ 语言中的一种特殊函数,具有优缺点,今天我们将深入探究内联函数的定义格式、编程风格、优缺点、使用注意事项,以及与宏的区别。 首先,内联函数的定义格式是将关键字 `inline` ...
其强大的中断处理能力是其一大特色,但在编写中断服务程序时,有一些注意事项是开发者必须遵循的,本文将对此进行详细讲解。 首先,中断函数不允许带有参数传递。在C语言中,函数可以带有参数以接收外部传入的数据...
12. **拷贝构造函数、赋值运算符和析构函数**:定义这些特殊函数以确保对象正确复制和清理。 13. **避免自我拷贝**:拷贝构造函数中检查防止自我拷贝,以避免无限递归。 14. **explicit关键字**:单参数构造函数...
每个函数的使用方法、参数解释、注意事项以及实际案例都将详细呈现,帮助读者快速提升Excel技能,解决日常工作中的数据处理问题。无论是数据分析师、财务人员,还是学生,都能从中找到提升工作效率的秘密武器。
1. **特殊函数应用注意事项**:LoadRunner支持丰富的内置函数,如lr_start_transaction、lr_end_transaction等,用于管理事务。在使用这些函数时,需注意正确设置事务边界,避免误操作导致测试结果不准确。此外,...
综上所述,理解PHP中这些常见的编程注意事项对于编写高质量的PHP代码至关重要。在开发过程中,应当注意运算符的优先级、遵循变量命名的大小写规则,并正确处理序列化数据,以减少潜在的错误和问题。同时,时刻关注...
Linux操作系统CPU相关指标监控技术、Terminal Emulation(RTE)协议脚本应用、脚本编写语言基础之预处理部分内容、量体裁衣性能测试在企业中的应用、数据库性能测试方法实例讲解、特殊函数应用注意事项、指针在...
在C++编程中,构造函数是用来初始化对象的特殊函数,而使用`new`关键字则是在堆上动态分配内存。当这两者结合在一起时,有一些重要的注意事项需要遵循,以确保程序的正确性和内存管理的有效性。 首先,如果在构造...
本文主要围绕51单片机的中断函数展开,解析其工作原理和使用注意事项。 首先,中断函数的命名并不固定,例如`void Timer0() interrupt 1 using 1`中的`Timer0`是开发者自定义的函数名,用于处理定时器0的中断事件。...
8. **特殊函数应用注意事项**: - 特殊函数:了解QTP中的一些高级函数和API,如事务处理、同步点等,以及使用时需要注意的问题。 9. **文件操作**: - 如何下载并保存文件到本地:学习在测试中模拟用户对文件的...
本文将详细讨论"IAR编程注意事项",并重点关注"stopc5v"这一特定问题。这通常是针对某种特定微控制器或处理器的优化设置,如STOP模式下的电源管理。 首先,理解IAR编程的基本流程至关重要。这包括创建项目、配置...
特殊数学函数(specfun) 位函数(bitwise functions) 矩阵函数-数值代数(matfun) 字符串(strfun) 数据分析和付里叶变换(datafun) 文件输入/输出(iofun) 插值与多项式(polyfun) 时间和日期(timefun...
在使用MySQL时,有一些常见的注意事项和错误,初学者在使用过程中应多加注意。以下是使用MySQL时需要注意的一些关键知识点。 1. MySQL的配置 配置MySQL主要涉及几个核心参数:服务器的主机名(或IP地址)、端口、...
在Asp.net与C#开发领域,掌握一系列的注意事项与小技巧对于提升代码质量、确保程序稳定性和增强用户体验至关重要。以下是从给定文件中提炼出的关键知识点,它们涵盖了从基本编码规范到高级优化策略,旨在帮助开发者...