谁写自动UI测试?开发人员或测试人员?

时间:2009-08-18 23:53:51

标签: automated-tests regression-testing ui-testing

我们正处于大型项目的初始阶段,并且已经决定某种形式的自动化UI测试可能对我们有用,但还没有确切地说明这将如何起作用......

主要目标是自动化应用程序的基本安装和运行,因此如果开发人员导致严重破坏(例如:app将无法安装,网络将无法连接,窗口将不会显示等等)测试人员不必浪费时间(并为此烦恼)安装和配置损坏的版本

第二个目标是在处理重复性任务时帮助测试人员。

我的问题是:谁应该创建这些类型的测试?我们团队中隐含的假设是测试人员会这样做,但我在网上读到的所有东西似乎总是暗示开发人员会创建它们,作为一种“扩展单元测试”。

一些想法:

  • 开发人员似乎处于更好的位置,因为他们知道控件ID,类等,并且可以更好地了解应用程序的运行方式

  • 测试人员的优势在于不知道应用程序是如何工作的,因此可以生成可能更有用的测试

  • 我使用IronRubyWhite编写了一些初始脚本。这非常有用,并且足够强大,可以完成任何事情,但是你需要能够编写代码来编写UI测试

  • 我们尝试过的所有自动化UI测试工具(TestComplete等)似乎都非常复杂和脆弱,虽然测试人员可以使用它们,但它们需要大约100倍的时间并且它们不断遇到由UI测试工具引起的“意外复杂性”。

  • 我们的测试人员无法编码,虽然他们非常聪明,但当我建议测试人员可能编写简单的ruby脚本时,我所得到的都很有趣(即使所说的脚本大约100倍易于阅读和写下比看起来像是自动UI测试工具标准的乱七八糟的按钮和数据网格。

我非常感谢在开发人员和测试人员团队中尝试过UI自动化的其他人的反馈。谁做了什么,并且做得好吗?提前谢谢!

编辑:有问题的应用程序是一个C#WPF“富客户端”应用程序,它使用WCF连接到服务器

8 个答案:

答案 0 :(得分:4)

根据我的经验,可以编码的测试人员将作为开发人员转换工资以加薪。

我同意您的自动化UI测试工具。我工作的每个地方都足够丰富,可以负担得起WinRunner或LoadRunner无法让员工真正使用它。价格可能已经发生了变化,但当时,这些价格处于高位5位数到6位数的低价位(想想起家的价格)。这些产品很难使用,并且通常被安装在一个上锁的柜子里,因为每个人都害怕打破它们。

答案 1 :(得分:4)

理想情况下,最终应该是QA最终编写测试。使用程序化解决方案的问题在于使QA人员能够快速使用该工具所涉及的学习曲线。开发人员当然可以帮助解决这一学习过程并通过指导来帮助完成这一过程,但这仍然需要时间并且会拖延开发。

另一种方法是使用一个简单的GUI工具来支持一种语言(和数据脚本),并使QA能够直观地构建脚本,只在真正需要的时候深入研究语言的细节 - 开发也可以在这里涉及。

我见过的最成功的尝试肯定是后者,但设置这个是困难的部分。 Selenium适用于简单的Web应用程序和通过应用程序的简单线程。 JMeter(用于Web服务的脚本化Web对话)也运行良好...另一个选项是内部构建的测试工具 - 一种基于脚本语言(Groovy,Python,Ruby)的简单工具,允许QA通过GUI或数据文件将测试数据放入应用程序。数据文件可以是简单的属性文件,也可以是更复杂的结构化(例如YAML甚至Excel)数据文件。这样他们就可以构建基本的冒烟测试,然后将其扩展到各种场景驱动的测试中。

最后......我认为富客户端应用程序更难以这种方式进行测试,但这取决于语言的性质和可用的工具......

答案 2 :(得分:4)

在我最终切换到测试和测试自动化之前,我作为应用程序开发人员工作了7年。测试比编码更具挑战性,任何想要成功的自动化开发人员都应掌握测试技能。

前段时间我在几篇博客文章中对技能矩阵进行了思考。

如果有兴趣讨论:

http://automation-beyond.com/2009/05/28/qa-automation-skill-matrices/

感谢。

答案 3 :(得分:2)

我认为让开发人员编写测试将是最有用的。这样,您可以在整个开发周期中进行“破损检查”,而不仅仅是在结束时。如果你做夜间自动化构建,你可以捕获并修复它们很小的bug,然后再成为巨大的,平均的,食人的bug。

答案 4 :(得分:2)

测试人员提出测试的情况如何,以及开发人员实际编写的测试结果呢?

答案 5 :(得分:2)

我相信一开始它在很大程度上取决于你使用的工具。

我们公司目前使用Selenium(我们是一家Java商店)。

Selenium IDE(在Firefox中记录操作)工作正常,但开发人员需要手动纠正它对我们的webapps所犯的错误,所以QA编写测试并不合适。

我过去尝试过的一件事(取得了一些成功)是将库函数编写为Selenium函数的包装器。他们读成普通英语:

selenium.clickButton("Button Text")

...但在幕后检查按钮上的正确布局和标签,有id等。

不幸的是,这需要很多设置才能轻松编写测试。

我最近发现了一个名为Twist的工具(来自Thoughtworks,基于Eclipse引擎构建),它是Selenium的包装器,允许编写简单的英语样式测试。我希望能够为测试人员提供这个,他们可以用简单的英语写简单的断言!

它也会自动为新断言创建存根,因此测试人员可以编写测试,并在需要新代码时将它们传递给开发人员。

答案 6 :(得分:1)

我发现最合理的选择是有足够的规格,以便质量保证人员能够完成测试,基本上弄清楚他们想要在每个“屏幕”或每个组件上测试什么,并将其存根。存根应该被命名,以便它们对于他们正在测试的内容非常具有描述性。这也提供了一种结晶功能要求的方法。事实上,以这种方式提出要求特别容易,并且帮助非技术人员真正在他们自己的泥泞水域中工作。

存根可以通过QA / dev人员的组合填写。这使您可以为QA人员提供关于如何编写测试的快速培训,并且他们通常会在进一步提高工作安全性的同时对其进行抨击。

答案 7 :(得分:0)

我认为这主要取决于您的测试团队的技能水平,可用的工具以及有关开发人员和测试人员如何相互交互的团队文化。我目前的情况是我们有一个相对技术的测试团队。所有测试人员都应具备开发技能。在我们的例子中,测试人员编写UI自动化。如果您的测试团队没有这些技能,他们就不会成功。在这种情况下,开发人员可能最好为您编写UI自动化。

需要考虑的其他因素:

测试人员的其他测试任务是什么? 谁是您的客户,他们对质量的期望是什么? 开发团队的技能水平是什么?他们愿意承担测试自动化的工作?

-Ron