fairylly 发表于 2010-3-8 18:08:19

QTP场景恢复-不同的激活方式产生的问题

场景恢复-不同的激活方式产生的问题

操作步骤:


1、增加一个场景恢复(当对象不存在时,关闭一个进程)
Resources->Recovery Scenario Manager
Object state->Select Object(选择对象:一“按钮对象”)->Recovery Operations(操作为:关闭一个进程)->Post-Recovery Test Run Options(尝试了Repeat current step and continue、Stop the test run这两种)

2、在QTP对象库(Object Repository)中,把在Recovery Scenario Manager设置的那个“按钮对象”删除;

3、加载该“场景恢复”,Test Settings设置如下:
Test Settings->Recovery->Activate recovery scenarios:On every step
这时,运行脚本,在使用到“按钮对象”的那行代码处会激活场景恢复操作,即把我设置的那个进程关闭;

但是,Test Settings中设置如下时:
Test Settings->Recovery->Activate recovery scenarios:On Error
运行脚本,在使用到“按钮对象”的那行代码,会提示找不到该对象,但并不执行场景恢复操作;


根据陈能技下面这篇blog所说,应该是不管我设置为On every step还是On Error,都不会激活场景恢复操作才是正确的啊!!
疑惑中。。。
了解的朋友请告知,谢谢了!

http://www.51testing.com/index.php?uid-130600-action-viewspace-itemid-210202

Situation #2 - Object Not in Object Repository (OR)   对象不在OR中这种错误也不会触发RS的执行!
If you try to access a object from the OR and it does not exist in the OR at all, then QTP will throw an error and RS won’t be fired. Object not found in object repository error is treated as a Script. error by QTP and is raised directly.

walker1020 发表于 2010-3-12 09:52:09

根据个人对于Recovery Scenario(RS)的使用经验来看,你对 RS 的理解有误,或者说是没有真正理解RS.
RS类似于开发语言中的异常处理,如果你做过Java 或 C++开发就容易理解了。当脚本在运行过程中遇到某些错误,而这些错误又符号某个RS的触发条件(或触发了某个RS),那么RS 就可以正常发挥作用了。

walker1020 发表于 2010-3-12 09:54:58

你的设置 Test Settings->Recovery->Activate recovery scenarios:On Error
这不是RS的触发条件! 你应该在 RS Manager的 Trigger里面选择 Test Run Error

[ 本帖最后由 walker1020 于 2010-3-12 10:25 编辑 ]

walker1020 发表于 2010-3-12 10:03:29

注意:我在2# 的回复中的“脚本在运行过程中遇到某些错误”这句话。“某些”的含义是,如果QTP遇到了下面的错误,那么QTP不会调用RS,也就无法达到你的预期目标:
1,对象在OR中不存在,或Action所对应的OR 根本就不存在;
2,Actionwas mising;
2,脚本中有语法错误,如调用函数的语句中多了或少了一个参数;
3,被调用的外部文件有错误。如Action调用了某个VBS文件,而这个文件里面的某个Function或Sub Function有语法错误。
4,。。。。
如果出现了上面的错误,那么QTP会直接弹出一个对话框,必须进行手工处理才可以。

walker1020 发表于 2010-3-12 10:05:21

目前过内外关于RS的研究比较深入的参考资料不多,因此需要你去研究、实践,才能真正掌握它。

fairylly 发表于 2010-3-12 13:59:32

回复 4# 的帖子

就我的理解,RS相当于异常处理
只是有时为了验证这个异常处理是否处理妥当
所以刻意制造一些异常情况,看其处理是否按所想的进行

我在这里制造的异常情况是:
在QTP对象库(Object Repository)中,把在Recovery Scenario Manager设置的那个“按钮对象”删除;

按“walker1020”4#及陈能技所说,这时,应该都是“QTP会直接弹出一个对话框,必须进行手工处理才可以”



就我试验的结果:

1、加载该“场景恢复”,Test Settings设置如下:
Test Settings->Recovery->Activate recovery scenarios:On every step
这时,运行脚本,在使用到“按钮对象”的那行代码处会激活场景恢复操作,即把我设置的那个进程关闭;

2、但是,Test Settings中设置如下时:
Test Settings->Recovery->Activate recovery scenarios:On Error
运行脚本,在使用到“按钮对象”的那行代码,会提示找不到该对象,但并不执行场景恢复操作;


第2种设置,即“walker1020”所说的情况;
但第1种却是不同的;
我想弄明白的是,按你们所说,应该都是第2种那样的效果才对;
为什么不同的设置,会出现第1种的效果呢?

[ 本帖最后由 fairylly 于 2010-3-12 14:00 编辑 ]

fairylly 发表于 2010-3-15 17:02:34

不解ING。。。

liaojuan 发表于 2011-1-6 09:53:53

为什么我设置了恢复场景但是他不会触发

hbycyf123 发表于 2012-9-22 12:16:37

我也试过了,删除对象不会触发,即使选择On any error。
请哪位高人指点下,什么情况下会触发?举个列字,删除对象不行,那什么可以?

026300 发表于 2012-9-22 21:51:24

没看明白lz想要表达什么意思,按照楼主的设置方式,应该是在QTP运行过程中如果object的state与lz指定的values相同则触发RS,现在既然object not found,当然不会触发RS。

walk 2010说的完全正确。

026300 发表于 2012-9-22 21:53:08

回复 6# fairylly

第二中没有激活RS是正确的,因为你设置的RS触发条件是监视object 的state,而不是test errors,这是两个不同的触发条件

hbycyf123 发表于 2012-9-24 22:19:45

没有人知道什么情况下RS会触发吗?等待高手出现。
页: [1]
查看完整版本: QTP场景恢复-不同的激活方式产生的问题