谁编写自动化UI测试?开发人员还是测试人员?

13
我们正在进行一个大型项目的初步阶段,并决定自动化UI测试在某种程度上可能对我们有用,但尚未确定如何实现... 主要目标是自动安装和运行应用程序的基本操作,因此如果开发人员导致严重故障(例如:应用程序无法安装、网络无法连接、窗口无法显示等),测试人员不必浪费时间(并感到恼怒)安装和配置失败的版本。第二个目标是帮助测试人员处理重复性任务。我的问题是:谁应该创建这些测试?我们团队的内在假设是测试人员将会这样做,但我在网上读到的所有内容似乎总是暗示开发人员会创建它们,作为一种“扩展单元测试”。一些想法:
  • 开发人员似乎更有优势来做这件事,因为他们知道控件的ID、类等,并且对应用程序的工作情况有更清晰的了解。

  • 测试人员的优势在于不知道应用程序的工作方式,因此可以制定更有用的测试方案。

  • 我使用IronRubyWhite编写了一些初始脚本。这非常有效,足够强大,可以实现任何功能,但需要编写代码来编写UI测试。

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

  • 我们的测试人员无法编码,虽然他们非常聪明,但当我建议测试人员可能会编写简单的ruby脚本时,他们只是给我奇怪的眼神(尽管这些脚本比混乱的按钮和数据表格容易100倍阅读和编写,这似乎是自动化UI测试工具的标准)。

我真的很感激那些在开发人员和测试人员团队中尝试UI自动化的人提供任何反馈。谁做了什么,是否有效?先感谢您!

编辑:所涉及的应用程序是一个连接到WCF服务器的C# WPF“富客户端”应用程序。

8个回答

4
在我的经验中,会编码的测试人员会因为薪资提高而转职成为开发人员。
我同意你对于自动化UI测试工具的看法。在我曾工作过的每个能够负担得起WinRunner或LoadRunner的公司,都无法负担实际使用它们的员工。虽然现在价格可能有所改变,但当时这些产品的价格在高5位数到低6位数之间(可以想象一下一个入门级住房的价格)。这些产品难以使用,通常被放在锁着的柜子里未安装,因为每个人都担心会因为损坏它们而遭受惩罚。

1
LoadRunner是用于性能测试的工具,实际上很难掌握。问题并非在于它使用的C语言,而是在于相关性和分析网络流量的处理。至于GUI自动化测试,QTP是更好的选择。它不仅可以通过记录和回放构建测试,还可以使用VBScript编写相同的测试脚本。不过价格可能会成为一个问题。 - yoosiba

4
最好由QA编写测试。使用编程解决方案的问题在于需要QA人员学习如何使用该工具,这会增加开发时间和负担,尽管开发人员可以通过辅导来帮助他们学习。另外一种选择是使用简单的GUI工具,该工具支持一种语言(和数据脚本),并允许QA在必要时可视化构建脚本,并深入了解该语言的细节。开发人员也可以参与此过程。我见过的最成功的尝试肯定是后者,但是设置这个需要花费更多的精力。 Selenium对于简单的Web应用程序和简单的线程穿越应用程序都很好用。对于为Web服务编写脚本的JMeter也很好用。另一个选择是内部构建的测试工具-它是一个简单的工具,可以放在脚本语言(Groovy、Python、Ruby)上方,允许QA通过GUI或数据文件将测试数据输入到应用程序中。数据文件可以是简单的属性文件,或者在更复杂的情况下是结构化的数据文件(类似于YAML甚至Excel)。这样,他们可以先构建基本的Smoke测试,然后将其扩展为各种场景驱动的测试。最后...我认为丰富的客户端应用程序在这种方式下更难进行测试,但这取决于语言的性质和可用的工具...

我们决定采用让QA人员编写基本的“存根”脚本(使用易于阅读和编写的IronRuby),然后由开发人员修复代码并实现QA人员无法完成的部分的选项。希望一切顺利。 - Orion Edwards
也许你应该尝试像IBM功能测试器、HP QuickTestPro、Borland Silktest或MSVS测试版这样的产品,而不是像Selenium那样的应用程序。至于Web应用程序,还有专用库,如WebAii或WatiN,可以帮助编写脚本。总之,请让你的QA人员学习和采用。就像开发人员一样-每天都需要学习新东西。 - yoosiba

4

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

不久前,我在几篇博客文章中阐述了我的技能矩阵思考。

如果有兴趣讨论:

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

谢谢。


哦,对于安装和基本的运行自动化,不需要实际的功能测试,你并不真正需要QTP或TestComplete。试试AutoIt(它是免费的)。 - Albert Gareev
我非常怀疑任何QA的薪水能够与优秀开发人员的薪水相匹配,因此从开发转向QA似乎在职业上是一件奇怪的事情。说“测试比编码更具挑战性”是一个非常基于个人观点的说法。我两者都做,但更喜欢编码。 - vsync

3

我认为让开发人员编写测试将会非常有用。这样,你可以在整个开发周期中获得“破坏检查”,而不仅仅是在最后阶段。如果你进行每晚自动化构建,你就可以在错误变大之前捕获和修复小错误,避免它们变成巨大的、可怕的臭虫。


3
测试人员提出测试方案,而开发人员实际编写测试代码。

1
一般来说,开发人员忙于编写 QA 将要测试的代码,没有时间编写测试。我不知道你们公司的情况如何,但在我工作过的每个公司中,如果开发人员有时间编写测试,(误)管理者会批评开发人员,因为开发人员应该添加更多功能。 - Tangurena
1
ThoughtWorks的“Twist”应用程序似乎是沿着这种思路建模的。 - Orion Edwards

2
我认为最初这主要取决于你使用的工具。
我们公司目前使用Selenium(我们是一个Java工作室)。
Selenium IDE(记录Firefox中的操作)运行得还不错,但开发人员需要手动纠正它对我们的Web应用程序所做的错误,因此不适合QA编写测试。
我过去尝试过的一件事情(有些成功),是编写库函数作为Selenium函数的包装器。它们读起来像普通的英语:
selenium.clickButton("Button Text")

...但在幕后检查按钮的正确布局和标签,是否有ID等。
不幸的是,这需要很多设置才能轻松编写测试。
我最近了解到一个名为Twist(来自Thoughtworks,基于Eclipse引擎构建)的工具,它是Selenium的包装器,允许编写简单英语风格的测试。我希望能够将其提供给测试人员,他们可以用简单的英语语句编写断言!
它还会自动创建新断言的存根,因此测试人员可以编写测试,并将其传递给开发人员,如果需要新代码的话。

这基本上就是我用 Ruby 脚本所做的事情(在白色框架上进行抽象)。我的代码类似于“ok_button = window.find_button("OK"); ok_button.click”。 - Orion Edwards

1

我发现最合理的选择是拥有足够的规格,以使QA人员能够模拟测试,基本上弄清楚每个“屏幕”或每个组件要测试什么,并存根这些内容。存根应命名为对它们正在测试的内容非常描述性的名称。这也提供了一种阐明功能要求的方法。事实上,以这种方式进行需求分析特别容易,并有助于非技术人员真正通过他们自己的思维过程。

可以由QA / dev人员的组合填写桩。这样可以让您廉价培训QA人员如何编写测试,并且他们通常会将其吸收掉,因为它有助于他们的工作安全。


1
QA人员如何打桩测试?他们会编写一个包含测试的实际代码文件吗?或者递交一个充满需求的Word文档给您?我猜开发人员随后会用实际的UI自动化代码来填写这些存根? - Orion Edwards
QA实际上是函数存根,或者无论它们是什么。这些名称应该作为敏捷文档。您应该能够解析此内容,并在驼峰拆分上运行简单的拆分,以获取每个要求的粗略句子。 - Saem

0

我认为这主要取决于测试团队的技能水平、可用工具以及团队文化,特别是开发人员和测试人员之间的互动方式。 我目前的情况是,我们有一个相对技术性的测试团队。 所有测试人员都应该具备开发技能。 在我们的情况下,测试人员编写UI自动化。 如果您的测试团队没有这些技能,他们将无法成功。 在这种情况下,最好让开发人员为您编写UI自动化。

考虑其他因素:

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

-Ron


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