【问题标题】:Automated testing of GUI [closed]GUI的自动化测试[关闭]
【发布时间】:2010-09-18 14:05:52
【问题描述】:

这个问题与单元测试无关。它适用于桌面产品。

这是关于测试 gui 并测试在正确的时间在正确的文本框中输入正确的内容。

我曾经工作过的一家公司使用过 WinRunner(不同的部门,所以我不太了解),但它现在已被惠普关闭,但无论你是留在惠普还是离开,他们似乎都不在乎别处。在您注册之前,您无法阅读有关该产品的信息,这很烦人。

该工具必须与 MFC 一起使用(不可协商),理想的工具也将...

  • 实现自动化。
  • 可编写脚本。
  • 自动使用不同的屏幕分辨率。
  • 能够“窥探”单个静​​态文本框等。
  • 足够直观,非程序员也可以创建脚本。
  • 拥有报告工具,包括个人用户的电子邮件。

其他 SO 用户为自动化 GUI 测试做了什么?

【问题讨论】:

    标签: user-interface testing automation


    【解决方案1】:

    我们将SAFS framework 用于 Rational Robot (RRAFS)。 WinRunner (WRAFS) 也有 SAFS 实现,看起来他们有一个新的“基于图像的测试”实现,我不熟悉。

    这个框架很好地将 UI 实现与测试脚本分开。我已经测试了由两个不同团队开发的 Web 应用程序的四个版本(一个团队使用经典 ASP,一个使用 ASP.NET),我只需要更改我的 UI 对象的应用程序映射,测试本身不需要改变。

    也就是说,框架的语言很繁琐,需要习惯。就语言结构而言,它不是很健壮,但是通过一些努力,您可以做任何您需要做的事情。这有点像 Windows Batch 语言中的“编程”,但用于测试;)

    为了满足您的上述个人要求:

    1) 该工具必须与 MFC 一起使用(不可协商)。 SAFS 框架使用第 3 方“记录回放”工具来驱动测试,例如 Rational Robot 或 Mercury WinRunner。如果该工具可以与 MFC 应用程序交互,那么框架可以。我不知道“基于图像的测试”实现如何驱动测试,但我猜它也可以与 MFC 一起使用。

    2) 自动化。 SAFS 框架与STAF framework 集成,这将允许您自动执行测试。我有一个概念验证测试,它使用 STAF 从映像池中启动 VM 映像,安装被测应用程序,运行 RRAFS 测试,并将结果放在 Web 服务器上供其他人使用。

    3) 可编写脚本。 是的,但如前所述,它不是最强大的编程语言。我编写了一个 Excel 插件,我们的测试人员用它来编写他们的测试,从而稍微简化了一些事情。

    4) 自动使用不同的屏幕分辨率。 是的,因为它在 UI 对象而不是屏幕上“隐藏”。除了“基于图像的测试”选项...

    5) 能够“窥探”单个静​​态文本框等 是的,您可以等待 UI 对象出现、消失、具有值、更改值等。

    6) 足够直观,非程序员也可以创建脚本。 经过一些训练。我们取得了有限的成功。一些 QA 人员可以编写测试,但有些困难。

    7) 拥有报告工具,包括个人用户的电子邮件。 是的,使用 STAF 框架,您可以将结果发布到 Web 服务器、发送电子邮件等。

    【讨论】:

      【解决方案2】:

      这里有很多很好的答案,但我想解决这个目标声明,特别是:

      • 足够直观,非程序员 可以创建脚本

      我能理解你为什么想要这个,但它比你想象的要困难得多。虽然您可以找到许多声称可以轻松编写脚本的工具,但在实践中,您的自动化团队中至少需要一些懂编程的人。编写相当健壮的脚本将涉及循环、if/then/else 和子例程调用中的一种或多种。不是非程序员会觉得直观的东西。

      要特别警惕您可以使用工具“记录”一个人,然后将其回放以进行测试的想法。这种“自动化”通常非常脆弱,以至于您最终会针对软件中的几乎每一次更改修改或重新录制脚本。

      【讨论】:

      • 我记得有人告诉我,对界面的微小更改不会阻止脚本在 WinRunner 中运行。 WinRunner 知道它将按下的按钮——可能是某种类似“Spy++”的代码,因此它知道将鼠标移动到哪里以及点击什么。
      • 是的,他们都有。问题不在于识别屏幕上的正确控件,而在于让测试脚本能够对时间和行为的微小变化做出合理的反应。
      • 人们必须承认的事实是,测试自动化本质上是软件开发项目,最终为您提供的软件恰好与其他软件一起做事,并告诉您它是否成功。你需要软件工程师,否则你的测试自动化很可能迟早会失败。
      【解决方案3】:

      拥有强大的 Mercury/HP 背景,我强烈建议您使用 QuickTest Professional 进行 GUI 测试。它有很多与 WinRunner 相同的功能,但没有很多代码。可以通过 QTP 界面使用最少的自定义 VB 代码(如果有的话)完成简单的 GUI 检查。可以使用 QTP 中的数据表通过简单的比较来检查框旁边的文本。

      如果你习惯 WinRunner,并且知道 VBScript(不太懂 TSL),那我肯定会看 QTP。

      就您的其他要求而言,QTP 还具有 Spy 功能,例如 WinRunner,它将列出您可以对对象执行的所有属性和操作。至于使用的简单性,在我以前的工作中,我们会让业务或系统测试人员创建简单的烟雾脚本,然后我会使用它们并对它们进行编码以进行更深入的测试(多个数据值、错误检查等)。至于报告,QTP 将对您输入的标签以及您可以输入的自定义数据进行简单的通过/失败/警告报告。因此,您可以使用 case 语句根据结果填充输出值。它不会直接发送电子邮件,但如果您与 TestDirector/QualityCenter 集成,您可以通过那里进行设置,同时自动启动脚本,并从那里参数化数据(很高兴发送回测试人员在不参与脚本本身的情况下填充数据)。

      拍拍

      【讨论】:

        【解决方案4】:

        【讨论】:

        • 阅读有关单元测试、视觉比较和浏览器 UI 测试的文章。这是针对桌面产品的。
        【解决方案5】:

        桌面或网络应用程序在这里有相同的测试模式(我在这两个方面都工作过)。

        在 UI 中放置尽可能少的逻辑并测试其下方的所有内容。所以你说,但是如果我想测试单击按钮时会发生这样那样的事情怎么办?单击该按钮时调用的方法应该调用另一个实际进行思考的类。

        您可能会说,但我正在使用一些只能存在于我的 UI 中的静态类/方法,用适配器包装它们并利用该接口以使您的代码可测试。

        您想要自动化的 GUI 测试部分应该在 UI 下方自动化。 GUI 的某些部分无法自动化。检查以确保事情“看起来正确”,或测试您是否可以看到某些元素等。所有这些都是您的人类应该做的。确保事件正确触发,并且值从您的业务对象中正确返回,这就是所有单元测试。

        从您的问题中我可以看出,您几乎已经决定需要一个自动化 GUI 测试器,但这不是这项工作的正确工具。如果您决定使用它,您就是在尝试找到做错事的最佳方法。

        如果您认为这与单元测试无关,因为您正在测试 GUI 交互,那么我可以保证您的单元测试距离您的 UI 不够近。如果是,您会觉得您要测试的大部分内容都是多余的。

        如果您不同意我的观点,请发表一些理由,我们将对此进行讨论。

        【讨论】:

        • 赞成这个答案,但我认为有时在 GUI 级别自动化是有意义的。虽然您最好不要在 GUI 代码中包含应用程序逻辑,但也许 OP 继承了一些已经这样的代码?显然,你想重构它,但你怎么知道它有效呢?
        • 这是一个庞大的传统 MFC 应用程序。为大约 2000 个类编写单元测试几乎是不可能的。目前只有少数函数有测试,只是因为它是新代码。
        • 这个答案仍然如此真实
        【解决方案6】:

        如果您正在测试网络产品,还有更多(开源)替代方案。对于桌面产品,下面是一些流行的通用桌面 GUI 自动化工具(排名不分先后)。我亲自与所有这些人一起工作过,他们都完成了工作。如果您选择使用供应商工具,请为您正在考虑的工具获取 POC,并根据总体上最适合公司的工具做出决定。一种工具可能更适合特定应用程序,但可能还有其他项目/应用程序需要考虑。

        • QuickTest Pro(HP 的 WinRunner 继任者)
        • Rational Functional Tester(IBM 的 Robot 继任者)
        • 测试伙伴

        【讨论】:

          猜你喜欢
          • 2011-07-21
          • 2010-09-10
          • 2013-04-21
          • 2011-05-06
          • 1970-01-01
          • 2011-02-26
          • 2019-07-05
          • 2011-01-27
          相关资源
          最近更新 更多