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

GUI自动化测试-窗口处理问题

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

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

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

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

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

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

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

    有趣的问题!我已经有一段时间没有做过任何低级(比如Win32)Windows编程了,但我会这样做。

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

    可能有更优雅、更酷的方法来实现这一点,但这是我脑海中所记得的,只使用简单的Win32 API调用。

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

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

    (编辑:在beta测试期间,这也是一个很棒的QA工具,例如:让你的用户记录他们的行为,如果发生崩溃,你很有可能通过播放脚本轻松重现问题)

    祝你好运

    卡尔

        2
  •  2
  •   Carl Seleborg    17 年前

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

        3
  •  1
  •   Mladen Prajdic    17 年前

    使用 NUnitForms 。我在单线程和多线程应用程序中使用它们取得了巨大的成功,你不必担心句柄和类似的事情

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

    NUnitForms and failed DragDrop registration - problem of MTA vs STA

    Compiled application exe GUI testing with NUnitForms

        4
  •  0
  •   ollifant    17 年前

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

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

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

        5
  •  0
  •   ksp    17 年前

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

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