【问题标题】:Should GUIs have their own automated tests?GUI 是否应该有自己的自动化测试?
【发布时间】:2010-04-17 18:54:32
【问题描述】:

是否有任何理由自动化专注于 GUI(而不是它下面的东西)的测试?在我看来,GUI(以及其中的更改)应始终由真人进行测试。

您可以通过自动化 GUI 聚焦测试获得什么?我自己的经验是,GUI 聚焦测试几乎总是因为有人出于非常好的理由而改变了某些东西。他们似乎很少发现任何有趣的东西。

【问题讨论】:

    标签: testing automated-tests


    【解决方案1】:

    这是一个艰难的过程。自动化测试工具和框架做得很好,只要 GUI 没有太大变化,就值得花时间和精力。自动化测试的问题在于,它会在您最需要它时准确地崩溃:当 GUI 在开发周期中快速变化时。

    因此,我决定为我领导和管理的项目采用混合方法。我喜欢在开发周期中快速变化的 GUI 区域使用手动测试。一旦事情变得相当稳定,我们就会进行某种自动化 GUI 测试(例如用于 Web 应用程序的 Selenium),我们将其放入构建过程中以防止未来的回归。如果可能的话,QA 人员会编写自动化测试。当自动化工具的代码过于密集时,有时开发人员必须与 QA 测试人员配对才能做到这一点。

    只要我们使用正确分离关注点的良好设计实践,这种混合方法似乎就可以很好地工作,以便单元测试可以正确地执行所有底层逻辑。您必须避免的一件事是将应用程序逻辑编织到 GUI 层中。

    【讨论】:

    • 我同意您的“在开发周期后期创建自动化测试”方法,此时 GUI 更稳定。在不断变化的 GUI 上编写 GUI 自动化测试非常困难。
    【解决方案2】:

    视情况而定。

    如果您的 GUI 在您的业务逻辑上是一个相对较薄的层,并且 GUI 中的小错误对您的业务并不重要,那么您可能会选择不花时间通过单元测试彻底测试您的 GUI。这段时间或许可以更好地投入到测试更关键的代码上。

    如果您的 GUI 非常复杂并且是您的应用程序的一大卖点,那么您可能希望花时间自动和手动测试它。自动测试并不能完全取代手动测试,因为您仍然需要人工测试人员来确保 GUI 看起来正确并且界面清晰直观。

    有关测试 GUI 的更多信息,请参阅 Wikipedia - 例如通过记录鼠标和键输入并重放它。还有 a list of software 可以帮助您创建 GUI 单元测试。

    【讨论】:

    • @Robert Harvey:一个仅供内部员工使用的 GUI(可能只有其他开发人员)可能不需要像交付给客户的 GUI 那样多的测试。您应该进行成本效益分析。
    【解决方案3】:

    取决于您测试的 GUI 的“什么”部分。您是通过运行 GUI 测试来测试系统的行为,还是想测试您的 GUI 是否始终正确显示。

    在后一种情况下,这取决于您的应用程序。如果布局和设计很重要,我同意。但是,如果是一些核心功能不是布局本身的应用程序,那么投入时间来测试布局是没有意义的。最好编写 GUI 测试,通过使用 GUI 而不是一些函数调用来测试功能。这样,可以更好地模拟真实行为。

    【讨论】:

      【解决方案4】:

      人类非常擅长测试 GUI。不过,它们很贵。至少在理论上,自动化测试工具降低了测试 UI 的成本。如果您经常发布,手动 UI 测试时间可能会很快耗尽。

      我个人从未见过自动化 UI 测试工具为我参与的项目支付安装成本。他们的测试往往很脆弱,并且对布局更改反应不佳。出于这个原因,我犹豫要不要对他们充满信心。不过,我很高兴被证明是错误的。

      【讨论】:

        【解决方案5】:

        这是可能的。对于浏览器,您可以使用 selenium 等与浏览器交互的测试套件。

        【讨论】:

          【解决方案6】:

          在这种情况下,我的方法通常是对非 GUI 层进行单元测试,尽可能对 GUI 使用自动化测试,然后手动测试剩下的任何内容。我还使用手动测试进行临时缺陷检测来识别缺失的测试用例。

          对我来说,这提供了测试覆盖率与成本的最佳比率。归根结底,这取决于您要实现的目标 - 这个任务关键型软件还是一个简单的应用程序,如果失败纯粹是一种不便?

          【讨论】:

            【解决方案7】:

            你最好让可用性测试放在第一位。 除了你将如何测试单元 GUI?输出会是什么?如果有人点击某些东西并得到他“最初”正在寻找的东西?什么行为应该被视为不可接受的行为?

            你会看到大量的废话。 可用性是一个大词,但简单的可用性测试是雇用您的伴侣(最好不是您认识的人,朋友的朋友),您可能会认为他是应用程序的“目标受众”。装上camtasia/camstudio(桌面录音软件,可能会很好录他的脸)。在一张纸上给他一些任务(或者亲自,有时纸更好,因为你不会干扰 - 更逼真的场景)。看看他在做什么!

            如果他需要帮助,那么您会看到未来发展的关注部分。 永远不要试图影响那个告诉他“但是看这里是这个按钮,我认为这样更方便”之类的话的人。

            您将获得更好的此类测试输出,而不是将您的时间浪费在计算机对计算机的测试上。 GUI是人与计算机之间的接口。单元测试 gui 就像试图解析你刚刚写的书,看看它是否有用。 当然,它会消除拼写检查错误,但与本书的真正目标相比,这是一件非常小的事情。

            【讨论】:

            • 可用性测试与自动化测试并不是一回事,它的目标也不一样。
            • 我确定。但是我在单元测试界面中看不到任何意义。太多的操作和数据无法获得任何结果。我知道有些公司会像这样进行大量测试。将大型超级计算机变成任何可能的形式——但对我来说这似乎是浪费时间。
            【解决方案8】:

            是的,当然 GUI 应该有自己的单元测试。参见例如IcuTest

            问题在于 GUI 测试很复杂。一旦你解决了这个问题,世界就是你的了。

            【讨论】:

              【解决方案9】:

              如果您在 GUI 测试中有重复单调的任务,并且需要针对浏览器和操作系统的多种组合执行此操作,那么自动化 GUI 是值得的。通过维护技术,可以回答著名的问题“UI 更改将使自动化无关紧要”。

              【讨论】:

                猜你喜欢
                • 2016-08-23
                • 1970-01-01
                • 2010-12-29
                • 2011-07-21
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2010-09-18
                • 1970-01-01
                相关资源
                最近更新 更多