51Testing软件测试论坛

标题: WR的参数化数据库检查点 [打印本页]

作者: dionysus    时间: 2007-4-27 23:16
标题: WR的参数化数据库检查点
在Winrunner的三大检查点中有一个数据库检查点,可以很方便的检查、对比回放过程中被测软件对数据库的记录操作,同时它也提供一个参数化的功能,允许用户根据需求替换你要查询的条件。这里我来简单介绍一下如何设置参数化的数据库检查点
仍然是以WR自带的Flight为例,打开软件录制一个order的插入过程,脚本如下:
# Flight Reservation
set_window ("Flight Reservation", 15);
obj_type ("MSMaskWndClass","111111");
list_select_item ("Fly From:", "London");  # Item Number 2;
list_select_item ("Fly To:", "Paris");  # Item Number 3;
obj_mouse_click ("FLIGHT", 26, 57, LEFT);
# Flights Table
set_window ("Flights Table", 1);
button_press ("OK");
# Flight Reservation
set_window ("Flight Reservation", 6);
edit_set ("Name:","yangmh" );
button_press ("Insert Order");
list_check_info("Fly From:","value","London");
wait(10);
在脚本最后插入custom的数据库检查点,WR->Insert->Database Checkpoint->Custom Check 选择Specify SQL statement(这里已ODBC为例)  

next,在选择连接中点击Create,选择系统自带的Flight32(这是安装WR时自动注册上去的)

在下面的SQL语句中写入你要参数化的语句,注意,把你想要参数化的地方用问号“?”代替,并用括号括起来:
SELECT Flights.Day_Of_Week
FROM Flights, Orders  
WHERE (Orders.Customer_Name=?) AND (Flights.Departure=?) AND (Flights.Flight_Number=Orders.Flight_Number)
这里我把订票人和起飞地点参数化了,从Flight和Orders两个表中取数据并关联,最后查询符合记录中Flights.Day_Of_Week的值
如果你不确定语句是否正确,可以打开Microsoft Query 记载你的数据库并执行一下,如果正确的话它会提示你输入查询参数值并最后给出查询结果。
点击finish后WR会提示你这是一个参数化的数据库检查点,它的预期结果WR没有得到,你必须提前使用Update模式运行一下。之后可以看到数据库检查点的窗体弹出,点击ok后会提示你是否要更改选择,这里点击no

之后参数化的检查点语句会自动出现在脚本最后,但我们还需要给参数赋值,赋值语句是一个数组,你有多少个参数就写多少数组元素,且必须写在检查点语句之前:
dbvf2_params[1]="yangmh";
dbvf2_params[2]="London";
db_check("list2.cdl", "dbvf2", NO_LIMIT, dbvf2_params);
这里我想查询Customer_Name=yangmh,Departure=London的记录。
把WR调为Update模式运行一下,使WR得到Expect Result,之后再使用Verify模式运行,查检Test Result

WR已经成功取得预期结果并与verify模式下的实际结果进行对比。
同样我们可以把参数数组dbvf2_params[]放到脚本的前面,将操作中的部分函数用这个数组代替,如在Flight中输入订票人的时候可以这样写:
# Flight Reservation
set_window ("Flight Reservation", 6);
edit_set ("Name:",dbvf2_params[1]);
button_press ("Insert Order");
这样当我们想要查询其他订票人和其他起飞地点的时候只需在脚本前更改一下赋值并Update一下即可。
ps:在插入数据库检查点的语句前最好能等待一段时间,或者插入一个gui检查点,让操作完全记录到数据库中,这样Update时才能得到正确的预期结果
附件:

作者: gp_jl    时间: 2007-4-28 13:30
好文!sdlkfj3 是否可以考虑在以下部分使用数据驱动:dbvf2_params[1]="yangmh";
dbvf2_params[2]="London";
作者: dionysus    时间: 2007-4-28 15:05
考虑过这样做,但是数据库检查点一次只能保存一个预期结果,所以循环验证的时候只能有一个结果是匹配的,所以在更改赋值后必须Update一下
作者: huco7    时间: 2007-5-25 10:01
谢谢楼主的共享!!
作者: holee    时间: 2007-7-3 16:56
学习以下
作者: helius    时间: 2007-7-9 10:52
好文 以后备用学习
作者: welkatrina    时间: 2007-7-9 22:29
sdlkfj3 大家都是高手啊...................
作者: lok_198461    时间: 2007-7-20 09:05
好东西,谢谢版主分享。
作者: 蓝天伟    时间: 2007-7-20 09:17
好东西,顶一下!
作者: pangge369    时间: 2007-7-23 17:42
好东西呀!
作者: wuyuanzhe    时间: 2007-7-30 18:03
好东西啊,学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~```
作者: lok_198461    时间: 2007-7-31 08:37
不错的帖子,值得学习。
作者: 双面人    时间: 2007-11-13 15:40
好帖,被我发现了!
作者: shuishixingyu    时间: 2008-4-8 16:36
不错的贴
作者: tcjlml    时间: 2008-4-17 17:24
我照LZ的步骤全做了一遍
但是老是在update的时候出问题 说是GUI Capture Failure
是不是数据库出问题了呢
作者: superliuli1    时间: 2008-6-17 16:14
学习了  
作者: lovetest    时间: 2008-12-15 10:58
我也跟tcjlml遇到的问题一样。update模式执行的时候提示GUI Capture Failure,看不到预期结果。
作者: dionysus    时间: 2008-12-15 13:43
能否有更详细的信息?




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