自动化GUI测试

8
这个问题与单元测试无关,是关于桌面产品的。

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

我曾经工作过的一家公司使用了WinRunner(不同的部门,所以我不知道更多的信息),但现在被惠普关闭了,但他们似乎并不介意你是否留在惠普或去其他地方。你必须先注册才能阅读有关该产品的信息,这很烦人。

该工具必须与MFC(不可协商)配合使用,并且理想的工具还应该...

  • 自动化。
  • 可编写脚本。
  • 自动适应不同的屏幕分辨率。
  • 能够“窥视”每个静态文本框等。
  • 直观易懂,使非程序员也能创建脚本。
  • 具有报告工具,包括单个用户的电子邮件。

其他SO用户如何进行自动化GUI测试?

6个回答

7
我们使用SAFS framework来进行Rational Robot(RRAFS)测试。同时,也有适用于WinRunner(WRAFS)的SAFS实现,并且他们似乎有一个新的“基于图像的测试”实现,我不太熟悉。
这个框架很好地将UI实现与测试脚本分离。我已经测试了由两个不同团队开发的四个版本的Web应用程序(一个团队使用经典ASP,另一个团队使用ASP.NET),我只需要更改我的UI对象的应用程序映射,而测试本身不需要更改。
话虽如此,该框架的语言笨重且需要适应。从语言结构上看,它并不是非常健壮,但是通过一些努力,您可以完成任何需要的操作。这就像在Windows批处理语言中进行“编程”,但用于测试 ;)
针对您上面的个人要求:

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

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

3)要可编程。 是的,但正如提到的那样,它不是最强大的编程语言。我编写了一个Excel插件,我们的测试人员用它编写他们的测试,简化了一些事情。

4) 自动适应不同的屏幕分辨率。 是的,因为它查看的是 UI 对象而不是屏幕。除了“基于图像的测试”选项可能需要注意...

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

6) 直观易用,以便非程序员可以创建脚本。 需要一些培训。我们的成功有限。一些 QA 人员可以编写测试,一些则很困难。

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


4
这里有很多好的答案,但我想特别提到这个目标陈述:
- 直观易懂,非程序员也能创建脚本
我理解你为什么想要这样做,但这比你想象的要难得多。虽然你可以找到任何数量的工具来声称使编写脚本变得容易,但实际上,你需要至少一些了解编程的自动化团队成员。编写相对稳健的脚本将涉及到循环、if/then/else和子例程调用中的一个或多个。这不是非程序员会觉得直观的东西。
特别注意的是,你不能“记录”一个人使用工具,然后进行测试回放。这种“自动化”经常是如此脆弱,以至于你几乎每次更改软件都需要修改或重新录制脚本。

我记得有人告诉过我,对界面进行微小的更改并不会阻止WinRunner脚本的运行。WinRunner知道它将要按下的按钮 - 可能是一些类似于'Spy++'的代码,以便知道鼠标应该移动到哪里并点击什么。 - graham.reeds
是的,它们都有这个。问题不在于识别屏幕上正确的控件,而在于测试脚本能够合理地对时间和行为的微小变化做出反应。 - Mark Bessey
1
人们必须认识到的事实是,测试自动化本质上是一个软件开发项目,在最终为您提供仅仅是能够使用其他软件执行并告诉您是否成功的软件。您需要软件工程师来完成这个任务,否则您的测试自动化很可能迟早会失败。 - yoosiba

4

如果你有很强的Mercury/HP背景,我会强烈建议使用QuickTest Professional进行GUI测试。它具有与WinRunner相同的许多功能,但是不需要太多的代码。可以通过QTP界面进行简单的GUI检查,最少甚至不需要自定义VB代码。使用QTP中的数据表格可以进行对文本框旁边的文本的检查。

如果您习惯于WinRunner并且了解VBScript(而不是TSL),那么我肯定会建议您使用QTP。

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

Pat


2

阅读与单元测试、视觉比较和浏览器 UI 测试有关的内容。这是针对桌面产品的。 - graham.reeds

2
桌面应用程序和Web应用程序在这里有相同的测试模式(我都做过)。
尽可能少地将逻辑放在UI中,并测试UI下面的所有内容。所以你会说,但是如果我想要测试当单击按钮时发生这样那样的事情呢?当单击该按钮时调用的方法应调用另一个实际进行思考的类。
你可能会说,但我正在使用一些只能存在于我的UI中的静态类/方法,用适配器包装它们并利用该接口使您的代码可测试。
您希望自动化的GUI测试部分应在UI下方自动化。您无法自动化GUI的某些部分。确保“看起来正确”的事情或测试您是否可以看到某些元素等。所有这些都应由人类完成。确保事件正确触发,并且从业务对象中适当返回值,这就是所有单元测试。
从您的问题中,我可以看出您已经基本决定需要自动化GUI测试工具,但这不是此工作的正确工具。如果您决定使用它,您正在试图找到执行错误操作的最佳方法。
如果您认为这不是关于单元测试,因为您正在测试GUI交互,则我可以保证您与UI的单元测试不够接近。如果是这样,您会觉得大部分测试都是多余的。
如果您不同意我的观点,请发表一些理由,我们将解决这个问题。

我赞同这个答案,但我认为有时在 GUI 层面自动化是有意义的。虽然理想情况下不会将应用程序逻辑包含在 GUI 代码中,但也许 OP 继承了一些已经这样编写的代码?显然,您希望对其进行重构,但那么如何知道它是否有效呢? - Mark Bessey
这是一个庞大的遗留 MFC 应用。为约2000个类编写单元测试几乎是不可能的。目前只有一些函数有测试,而且那些测试只存在于新代码中。 - graham.reeds
这个回答仍然非常正确。 - Corey Goldberg

0

如果您正在测试 Web 产品,那么有更多的(开源)替代品可供选择。对于桌面产品,下面是一些受欢迎的常用桌面 GUI 自动化工具(无特定顺序)。我亲自使用过所有这些工具,它们都能完成任务。如果您选择使用供应商工具,请为考虑中的工具获取 POC,并根据哪种工具最适合公司的整体情况做出决策。一个工具可能更适合特定应用程序,但还有其他项目/应用程序需要考虑。

  • QuickTest Pro (HP 的 WinRunner 继承者)
  • Rational Functional Tester (IBM 的 Robot 继承者)
  • TestPartner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接