51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3948|回复: 14
打印 上一主题 下一主题

WinRunner中进行数字比较

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2006-10-12 09:27:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

sdlkfj7
脚本语言如下:
x=1942.8;
y=1942.80;
if (x==y)
发现判断结果总是假,哪位高手知道为什么?怎么解决呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2006-10-12 13:34:41 | 只看该作者
本来就不相等啊!小数点位数都不一样
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2006-10-12 14:01:10 | 只看该作者
我得到的判断结果是真, 没有出现你说的情况.

请问你IF 语句后面的判断结果是什么?
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2006-10-12 14:12:59 | 只看该作者

WinRunner中进行数字比较

麻烦看下脚本,使用的是flight4a程序

原脚本如下:
table10 = "lesson10.xls";
rc = ddt_open(table10, DDT_MODE_READ);
if (rc!= E_OK && rc != E_FILE_OPEN)
        pause("Cannot open table.");
ddt_get_row_count(table10,table10_RowCount);
for(table10_Row = 1; table10_Row <= table10_RowCount; table10_Row ++)
{
        ddt_set_row(table10,table10_Row);
       
        # Flight Reservation
                set_window ("Flight Reservation", 3);z
                menu_select_item ("File;Open Order...");
       
        # Open Order
                set_window ("Open Order", 1);
                button_set ("Order No.", ON);
                edit_set ("Edit", ddt_val(table10,"order_num"));
                button_press ("OK");
        wait(1);       
        # Flight Reservation
                set_window ("Flight Reservation", 5);
                edit_get_text("Tickets:",tickets);
            edit_get_text("Price:",price);
            edit_get_text("Total:",total);
                price = substr(price,2);
                total = substr(total,2);
               
        wait(1);
       
        x = price*tickets;
                if (x==total)      #运行时,x是1942.8,而total是1942.80,所以判断结果总为假,执行else。但在数字上看是相等的啊
                  tl_step("total",0,"total is right,"tickets"乘以"price"总计"total"");
                else
                   tl_step("total",1,"total is wrong,"tickets"乘以"price"总计不是"total“");
                 
}
ddt_close(table10);

[ 本帖最后由 ch_800806 于 2006-10-12 15:53 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2006-10-12 14:53:53 | 只看该作者
你用的是什么版本的,我的是7.6的,我试了试也没问题,判断结果为真,没问题
你的脚本里 tl_step("total",1,"total is wrong,"tickets"乘以"price"总计不是"total“");
                  }  这是多余的吧

[ 本帖最后由 piao_604 于 2006-10-12 15:14 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2006-10-12 15:53:36 | 只看该作者
你可以用index或者match函数来做!!!
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2006-10-12 16:04:55 | 只看该作者

WinRunner中进行数字比较

不好意思的确是多了一个反括号( })
对于下面语句,
我希望它执行的是 tl_step("total",0,"total is right,"tickets"乘以"price"总计"total"");而不是  tl_step("total",1,"total is wrong,"tickets"乘以"price"总计不是"total“");
我估计你执行的是tl_step("total",1,"total is wrong,"tickets"乘以"price"总计不是"total“");
可以看下我执行的结果(在附件中),另外我有的是8.2的版本

if (x==total)      #运行时,x是1942.8,而total是1942.80,所以判断结果总为假,执行else。但在数字上看是相等的啊
                  tl_step("total",0,"total is right,"tickets"乘以"price"总计"total"");
                else
                   tl_step("total",1,"total is wrong,"tickets"乘以"price"总计不是"total“");

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2006-10-12 17:21:10 | 只看该作者
你出现上书结果,我想x和totaly应该不是1942.8和1942.80,

所以我想你可以用

pause(x);        pause(tatal);

查看 X 和 tatal 的具体值.
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2006-10-12 20:54:24 | 只看该作者

WinRunner中进行数字比较

已测试,x是1942.8     total是1942.80
另外,你写的 pause(tatal);应该是 pause(total);吧?







原帖由 小李美刀 于 2006-10-12 17:21 发表
你出现上书结果,我想x和totaly应该不是1942.8和1942.80,

所以我想你可以用

pause(x);        pause(tatal);

查看 X 和 tatal 的具体值.
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2006-10-13 09:56:29 | 只看该作者
确实没有问题,请看我的脚本与结果,结果见附件!继续关注,希望能弄明白!sdlkfj2
脚本如下:

# Flight Reservation
        win_restore ("Flight Reservation");
        set_window ("Flight Reservation", 2);
        menu_select_item ("File;New Order");
        menu_select_item ("File;Open Order...");

# Open Order
        set_window ("Open Order", 1);
        button_set ("Order No.", ON);
        edit_set ("Edit", "3");
        button_press ("OK");

# Flight Reservation
        set_window ("Flight Reservation", 3);
        menu_select_item ("File;Fax Order...");

# Fax Order No. 3
        set_window ("Fax Order No. 3", 6);
        edit_get_text("# Tickets:",tickets);
                     edit_get_text("Ticket Price:",price);
                     edit_get_text("Total:",total);
                      m=tickets*price;
                     report_msg("m==="&m);
                     report_msg("total==="&total);
                     if (m==total)
                       tl_step("total",0,"total is right");
                     else
                       tl_step("total",1,"total is not right");
                     button_press ("Cancel");

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2006-10-13 13:02:35 | 只看该作者

WinRunner中进行数字比较

hi,piao_604
你的脚本中Tickets  price和Total是在Fax order窗口中取的,在我的脚本是在Flight Reservation窗口中取的
两者是有区别的,如图
多了符号"$",所以在我的脚本中先用substr()函数先去掉$,再相乘得到total值是1942.8,而取出来的total值在
去掉$符号后,就是1942.80,两者用==比较不相等,而在数学上应该相等,要不然写这个脚本就没有意义

原帖由 piao_604 于 2006-10-13 09:56 发表
确实没有问题,请看我的脚本与结果,结果见附件!继续关注,希望能弄明白!sdlkfj2
脚本如下:

# Flight Reservation
        win_restore ("Flight Reservation");
        set_window ("Flight Reservat ...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2006-10-13 14:07:08 | 只看该作者
我觉得和在哪个窗口里取的值没关系,最重要的是if (m==total)这个的判断,m=642.4, total=642.40, 比较结果确实为真,另外即使是按你的方法,我也是执行通过没有问题的,难不成真和版本有关系?sdlkfj2还有一个方法就是全部转换成int, if(int(m)==int(total)),这样应该没问题,就是比较的准确性差了,会把小数点后面的位数都给略了。
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2006-10-13 16:50:30 | 只看该作者

WinRunner中进行数字比较

要不把你的msn告诉我,我把脚本和Gui文件传给你。看看是不是winruuner的版本问题
我的msn:grgchu@hotmail.com



原帖由 piao_604 于 2006-10-13 14:07 发表
我觉得和在哪个窗口里取的值没关系,最重要的是if (m==total)这个的判断,m=642.4, total=642.40, 比较结果确实为真,另外即使是按你的方法,我也是执行通过没有问题的,难不成真和版本有关系?sdlkfj2还有一个方 ...
回复 支持 反对

使用道具 举报

该用户从未签到

14#
 楼主| 发表于 2006-10-17 12:11:50 | 只看该作者

WinRunner中进行数字比较

想到以下解决办法,但是对于在我的例子中数字比较时为什么不能用==,而要用compare_text()。搞不懂啊,希望有人知道,告诉我一声


table10 = "lesson10.xls";
rc = ddt_open(table10, DDT_MODE_READ);
if (rc!= E_OK && rc != E_FILE_OPEN)
        pause("Cannot open table.");
ddt_get_row_count(table10,table10_RowCount);
for(table10_Row = 1; table10_Row <= table10_RowCount; table10_Row ++)
{
        ddt_set_row(table10,table10_Row);
       
        # Flight Reservation
                set_window ("Flight Reservation", 3);z
                menu_select_item ("File;Open Order...");
       
        # Open Order
                set_window ("Open Order", 1);
                button_set ("Order No.", ON);
                edit_set ("Edit", ddt_val(table10,"order_num"));
                button_press ("OK");
        wait(1);       
        # Flight Reservation
                set_window ("Flight Reservation", 5);
                edit_get_text("Tickets:",tickets);
            edit_get_text("Price:",price);
            edit_get_text("Total:",total);
                price = substr(price,2);
                total = substr(total,2);
               
        wait(1);
        x = price*tickets;
        total=total*1;
         if (compare_text(x,total))
                  tl_step("total",0,"total is right,"tickets"乘以"price"总计"total"");
         else
                  tl_step("total",1,"total is wrong,"tickets"乘以"price"总计不是"total"而是"x"");  #比较total和x值的不同
                  
}
ddt_close(table10);
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2015-11-17 09:09
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

    15#
    发表于 2006-10-17 23:46:01 | 只看该作者
    1.我用的是V7.6,用if(x==total)是可以运行通过的;
    2.compare_text()是按照字符串进行比较的。可以通过的原因是:在执行完   total=total*1;
        后,total后面的“ 0 ”已经被截掉了,所以可以通过。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-25 17:35 , Processed in 0.077874 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表