代码之家  ›  专栏  ›  技术社区  ›  ollifant

图形用户界面自动化测试-窗口处理问题

  •  3
  • ollifant  · 技术社区  · 16 年前

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

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

    一般来说,这个工具工作得很好,但正如我们使用的那样 窗口句柄 对于模拟用户输入,您不能做很多事情。例如,我们不可能得到控件的名称(我们只得到标题)。

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

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

    5 回复  |  直到 14 年前
        1
  •  1
  •   Lars Truijens    16 年前

    如果自动化的GUI测试工具对框架有一定的了解,那么应用程序就可以使用这些信息来生成更好或更高级的脚本。 TestComplete 例如,了解Borland的VCL和WinForms。如果使用Windows演示应用程序构建,则演示文稿基金会对此进行高级支持 build in .

        2
  •  2
  •   Carl Seleborg    16 年前

    有趣的问题!我已经有一段时间没有做过任何低级(比如win32)的Windows编程了,但下面是我要做的。

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

    可能有更优雅和更酷的方法来实现这一点,但这是我记忆中从我的头上,只使用简单的win32 api调用。

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

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

    (编辑:这也是一个很好的测试质量保证工具,例如:只要让你的用户记录他们的行为,如果发生崩溃,你就有很好的机会通过回放脚本来重现问题)

    祝你好运!

    卡尔

        3
  •  1
  •   Mladen Prajdic    15 年前

    使用 NUnitForms . 我已经在单线程和多线程应用中成功地使用了它们,您不必担心句柄和类似的东西。

    这里有一些关于努尼特形式值得阅读的帖子

    NUnitForms and failed DragDrop registration - problem of MTA vs STA

    Compiled application exe GUI testing with NUnitForms

        4
  •  0
  •   ollifant    16 年前

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

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

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

        5
  •  0
  •   ksp    15 年前

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

    Jamo Solutions公司(www.jamo solutions.com)满足移动设备(包括.NET Compact Framework应用程序)自动化测试的要求。