51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 6685|回复: 26
打印 上一主题 下一主题

[求助] 如何用QTP判断程序运行时候挂起?怎么处理

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-6-9 15:16:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
在运行参数化的自动化脚本的时候,发现有些时候程序出错挂起,不能关闭。如何教qtp判断程序挂起或者死机?如何处理这样的程序,来继续后续的操作?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

27#
发表于 2009-6-11 15:19:00 | 只看该作者
原帖由 itisok 于 2009-6-11 14:26 发表
可以用sendmessagetimeout,随便发个支持的消息,判断如果是超时返回,就挂起了。


App挂起后App自己是无法处理消息的,但我并不需要用这种方式判断,所做的仅仅是针对该问题的分析。
20楼我给出了普适的方法。
回复 支持 反对

使用道具 举报

该用户从未签到

26#
发表于 2009-6-11 14:44:26 | 只看该作者
原帖由 intothestorm 于 2009-6-10 10:01 发表
晕,dreamever你把问题搞得太复杂了
本身容易crash/hang的被测程序就不适合做自动化,自动化适合在程序稳定的后期大量的回归测试阶段做。
楼主如果你偏要虎山行 ,建议你研究一下场景恢复。

严重同意。
对于这样容易失去响应的程序,还是先让开发修改吧。我们做自动化测试的目标是减少重复测试的工作量,而不是给自己增加工作量。
回复 支持 反对

使用道具 举报

该用户从未签到

25#
发表于 2009-6-11 14:26:03 | 只看该作者

回复 23# 的帖子

可以用sendmessagetimeout,随便发个支持的消息,判断如果是超时返回,就挂起了。
回复 支持 反对

使用道具 举报

该用户从未签到

24#
发表于 2009-6-10 15:52:12 | 只看该作者
原帖由 shanxi 于 2009-6-10 13:33 发表


我用ProcessExplorer制造了一起跟hang相近的suspend事件,用我的spy工具还能得到窗口标题,我先前的猜测有些不正确,不过有时hang时窗口标题可能会变化。

网上还有一种方式,用undocumented api,风险也比较大 ...

你强~!!
回复 支持 反对

使用道具 举报

该用户从未签到

23#
发表于 2009-6-10 13:33:05 | 只看该作者
原帖由 dreamever 于 2009-6-10 13:12 发表

至少Rft是可以的,因为RFT获取窗口标题时,与这个窗口的状态是无关的.哪派该窗口已经无响应了也没关系


我用ProcessExplorer制造了一起跟hang相近的suspend事件,用我的spy工具还能得到窗口标题,我先前的猜测有些不正确,不过有时hang时窗口标题可能会变化。

网上还有一种方式,用undocumented api,风险也比较大

BOOL IsHungAppWindow(
    HWND hwnd)
*参数hwnd为欲判断窗体句柄
*返回<推测> True表示挂起 Flase表示未挂起
{
    return (NtUserQueryWindow(hwnd, WindowIsHung) != NULL);
}
回复 支持 反对

使用道具 举报

该用户从未签到

22#
发表于 2009-6-10 13:12:03 | 只看该作者
原帖由 shanxi 于 2009-6-10 12:04 发表


很怀疑在程序已经无响应的情况下,应用程序还能接收取窗口标题的消息。

实际上这种情况下,timeout后没正确匹配,截图,选择继续下一个case或者中断整个case的执行就行了。

至少Rft是可以的,因为RFT获取窗口标题时,与这个窗口的状态是无关的.哪派该窗口已经无响应了也没关系
回复 支持 反对

使用道具 举报

该用户从未签到

21#
 楼主| 发表于 2009-6-10 12:11:28 | 只看该作者

回复 19# 的帖子

我是初学者~~~qtp现在还停留在描述性编程摸索阶段~~~上面的想法挺高深,暂时还是能力不及哦。慢慢来吧,只想用一个最简单实用的。
回复 支持 反对

使用道具 举报

该用户从未签到

20#
发表于 2009-6-10 12:04:54 | 只看该作者
原帖由 dreamever 于 2009-6-10 09:23 发表

在RFT里,可以通过IWindow接口提供的getText方法获取应用程序的标题,如果程序失去响应了,那么它的标题就是xxxx(无响应),这样的话就可以对标题进行判断,如果标题中出现了无响应,则关闭相应的程序进程,而且只能关闭进 ...


很怀疑在程序已经无响应的情况下,应用程序还能接收取窗口标题的消息。

实际上这种情况下,timeout后没正确匹配,截图,选择继续下一个case或者中断整个case的执行就行了。

[ 本帖最后由 shanxi 于 2009-6-10 12:08 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

19#
发表于 2009-6-10 11:42:27 | 只看该作者
问题不很简单吗?
确定被测程序HANG住的时候是何种表现形式,然后写个程序进行监控。。。 不就OK了吗
回复 支持 反对

使用道具 举报

该用户从未签到

18#
发表于 2009-6-10 10:59:34 | 只看该作者
全乱了  一点都没看明白
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2009-6-10 10:01:57 | 只看该作者
晕,dreamever你把问题搞得太复杂了
本身容易crash/hang的被测程序就不适合做自动化,自动化适合在程序稳定的后期大量的回归测试阶段做。
楼主如果你偏要虎山行 ,建议你研究一下场景恢复。
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2009-6-10 09:23:51 | 只看该作者
原帖由 gily19821116 于 2009-6-9 18:11 发表
是的,是程序本身没有响应了,qtp就执行不下去了。想把这个状态的程序关闭,重启,继续后面的测试。这个思路不知道合适吗?怎么判断程序不响应?

在RFT里,可以通过IWindow接口提供的getText方法获取应用程序的标题,如果程序失去响应了,那么它的标题就是xxxx(无响应),这样的话就可以对标题进行判断,如果标题中出现了无响应,则关闭相应的程序进程,而且只能关闭进程,因为这个时候程序其实已经不接受你的任何指令了。
QTP里应该有类似的实现方法,可以对程序的标题进行判断,这个楼主尝试一下吧,毕竟已经不用QTP好多月。你可以获取当前桌面中所有窗口的标题,只要窗口的标题中出现了(无响应),你就关闭它,只是这种做法编码的难度有点高。恐怕还得调用window api的函数了,好象是叫findWindowEx的,具体的看一下msdn即可直接
回复 支持 反对

使用道具 举报

该用户从未签到

15#
 楼主| 发表于 2009-6-9 18:11:35 | 只看该作者

回复 14# 的帖子

是的,是程序本身没有响应了,qtp就执行不下去了。想把这个状态的程序关闭,重启,继续后面的测试。这个思路不知道合适吗?怎么判断程序不响应?
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2009-6-9 18:03:36 | 只看该作者
……别是那个程序本身就存在失去响应的问题吧……那样的话确实没什么办法,手工测试的话也没法继续了。
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2009-6-9 18:02:04 | 只看该作者

回复 11# 的帖子

不是qtp的问题,而是exe不继续执行下面的程序,但是也不弹出出错提示框。一直停在一个地方不动。显示程序没有响应。
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2009-6-9 18:00:51 | 只看该作者

回复 10# 的帖子

主动和被动判断都是可以的
主动的话就是给这个程序发消息,没响应就是挂起了
被动的话就是等待qtp执行下面语句时报错,然后通过recovery再进行相应处理
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2009-6-9 17:34:16 | 只看该作者
原帖由 gily19821116 于 2009-6-9 17:28 发表
如果是去投票没有挂起,程序挂起,而且没有windows弹出框,怎么让qtp判断?然后怎么关闭程序,继续下面的执行呢/

::yiwusuoyou::: 现在我真晕了,那你说的挂起倒底是什么意思啊……难道桌面上什么状况都没有?那你怎么知道是挂起了?
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2009-6-9 17:28:19 | 只看该作者

回复 9# 的帖子

如果是去投票没有挂起,程序挂起,而且没有windows弹出框,怎么让qtp判断?然后怎么关闭程序,继续下面的执行呢/
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2009-6-9 17:18:19 | 只看该作者
如果是出现了"程序非法关闭"的提示框,那么就是QTP没有挂起,但是被测程序挂起了。这个时候你需要首先关闭那个对话框;
可以通过杀进程的方式实现。windows下出现“程序非法关闭”提示框的时候,在进程列表中一定会出现一个进程 ddwin.exe的进程,只要关掉该进程,就可以关闭那个提示框。cmd命令行下执行tskill ddwin即可。你可以写一段vbs脚本,每10秒钟执行一次,避免因为那个提示框导致你所有的测试脚本都失败。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-16 18:17 , Processed in 0.098988 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表