【发布时间】:2010-04-17 18:54:32
【问题描述】:
是否有任何理由自动化专注于 GUI(而不是它下面的东西)的测试?在我看来,GUI(以及其中的更改)应始终由真人进行测试。
您可以通过自动化 GUI 聚焦测试获得什么?我自己的经验是,GUI 聚焦测试几乎总是因为有人出于非常好的理由而改变了某些东西。他们似乎很少发现任何有趣的东西。
【问题讨论】:
是否有任何理由自动化专注于 GUI(而不是它下面的东西)的测试?在我看来,GUI(以及其中的更改)应始终由真人进行测试。
您可以通过自动化 GUI 聚焦测试获得什么?我自己的经验是,GUI 聚焦测试几乎总是因为有人出于非常好的理由而改变了某些东西。他们似乎很少发现任何有趣的东西。
【问题讨论】:
这是一个艰难的过程。自动化测试工具和框架做得很好,只要 GUI 没有太大变化,就值得花时间和精力。自动化测试的问题在于,它会在您最需要它时准确地崩溃:当 GUI 在开发周期中快速变化时。
因此,我决定为我领导和管理的项目采用混合方法。我喜欢在开发周期中快速变化的 GUI 区域使用手动测试。一旦事情变得相当稳定,我们就会进行某种自动化 GUI 测试(例如用于 Web 应用程序的 Selenium),我们将其放入构建过程中以防止未来的回归。如果可能的话,QA 人员会编写自动化测试。当自动化工具的代码过于密集时,有时开发人员必须与 QA 测试人员配对才能做到这一点。
只要我们使用正确分离关注点的良好设计实践,这种混合方法似乎就可以很好地工作,以便单元测试可以正确地执行所有底层逻辑。您必须避免的一件事是将应用程序逻辑编织到 GUI 层中。
【讨论】:
视情况而定。
如果您的 GUI 在您的业务逻辑上是一个相对较薄的层,并且 GUI 中的小错误对您的业务并不重要,那么您可能会选择不花时间通过单元测试彻底测试您的 GUI。这段时间或许可以更好地投入到测试更关键的代码上。
如果您的 GUI 非常复杂并且是您的应用程序的一大卖点,那么您可能希望花时间自动和手动测试它。自动测试并不能完全取代手动测试,因为您仍然需要人工测试人员来确保 GUI 看起来正确并且界面清晰直观。
有关测试 GUI 的更多信息,请参阅 Wikipedia - 例如通过记录鼠标和键输入并重放它。还有 a list of software 可以帮助您创建 GUI 单元测试。
【讨论】:
取决于您测试的 GUI 的“什么”部分。您是通过运行 GUI 测试来测试系统的行为,还是想测试您的 GUI 是否始终正确显示。
在后一种情况下,这取决于您的应用程序。如果布局和设计很重要,我同意。但是,如果是一些核心功能不是布局本身的应用程序,那么投入时间来测试布局是没有意义的。最好编写 GUI 测试,通过使用 GUI 而不是一些函数调用来测试功能。这样,可以更好地模拟真实行为。
【讨论】:
人类非常擅长测试 GUI。不过,它们很贵。至少在理论上,自动化测试工具降低了测试 UI 的成本。如果您经常发布,手动 UI 测试时间可能会很快耗尽。
我个人从未见过自动化 UI 测试工具为我参与的项目支付安装成本。他们的测试往往很脆弱,并且对布局更改反应不佳。出于这个原因,我犹豫要不要对他们充满信心。不过,我很高兴被证明是错误的。
【讨论】:
这是可能的。对于浏览器,您可以使用 selenium 等与浏览器交互的测试套件。
【讨论】:
在这种情况下,我的方法通常是对非 GUI 层进行单元测试,尽可能对 GUI 使用自动化测试,然后手动测试剩下的任何内容。我还使用手动测试进行临时缺陷检测来识别缺失的测试用例。
对我来说,这提供了测试覆盖率与成本的最佳比率。归根结底,这取决于您要实现的目标 - 这个任务关键型软件还是一个简单的应用程序,如果失败纯粹是一种不便?
【讨论】:
你最好让可用性测试放在第一位。 除了你将如何测试单元 GUI?输出会是什么?如果有人点击某些东西并得到他“最初”正在寻找的东西?什么行为应该被视为不可接受的行为?
你会看到大量的废话。 可用性是一个大词,但简单的可用性测试是雇用您的伴侣(最好不是您认识的人,朋友的朋友),您可能会认为他是应用程序的“目标受众”。装上camtasia/camstudio(桌面录音软件,可能会很好录他的脸)。在一张纸上给他一些任务(或者亲自,有时纸更好,因为你不会干扰 - 更逼真的场景)。看看他在做什么!
如果他需要帮助,那么您会看到未来发展的关注部分。 永远不要试图影响那个告诉他“但是看这里是这个按钮,我认为这样更方便”之类的话的人。
您将获得更好的此类测试输出,而不是将您的时间浪费在计算机对计算机的测试上。 GUI是人与计算机之间的接口。单元测试 gui 就像试图解析你刚刚写的书,看看它是否有用。 当然,它会消除拼写检查错误,但与本书的真正目标相比,这是一件非常小的事情。
【讨论】:
是的,当然 GUI 应该有自己的单元测试。参见例如IcuTest。
问题在于 GUI 测试很复杂。一旦你解决了这个问题,世界就是你的了。
【讨论】:
如果您在 GUI 测试中有重复单调的任务,并且需要针对浏览器和操作系统的多种组合执行此操作,那么自动化 GUI 是值得的。通过维护技术,可以回答著名的问题“UI 更改将使自动化无关紧要”。
【讨论】: