51Testing软件测试论坛

标题: WinRunner中进行数字比较 [打印本页]

作者: ch_800806    时间: 2006-10-12 09:27
标题: WinRunner中进行数字比较

sdlkfj7
脚本语言如下:
x=1942.8;
y=1942.80;
if (x==y)
发现判断结果总是假,哪位高手知道为什么?怎么解决呢?
作者: lzq123335    时间: 2006-10-12 13:34
本来就不相等啊!小数点位数都不一样
作者: 小李美刀    时间: 2006-10-12 14:01
我得到的判断结果是真, 没有出现你说的情况.

请问你IF 语句后面的判断结果是什么?
作者: ch_800806    时间: 2006-10-12 14:12
标题: 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 编辑 ]
作者: piao_604    时间: 2006-10-12 14:53
你用的是什么版本的,我的是7.6的,我试了试也没问题,判断结果为真,没问题
你的脚本里 tl_step("total",1,"total is wrong,"tickets"乘以"price"总计不是"total“");
                  }  这是多余的吧

[ 本帖最后由 piao_604 于 2006-10-12 15:14 编辑 ]
作者: 重新开赌    时间: 2006-10-12 15:53
你可以用index或者match函数来做!!!
作者: ch_800806    时间: 2006-10-12 16:04
标题: 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“");
作者: 小李美刀    时间: 2006-10-12 17:21
你出现上书结果,我想x和totaly应该不是1942.8和1942.80,

所以我想你可以用

pause(x);        pause(tatal);

查看 X 和 tatal 的具体值.
作者: ch_800806    时间: 2006-10-12 20:54
标题: 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 的具体值.

作者: piao_604    时间: 2006-10-13 09:56
确实没有问题,请看我的脚本与结果,结果见附件!继续关注,希望能弄明白!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");
作者: ch_800806    时间: 2006-10-13 13:02
标题: 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 ...

作者: piao_604    时间: 2006-10-13 14:07
我觉得和在哪个窗口里取的值没关系,最重要的是if (m==total)这个的判断,m=642.4, total=642.40, 比较结果确实为真,另外即使是按你的方法,我也是执行通过没有问题的,难不成真和版本有关系?sdlkfj2还有一个方法就是全部转换成int, if(int(m)==int(total)),这样应该没问题,就是比较的准确性差了,会把小数点后面的位数都给略了。
作者: ch_800806    时间: 2006-10-13 16:50
标题: 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还有一个方 ...

作者: ch_800806    时间: 2006-10-17 12:11
标题: 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);
作者: gp_jl    时间: 2006-10-17 23:46
1.我用的是V7.6,用if(x==total)是可以运行通过的;
2.compare_text()是按照字符串进行比较的。可以通过的原因是:在执行完   total=total*1;
    后,total后面的“ 0 ”已经被截掉了,所以可以通过。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2