zoukankan      html  css  js  c++  java
  • LoadRunner特殊函数应用注意事项

     

    网上订购地址:  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.006279.60,从页面取得进货总额数据信息转换成浮点数以后与6279.60对比,如果相等则说明系统关于进货总额部分的处理是正确的,如果不等,说明统计错误。从页面上得到的数值为6279.60,脚本的计算结果也为6279.60,为什么系统反馈的提示始终是“预期结果与实际结果不等!”?。下面我们来看这段脚本,在此仅列出关键部分代码。

    相应脚本代码:

    #include "web_api.h"

    //double atof ( const char *string );

    Action()

    {

        char  totalprice[64]="6279.60";

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

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

        char  strtmpres[64];

        float   ftotalprice=0;

        int i;

        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时,运行结果如图319。大家可以看到脚本

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

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

    atof格式化输出totalprice0.000000

    显然这不是期望的结果。

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

    atof格式化输出totalprice6279.600000

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

    319:未声明atof函数运行结果

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

    脚本解析:

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

    //double atof ( const char *string );

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

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

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

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

        char  strtmpres[64];                               //存放格式化浮点字符串的临时变量

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

        int i;                                                      //临时整型变量

    将三组进货单价*进货数量相加,并将结果存放到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的函数联机帮助原文描述如下:

    321atof函数联机帮助

    红色区域的注释信息为:“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.606279.600098比较判断其是否相等,而应该将浮点数格式化成相同精度的字符串再进行比较,这样可以防止出现意外情况的发生。

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

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

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

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

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

        if (*strtmpres==*totalprice)

        {

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

         }

        else

        {

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

         }

    【作者提示】

    1.         在应用函数时应仔细阅读函数的联机说明和示例,要特别注意有无注释,如果函数事先需要声明,则在应用之前必须先声明后使用。

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

  • 相关阅读:
    flask + supervisor + gunicorn
    sqlacodegen 的使用
    centos 安装 postgresql
    zipfile 压缩文件
    jmeter跨线程调用和线程内调用
    获取时间
    ant+jmeter环境配置
    Jenkins环境部署
    jmeter分布式性能测试部署
    怎么在Windows Server服务器上发布jsp网站
  • 原文地址:https://www.cnblogs.com/tester2test/p/1200051.html
Copyright © 2011-2022 走看看