51Testing软件测试论坛

标题: winrunner对变量的检查点设置(已解决) [打印本页]

作者: 狩猎者    时间: 2006-5-16 09:23
标题: winrunner对变量的检查点设置(已解决)
比如,我录制一个windows  自带的计算器计算加法,然后建立数据驱动,可我怎么知道每次计算的数值是不是正确呢??
录入数值和显示结果都是在一个框中,如何设计才可以检查计算结果是不是正确呢?

[ 本帖最后由 狩猎者 于 2006-5-22 09:22 编辑 ]
作者: msky1025    时间: 2006-5-16 10:28
可以用pause()这个函数,作为调试来说很好用
作者: 狩猎者    时间: 2006-5-16 13:50
可以说具体点吗?我刚用不久。不太理解怎么用。谢谢了!
作者: msky1025    时间: 2006-5-16 14:08
其实我也是新手,大家互相学习,举个简单的例子看解释得对不对
public n=2,m=5,z;
z=n+m;
pause(z);
这样在运行过程中到pause语句就会弹出对话框显示变量z的值
作者: 狩猎者    时间: 2006-5-16 15:44
和我说的意思不一样。
我的意思是:z=n+m,然后我们去检查z 是否计算的正确。
当然如果只是验证一个只要插入一个检查点,我的意思是,建立数据驱动后,面对多次的计算结果,如果验证每次计算的数值是不是正确
作者: msky1025    时间: 2006-5-16 16:18
不好意思,理解错了
那把期望值建个表一一验证不就可以了吗
作者: 狩猎者    时间: 2006-5-16 17:34
呵呵,就是这个表怎么建立我不会,不知道怎么弄

你能教教我吗?谢谢了!!!!
作者: zhenhaiou    时间: 2006-5-16 19:36
在数据驱动表中增加一列“结果“,与加数和被加数一一对应对应,呵呵
作者: msky1025    时间: 2006-5-17 08:45
table="D:\\TABLE操作\\test001.xls";
rc=ddt_open(table);
if (rc==E_OK)
pause("can open table");
else
pause("can't open table");
ddt_get_row_count(table,RowCount);
for(Row=1;Row <= RowCount;Row ++)
{
line1=ddt_val_by_row(table,Row,"t1");
line2=ddt_val_by_row(table,Row,"t2");
line3=ddt_val_by_row(table,Row,"t3");
if(line1*line2==line3)
report_msg("line1="&line1",line2="&line2",line3="&line3",right.");
else
report_msg("line1="&line1",line2="&line2",line3="&line3",wrong.");
}
ddt_close(table);

借用的etheltim 代码
感觉这应该就是你想达到的效果
作者: 狩猎者    时间: 2006-5-17 09:11
感谢,感谢,我研究下,有问题再请教你啊!有msn吗?留个地址好吗?
作者: 狩猎者    时间: 2006-5-17 10:35
我在表中加入了结果列,但最后得到的结果都是第一列的数据结果,我看了数据驱动时,数值是按照设定循环的。
例如:执行了4+5=9,5+6=11,但结果信息是2个4+5=9。
作者: msky1025    时间: 2006-5-17 14:27
我试了下可以实现的啊,是不是没包进循环,方便的话贴出代码看看
作者: 狩猎者    时间: 2006-5-17 15:59
table = "default.xls";
rc = ddt_open(table, DDT_MODE_READ);
if (rc!= E_OK && rc != E_FILE_OPEN)
        pause("Cannot open table.");
ddt_get_row_count(table,table_RowCount);
for(table_Row = 1; table_Row <= table_RowCount; table_Row ++)
{
        ddt_set_row(table,table_Row);
       
        # Shell_TrayWnd
                set_window ("Shell_TrayWnd", 4);
                button_press ("Start");
       
        # BaseBar
                set_window ("BaseBar", 11);
                toolbar_select_item ("ToolbarWindow32_1", "程序(P);附件;计算器");
       
        # 计算器
                win_type ("计算器",ddt_val(table, "t1") );
                set_window ("计算器", 0);
                obj_mouse_click ("Button_3", 9, 13, LEFT);
                obj_type ("Button_3",ddt_val(table, "t2") );
                obj_mouse_click ("Button_5", 30, 20, LEFT);
                obj_mouse_click ("Button_1", 34, 14, LEFT);
                win_close ("计算器");
        line1=ddt_val_by_row(table,Row,"t1");
    line2=ddt_val_by_row(table,Row,"t2");
    line3=ddt_val_by_row(table,Row,"t3");
if(line1*line2==line3)
report_msg("line1="&line1",line2="&line2",line3="&line3",right.");
else
report_msg("line1="&line1",line2="&line2",line3="&line3",wrong.");
}
ddt_close(table);


帮我看下吧,谢谢了!!
作者: msky1025    时间: 2006-5-17 16:43
我现在的系统里面没有计算器,跑不了,你用pause测测变量取值后的情况,应该就能分析出问题
建议,发个短信问下生如火花,他比我强多了
作者: 狩猎者    时间: 2006-5-17 16:50
恩,好的, 谢谢了!
我先试试用pasue
作者: 狩猎者    时间: 2006-5-17 17:23
看了看TSL帮助,还是没明白,怎么用pasue测变量取值后的情况?:(
作者: zhenhaiou    时间: 2006-5-18 09:59
原帖由 狩猎者 于 2006-5-17 15:59 发表
table = "default.xls";
rc = ddt_open(table, DDT_MODE_READ);
if (rc!= E_OK && rc != E_FILE_OPEN)
        pause("Cannot open table.");
ddt_get_row_count(table,table_RowCount ...



你这个程序没有判断结果阿

table = "default.xls";
rc = ddt_open(table, DDT_MODE_READ);
if (rc!= E_OK && rc != E_FILE_OPEN)
        pause("Cannot open table.");
ddt_get_row_count(table,table_RowCount);
for(table_Row = 1; table_Row <= table_RowCount; table_Row ++)
{
        ddt_set_row(table,table_Row);
        
        # Shell_TrayWnd
                set_window ("Shell_TrayWnd", 4);
                button_press ("Start");
        
        # BaseBar
                set_window ("BaseBar", 11);
                toolbar_select_item ("ToolbarWindow32_1", "程序(P);附件;计算器");
        
        # 计算器
                win_type ("计算器",ddt_val(table, "t1") );
                set_window ("计算器", 0);
                obj_mouse_click ("Button_3", 9, 13, LEFT);
                obj_type ("Button_3",ddt_val(table, "t2") );
                obj_mouse_click ("Button_5", 30, 20, LEFT);
                obj_mouse_click ("Button_1", 34, 14, LEFT);

               #从计算器的结果显示框中取得结果,保存为test
                 obj_get_text ( object, out_text [, x1, y1, x2, y2 ] )或者edit_get_text ( edit, out_string );

                win_close ("计算器");
        line1=ddt_val_by_row(table,Row,"t1");
    line2=ddt_val_by_row(table,Row,"t2");



    line3=ddt_val_by_row(table,Row,"t3");

#判断结果
if(line3 == test)

report_msg("line1="&line1",line2="&line2",line3="&line3",right.");
else
report_msg("line1="&line1",line2="&line2",line3="&line3",wrong.");


}
ddt_close(table);
作者: 生如火花    时间: 2006-5-18 10:12
说实在的,XLS表的处理我现在也忘的差不多了。楼主的想法应该是验证结果是不是正确。如果是确定的数据计算(非随机的)应该是可以做到从一个表中取得期望的结果和实际结果对比。
作者: 狩猎者    时间: 2006-5-18 10:56
对,对!就是生如火花版主的意思!谢谢大家的帮助!!
我脚本现在的问题就是,它只验证,xls表中第一行的数据,剩下的无法验证。
比如我有3行数据,最后出来的结果是3行都通过了,但都是第一行的数据。

[ 本帖最后由 狩猎者 于 2006-5-18 11:38 编辑 ]
作者: 狩猎者    时间: 2006-5-18 15:56
哈哈,问题总算解决了!感谢大家的帮助!
作者: 生如火花    时间: 2006-5-18 16:47
把你解决文件的经验放出来给大家共享吧
作者: 狩猎者    时间: 2006-5-19 10:38
好的!我只是改了一个函数就好了。下面我把脚本贴出来,改的函数我用红色表示下。大家可以对比13楼的帖子看下。
table = "default.xls";
rc = ddt_open(table, DDT_MODE_READ);
if (rc!= E_OK && rc != E_FILE_OPEN)
        pause("Cannot open table.");
ddt_get_row_count(table,table_RowCount);
for(table_Row = 1; table_Row <= table_RowCount; table_Row ++)
{
        ddt_set_row(table,table_Row);
       
        # Shell_TrayWnd
                set_window ("Shell_TrayWnd", 1);
                button_press ("Start");
       
        # BaseBar
                set_window ("BaseBar", 7);
                toolbar_select_item ("ToolbarWindow32_1", "程序(P);附件;计算器");
       
        # 计算器
                win_type ("计算器",ddt_val(table, "t1") );
                set_window ("计算器", 0);
                obj_mouse_click ("Button", 21, 13, LEFT);
                obj_type ("Button",ddt_val(table, "t2") );
                obj_mouse_click ("Button_1", 24, 17, LEFT);
                obj_mouse_click ("Button_2", 54, 9, LEFT);
                win_close ("计算器");
        # 判断结果
                line1=ddt_val(table,"t1");
                line2=ddt_val(table,"t2");
        line3=ddt_val(table,"t3");
       if(line1*line2==line3)
       report_msg("line1="line1",line2="line2",line3="line3",right.");
       else
       report_msg("line1="line1",line2="line2",line3="line3",wrong.");
       
}
ddt_close(table);

[ 本帖最后由 狩猎者 于 2006-5-19 10:44 编辑 ]
作者: zhenhaiou    时间: 2006-5-19 10:49
line1=ddt_val(table,"t1");
line2=ddt_val(table,"t2");
line3=ddt_val(table,"t3");
      
line1、line2、line3都是在你的数据表中取出来的数据,
那么后面的这个判断 if(line1*line2==line3)和操作中得到结果没有任何关系阿,呵呵
作者: msky1025    时间: 2006-5-19 11:29
ddt_set_row(table,table_Row);

line1=ddt_val_by_row(table,Row,"t1");
line2=ddt_val_by_row(table,Row,"t2");
line3=ddt_val_by_row(table,Row,"t3");
哈,其实这问题不是函数问题,你在循环中的变量设错了而已,呵呵,受教了,希望以后这种贴越多越好,从里面可以学到东西
作者: 狩猎者    时间: 2006-5-19 14:30
对,对,zhenhaiou说的对啊,是我钻到误区了,多谢指正!
那如何提取这个数值呢,我用你说的函数试了下,总是不成功,说找不到gui或者就是找不到class。
作者: zhenhaiou    时间: 2006-5-19 14:57
在关闭计算器之前把结果取出来,和line3进行比较就可以
至于用什么函数,你可以去试试,我现在没有wr,不能调试
作者: zhenhaiou    时间: 2006-5-19 14:57
原帖由 狩猎者 于 2006-5-19 14:30 发表
对,对,zhenhaiou说的对啊,是我钻到误区了,多谢指正!
那如何提取这个数值呢,我用你说的函数试了下,总是不成功,说找不到gui或者就是找不到class。

gui中是不是已经学了计算器的结果显示框呢?
作者: 狩猎者    时间: 2006-5-19 16:39
是学了就是不认,郁闷,我从做了个脚本就没问题了!
现在是差不多ok了,但还有个小问题,就是返回的文本中,计算结果后面带小数点,如果计算结果是整数,那么最后判断会说错误。如:5+4=9.  可以看下windows 自带计算器就是这样的,而我们在脚本中计算5+4=9。
大家一起想想怎么处理好,我的想法只能是给整数的数据加个字符串,谁有好办法啊!

[ 本帖最后由 狩猎者 于 2006-5-19 16:43 编辑 ]
作者: zhenhaiou    时间: 2006-5-19 16:42
if(test - line3 == 0)
作者: 狩猎者    时间: 2006-5-19 16:51
标题: 真厉害,反映就是快啊!向你学习!!以后多指教啊!
下面把完整通过的脚本贴出来!
#加载GUI
    GUI_unload_all()
    GUI_load("d:\\wrtest\\yanzhengjieguo\\gui.gui");
   #数据驱动
  table = "default.xls";
  rc = ddt_open(table, DDT_MODE_READ);
    if (rc!= E_OK && rc != E_FILE_OPEN)
        pause("Cannot open table.");
ddt_get_row_count(table,table_RowCount);
for(table_Row = 1; table_Row <= table_RowCount; table_Row ++)
{
        ddt_set_row(table,table_Row);
       
        # Shell_TrayWnd
                set_window ("Shell_TrayWnd", 1);
                button_press ("Start");
       
        # BaseBar
                set_window ("BaseBar", 7);
                toolbar_select_item ("ToolbarWindow32_1", "程序(P);附件;计算器");
       
        # 计算器
                win_type ("计算器",ddt_val(table, "t1") );
                set_window ("计算器", 0);
                obj_mouse_click ("Button", 21, 13, LEFT);
                obj_type ("Button",ddt_val(table, "t2") );
                obj_mouse_click ("Button_1", 24, 17, LEFT);
                obj_get_text("LABLE1",test);
                obj_mouse_click ("Button_2", 54, 9, LEFT);
                win_close ("计算器");
        # 判断结果
                line1=ddt_val(table,"t1");
                line2=ddt_val(table,"t2");
        line3=line1*line2;
       if(test-line3 == 0)
       report_msg("line1="line1",line2="line2",test="test",line3="line3",right.");
       else
       report_msg("line1="line1",line2="line2",test="test",line3="line3",wrong.");
       
}
ddt_close(table);
作者: jianggq    时间: 2006-7-3 10:05
标题: s
sign
作者: shiwomyw    时间: 2006-8-28 16:57
整个下午都在运行这段代码,有一些不清楚,运行不过去
# 计算器
                win_type ("计算器",ddt_val(table, "t1") );
                set_window ("计算器", 0);
                obj_mouse_click ("Button", 21, 13, LEFT);
                obj_type ("Button",ddt_val(table, "t2") );
                obj_mouse_click ("Button_1", 24, 17, LEFT);
                obj_get_text("LABLE1",test);
                obj_mouse_click ("Button_2", 54, 9, LEFT);
                win_close ("计算器");
其中"button"指的是计算器的哪个按钮,对计算器的MAP是不是做处理了?
“button_1” 和“button_2”又分别是哪个按钮?
set_window ("计算器", 0);这句话起什么作用???
急切想知道!!!




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