GUI自动化测试-窗口句柄问题

时间:2020-03-05 18:41:16  来源:igfitidea点击:

我们公司目前正在为紧凑型框架应用程序编写GUI自动化测试工具。我们最初搜索了许多工具,但没有一个适合我们。

通过使用该工具,我们可以记录测试用例并将它们组合在一起形成测试套件。对于每个测试套件,都会生成一个应用程序,该应用程序启动被测应用程序并模拟用户输入。

通常,该工具可以正常工作,但是由于我们使用窗口句柄进行模拟用户输入,因此我们不能做很多事情。例如,我们不可能获得控件的名称(我们仅获得标题)。

使用窗口句柄的另一个问题是检查更改。目前,我们模拟了对控件的单击,并根据结果知道应用程序是否已进入下一步。

还有其他(更简单)的方式来进行此类操作(例如,消息队列或者其他任何方式)吗?

解决方案

回答

如果自动GUI测试工具具有有关框架的知识,则可以使用该信息编写应用程序,从而可以使用该信息来制作更好或者更高级的脚本。例如,TestComplete知道Borland的VCL和WinForms。如果我们测试使用Windows Presentation Foundation构建的应用程序,则对此构建具有高级支持。

回答

有趣的问题!我已经有一段时间没有做过任何低级的Windows编程了(想想Win32),但这就是我要做的。

使用命名管道,并让应用程序监听它。使用此命名管道作为通信介质,可以实现一个真正简单的协议,在此协议中,我们可以向应用程序查询控件的名称(给定控件的HWND)或者其他有用的内容。确保协议足够丰富,以便在应用程序和测试框架之间交换足够的信息。确保测试框架不会从应用程序中产生过多的"特殊行为",因为那样的话,我们就不是真正在测试功能,而是在测试框架。

可能有更优雅,更酷的方法来实现此目的,但这就是我想起的想法,仅使用简单的Win32 API调用即可。

我们为工作中的产品实现的另一种方法是在事件脚本中记录用户事件,例如鼠标单击和按键事件。它应该足够丰富,以便我们可以让应用程序对其进行回放,将这些事件人为地注入到消息队列中,并使其行为与首次记录脚本时的行为相同。回放脚本时,基本上可以模拟用户。

除此之外,我们可以在记录脚本时和播放脚本时记录任何重要状态(用户文档,首选项,GUI控件层次结构等)。这为我们提供了两组可以比较的数据,以确保例如所有内容保持不变。该解决方案为我们提供了不容易修改的测试(如果GUI更改,则必须重新记录),但是这些测试提供了出色的回归测试。

(编辑:例如,这也是beta测试期间的出色QA工具:只需让用户记录他们的操作,如果发生崩溃,我们就有很大的机会通过回放脚本轻松地重现问题)

祝你好运!

卡尔

回答

我终于找到了一种在测试应用程序和被测应用程序之间进行通信的解决方案:托管间谍。它基本上是在ManagedSpyLib之上构建的.NET应用程序。

ManagedSpyLib允许以编程方式访问另一个进程的Windows Forms控件。为此,它使用窗口挂钩和内存映射文件。

感谢所有帮助我获得此解决方案的人!

回答

托管间谍程序不为紧凑型框架应用程序提供解决方案。

Jamo Solutions公司(www.jamosolutions.com)满足在移动设备(包括.net紧凑框架应用程序)上进行自动化测试的要求。

回答

使用NUnitForms。我已经在单线程和多线程应用程序中成功使用了它们,而我们不必担心此类的句柄之类的东西

这是一些有关NUnitForms的文章,值得一读

NUnitForms和MTA与STA的DragDrop注册失败的问题

使用NUnitForms编译的应用程序exe GUI测试