3

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

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

一般来说,该工具工作正常,但由于我们使用窗口句柄来模拟用户输入,所以你不能做很多事情。例如,我们不可能获得控件的名称(我们只获得标题)。

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

有没有其他(更简单)的方式来做这些事情(例如消息队列或其他任何东西)?

4

5 回答 5

2

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

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

可能有更优雅和更酷的方法来实现它,但这是我脑海中的记忆,只使用简单的 Win32 API 调用。

我们为工作中的产品实施的另一种方法是在事件脚本中记录用户事件,例如鼠标点击和按键事件。这应该足够丰富,以便您可以让应用程序播放它,人为地将这些事件注入消息队列,并让它的行为方式与您第一次录制脚本时的行为方式相同。当您播放脚本时,您基本上模拟了用户。

除此之外,您可以记录任何重要状态(用户文档、首选项、GUI 控件层次结构等),记录脚本时一次,回放时一次。这为您提供了两组可以比较的数据,以确保一切都保持不变。该解决方案为您提供了不容易修改的测试(如果您的 GUI 更改,您必须重新记录),但提供了很棒的回归测试。

(编辑:在 beta 测试期间,这也是一个很棒的 QA 工具,例如:只需让您的用户记录他们的操作,如果发生崩溃,您很有可能只需回放脚本即可轻松重现问题)

祝你好运!

卡尔

于 2008-08-20T20:33:28.237 回答
1

如果自动化 GUI 测试工具了解编写应用程序的框架,它可以使用该信息来制作更好或更高级的脚本。例如, TestComplete了解 Borland 的 VCL 和 WinForms。如果您测试使用 Windows Presentation Foundation 构建的应用程序,则会对此构建提供高级支持。

于 2008-08-20T20:17:00.303 回答
1

使用NUnitForms。我已经将它们用于单线程和多线程应用程序并取得了巨大成功,您不必担心句柄和类似的东西

这里有一些关于 NUnitForms 的文章值得一读

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

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

于 2008-11-12T09:42:00.780 回答
0

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

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

感谢所有帮助我找到此解决方案的人!

于 2008-08-25T16:14:55.713 回答
0

Managed Spy 不为紧凑型框架应用程序提供解决方案。

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

于 2008-11-12T09:23:54.793 回答