让你的QTP永不停歇
很多人都感觉qtp脚本运行中各种意外的错误打断,导致执行失败让人头疼其实要解决很简单,设置一下脚本就可以了:
打开脚本
File->Settings
run选项卡
http://www.51testing.com/attachments/2008/09/166993_200809011530541.jpg
如图所示
出错的处理可以自己选择
可以错误弹出框、停止运行、继续下一步语句、继续下一次action循环
这样我们就可以控制错误发生时qtp的操作了
附件:
:loveliness:
不建议这样搞。。。 意义不大 设置Recovery Scenario。。。然后用Test Batch Runner批量运行 面向无人值守,还是可以的
关键是有测试人员跟我提出过这样的需求,希望等运行结束了再去看;而不是每隔一段时间去看看脚本是不是一个对话框在那里卡住了,这样就得是不是去盯着
另外QTP提供了完整的错误报告,想要做错误分析也是很方便的;有xml的结果可以分析;当然了,在测试没有结束前,xml是不完整的,无法用xml解析器去分析;但是可以自行写解析的,作为文本流去分析就可以了。利用解析也可以实现各种提醒比如email提醒等
无人值守是要向每日构建发展的不得不考虑的一环,特别是跨地域开发项目、分模块开发集成测试等等 原帖由 rcpp 于 2008-9-2 11:46 发表 http://bbs.51testing.com/images/common/back.gif
面向无人值守,还是可以的
关键是有测试人员跟我提出过这样的需求,希望等运行结束了再去看;而不是每隔一段时间去看看脚本是不是一个对话框在那里卡住了,这样就得是不是去盯着
另外QTP提供了完整的错误报告,想要 ...
假设一个case要执行的UI操作的代码有1000行,如果在前面几行就有一个控件没点到,就意味着后面所有的操作都无法进行下去了。按照默认的全局等待时间20秒来计算,单个脚本就要20000秒,如果还要这样跑多个Case,原计划半夜3个小时就能执行完的测试,结果第二天早上来一看还在前几个case中吭哧吭哧20秒跑一步,这种无人值守有啥意义。。。
目前的无人值守主要还是由良好的 Recovery Scenario,或者是由Function组织脚本通过On Error来暴力控制错误。这样的自动化测试才能有点效率 事实上,你一步出错,后面的都会fail 原帖由 hsjzfling 于 2008-9-2 13:12 发表 http://bbs.51testing.com/images/common/back.gif
假设一个case要执行的UI操作的代码有1000行,如果在前面几行就有一个控件没点到,就意味着后面所有的操作都无法进行下去了。按照默认的全局等待时间20秒来计算,单个脚本就要20000秒,如果还要这样跑多个Case,原 ...
为什么你的脚本都没有组织,1000行代码全部都是依赖关系的?
这个跟组织脚本的方式有关系,我们目前是每一行代码就是一个调用function,每一个功能点是一个function
这个失败了走下一个,怎么会一直等待
事实上你说的情况我们根本不会出现。每一个function内如果有错了function就over了。
另外你说的全局等待是指settings吧,那是可以改的。
你说的情况应该是没有脚本组织,所有用例的全部代码都写在一个action里面吧
另外出错不一定要设置跳到下一行的
setting里遇到错误的处理设置又不是只有一项
只是我们组织脚本用的是function而不是action
如果用action组织,可以让它跳入下一个action就可以了,我们之前的做法是这样的 实践出真知,实际尝试一下就知道了
我们以前一个action是一个功能点,现在一个function是一个功能点
都是可以这样应用来直接搞定
On error虽好,但抛出错误很不方便,除非你每一行代码都取一下error对象,那样代码冗余太多了
现在我们的做法就是让qtp去做错误时的操作,然后我们再解析qtp的日志,这样不需要在每一行去获取error对象而每一行的错误都可以很容易取到 :L :(
我很愿意用,但其实楼主你还是没参与现实项目才这么说。
哎...我头痛死了... 原帖由 rcpp 于 2008-9-2 13:45 发表 http://bbs.51testing.com/images/common/back.gif
为什么你的脚本都没有组织,1000行代码全部都是依赖关系的?
这个跟组织脚本的方式有关系,我们目前是每一行代码就是一个调用function,每一个功能点是一个function
这个失败了走下一个,怎么会一直等待
事 ...
那你得一开始就说清楚啊,按照你们的做法,Function 封装代码的结构才是最关键的,还有就是On Error语句的局部错误控制处理,设置反而次要了。没头没尾就说那么设置一下,会误导新人的。
10000行代码都依赖也是很正常的~举个最简单的例子,以一个购物网站为例,如果登录就失败了,那后面的所有操作还有意义么,后面哪个Action, Function不依赖登录? 原帖由 假装不在 于 2008-9-2 13:56 发表 http://bbs.51testing.com/images/common/back.gif
:L :(
我很愿意用,但其实楼主你还是没参与现实项目才这么说。
哎...我头痛死了...
大哥,现在我们用的就是这么做的
由于测试人员的需求,我已经把自动化框架第二次重写了
利用qtp的日志解析,又做了email提醒,现在还要自动发报告功能,我还没做
你试试再说,我这里只有一个action作为main(),功能点全部都是function 原帖由 hsjzfling 于 2008-9-2 14:01 发表 http://bbs.51testing.com/images/common/back.gif
那你得一开始就说清楚啊,按照你们的做法,Function 封装代码的结构才是最关键的,还有就是On Error语句的局部错误控制处理,设置反而次要了。没头没尾就说那么设置一下,会误导新人的。
10000行代码都依赖也 ...
不一定要function啊
我不是说了吗,action也可以的啊
难道用qtp做自动化的人会把自己所有功能的测试代码都写在一个action里吗?
那不是有毛病么,一个action几千行代码,疯掉了 原帖由 rcpp 于 2008-9-2 13:52 发表 http://bbs.51testing.com/images/common/back.gif
实践出真知,实际尝试一下就知道了
我们以前一个action是一个功能点,现在一个function是一个功能点
都是可以这样应用来直接搞定
On error虽好,但抛出错误很不方便,除非你每一行代码都取一下error对象,那样代码 ...
唉,你都说了一个Function为一个功能,有错就结束Function,这时不就返回了一个Err对象么,Err对象是可以随着Function的一层层调用自最底层返回给最顶层调用的,截获Err只需要在你想要的Function层次中捕获就行了 ……
你不会是只登录一下,然后把所有操作做完吧?
我们以前也是这么设计,后来抛弃了,改成每一个点都独立登录登出
一次登录然后所有操作全做完,这样脚本耦合太高了
又不是所有功能点都有执行顺序的,大部分功能点先执行后执行都是无所谓的,没有顺序关系
每一个功能点都有自己的登录登出 原帖由 hsjzfling 于 2008-9-2 14:05 发表 http://bbs.51testing.com/images/common/back.gif
唉,你都说了一个Function为一个功能,有错就结束Function,这时不就返回了一个Err对象么,Err对象是可以随着Function的一层层调用自最底层返回给最顶层调用的,截获Err只需要在你想要的Function层次中捕获就行了 ...
不对的
在一个function中,如果你返回最后一个err,这个错误无法用于诊断
比如一个function有12行代码,在第2行出错了,而你用on error resume next了,之后3到12行都错
但是抛回的是第12行的错误,你怎么知道最初的错误在哪里?
我们经过多次的试验证实了这一点,所以才没有这样做 还有就是vbs没有java那么方便可以try catch的,不能这样抛出的,你还要自己定义才行 兄弟,大哥没说你错。这个方法大哥一直在用。;P
但其实有些错误出现了,QTP也会自动停止的。这个功能不能以偏概全. 原帖由 假装不在 于 2008-9-2 14:36 发表 http://bbs.51testing.com/images/common/back.gif
兄弟,大哥没说你错。这个方法大哥一直在用。;P
但其实有些错误出现了,QTP也会自动停止的。这个功能不能以偏概全.
啊?还有错误会停止?
有没有实例?或者截个图
我现在还没遇到过;测试人员问我单个用例错误不会整个停下来吧?我说没问题……
要是还有问题,我得收回说过的话了~ 原帖由 rcpp 于 2008-9-2 14:11 发表 http://bbs.51testing.com/images/common/back.gif
不对的
在一个function中,如果你返回最后一个err,这个错误无法用于诊断
比如一个function有12行代码,在第2行出错了,而你用on error resume next了,之后3到12行都错
但是抛回的是第12行的错误,你怎么知道 ...
Function外局部使用On Error Resume Next,这样在Function内部有Error产生就会先因为暂停,将错误一层层返回到有On Error Resume Next那层,然后从这里开始继续执行下一步,可以是调用下一个Function,也可以是循环到下一个Test.
这样只会将产生的第一个错误返回。
而按照你所说,假设第2行和12都有错,返回的是12行的错的话,想要取到12行的错,那么你的脚本不是要从第2行报错后就一直吭哧吭哧执行到12行才能取到这个错?既然要执行到12行,那是不是可以认为即使有错了那你的脚本还是会执行完整个Function的所有语句?那么你所说的Function有错就会终止不就不成立了? 原帖由 hsjzfling 于 2008-9-2 15:12 发表 http://bbs.51testing.com/images/common/back.gif
Function外局部使用On Error Resume Next,这样在Function内部有Error产生就会先因为暂停,将错误一层层返回到有On Error Resume Next那层,然后从这里开始继续执行下一步,可以是调用下一个Function,也可以是循环到下一个Test.
这样只会将产生的第一个错误返回。
而按照你所说,假设第2行和12都有错,返回的是12行的错的话,想要取到12行的错,那么你的脚本不是要从第2行报错后就一直吭哧吭哧执行到12行才能取到这个错?既然要执行到12行,那是不是可以认为即使有错了那你的脚本还是会执行完整个Function的所有语句?那么你所说的Function有错就会终止不就不成立了?
嗯,是的
如果按你说的做,是这样没错
但我们不是这样做的,我们的做法是:每一次调用function是一次action的循环,所以只要settings设置为出错时运行下一个action循环,就ok了
为什么可以这样呢?很简单,把function name放到脚本的参数table里就可以了
呵呵,简单吧。我们的错误处理现在都是让qtp去做的,需要特殊对待的某些极个别用例给它们单独的action,再用场景恢复;绝大部分这样都可以搞定了
页:
[1]
2