自动测试基于Web的项目

时间:2009-06-03 18:41:00

标签: testing automated-tests

最近我提出了一个问题是,花费开发时间为基于Web的项目生成自动单元测试是否值得?我的意思是它在某些时候似乎毫无用处,因为在某些时候这些项目是面向与用户/客户的交互,因此您无法预测整个可能的用户操作集,因此您可以检查显示的内容的正确性。甚至回归测试也很难完成。
所以我非常渴望了解其他有经验的开发人员的意见。

7 个答案:

答案 0 :(得分:4)

Selenium有一个很好的网络测试框架

http://seleniumhq.org/

Telerik也正在开发一个用于Web应用程序测试。

http://www.telerik.com/products/web-ui-test-studio.aspx

答案 1 :(得分:2)

是的,确实如此。我本周刚刚与我正在研究的网站发生了一个问题。我刚刚关闭了数据访问层并为我的控制器和存储库设置了单元测试,但没有设置UI交互。

我有一个非常明显的错误,如果我进行了集成测试,很容易被捕获。只有通过集成测试和UI功能测试,您才能发现应用程序的不同层相互交互方式的问题。

答案 2 :(得分:2)

如果您正在撰写大量的Javascript,那么最近已经有很多JS测试框架用于单元测试您的Javascript。

除此之外,使用Canoo,HtmlUnit,Selenium等测试Web层比单元测试更具功能性或集成性测试。如果你有很多UI改变,这些可能很难维护,但它们真的可以派上用场。记录Selenium测试非常简单,您可以让其他人(测试人员)帮助您创建和维护。只要知道维护测试需要花费成本,就需要进行平衡。

还有其他类型的测试非常适合Web层 - 尤其是模糊测试,但很多好的选项都是商业工具。一个是开源的并且插入Rails的叫做Tarantula。在Web层拥有类似的东西是一个很好的在连续集成过程中运行,并且不需要维护的形式。

答案 3 :(得分:2)

这实际上取决于Web应用程序的结构和体系结构。如果它包含应用程序逻辑层,那么该层应该易于使用自动化工具(如Visual Studio)进行单元测试。此外,使用旨在实现单元测试的框架(例如ASP.NET MVC)可以帮助实现。

答案 4 :(得分:2)

  

你无法预测整体   可能的一组用户操作,所以你   能够检查的正确性   内容显示。

您无法预测代码将要传递给的所有可能数据,或者如果它是线程的,那么您可能会遇到所有可能的竞争条件,但您仍然需要进行单元测试。为什么?因为你可以把它缩小到很多地狱。你可以预见到会发生的各种病态事情。你只需要考虑一下并获得一些经验。

用户互动也不例外。用户会尝试做某些事情,病态与否,你可以预见到它们。用户只需输入特别富有想象力的数据。你会发现程序员往往会一遍又一遍地忽略相同的条件。我保留一份清单。例如:将Unicode泵入所有内容;把结束日期后的开始日期;输入乱码数据;把标签放在一切;留下尾随换行符;尝试两次输入相同的数据;提交表格,返回并再次提交;拿一个文本文件,称之为foo.jpg并尝试将其上传为图片。你甚至可以编写一个程序来随意翻转开关和按钮,一只坏猴子,它会发现各种有趣的错误。

它常常像坐在不熟悉软件并看着他们使用它的人一样简单。打击纠正它们的冲动,只是看着它们比目鱼。它很有教育意义。 Steve Krug将此称为"Advanced Common Sense"并且有一本名为“Do not Make Me Think”的优秀书籍,涵盖便宜,简单的用户交互测试。我强烈推荐它。这是一个非常简短的开放阅读。

最后,客户自己,如果他们的期望得到妥善准备,可以成为一个梦幻般的测试套件。确保他们了解其正在进行的工作,它将有错误,他们正在帮助他们的产品更好,并且它绝对不应该用于生产数据,并让他们修补预发布版本的你的产品。他们会做各种你从未想过的事情!它们将是您有史以来最好,最真实的测试,免费!给他们一个非常简单的方法来报告错误,最好只在应用程序上的一个按钮框自动提交他们的环境和历史记录; Hiveminder上的反馈框就是一个很好的例子。快速而礼貌地回应他们的错误(即使它只是“感谢信息”),你会发现他们会很高兴你对他们的需求如此敏感!

答案 5 :(得分:1)

单元测试在TDD过程中有意义。如果不进行测试优先开发,它们没有多大价值。然而,验收测试对于软件的质量来说是一件大事。我会说接受测试是发展的圣杯。验收测试表明应用程序是否满足要求。我怎么知道何时停止开发这个功能---只有当我的所有验收测试都通过时。验收测试的自动化是一件大事,因为每次我对应用程序进行更改时,我都不必全部完成。经过几个月的开发,可能会有数百次测试,手动运行所有测试变得不可行(有时候是不可能的)。那我怎么知道我的申请是否仍然有效?

验收测试的自动化可以使用xUnit测试框架来实现,这在这里引起了混淆。如果我使用phpUnit或httpUnit创建验收测试,它是单元测试吗?我的回答是否定的。我用什么工具来创建和运行测试并不重要。验收测试是显示功能是否符合IAW要求的测试。单元测试显示类(或函数)是否满足开发人员的实现思想。单元测试对客户端(用户)没有任何价值。验收测试对客户有很多价值(因此对开发人员来说,请记住Customer Affinity

所以我强烈建议为Web应用程序创建自动验收测试

验收测试的良好框架是:

  • Sahi(sahi.co.in)
  • Silenium
  • Simpletest(我不是php的单元测试框架,但包含可用于验收测试的浏览器对象)。

<强>然而

您已经提到网站是关于用户交互的,因此测试自动化无法解决整个可用性问题。例如:测试框架显示所有测试都通过,但是由于style="display:none"中的意外div,用户无法看到表单或链接或其他页面元素。自动化测试通过,因为文档中存在div,测试框架可以“看到”它。但用户不能。手动测试会失败。

因此,所有Web应用程序都需要手动测试。自动化测试可以大大减少测试工作量(80%),但手动测试对于最终软件的质量也很重要。

对于单元测试和TDD - 它使代码质量。这对开发人员和项目的未来是有益的(即对于长达几个月的项目)。然而,TDD需要技巧。如果你有技能 - 使用它。如果你不考虑获得技能,但要注意获得技能所需的时间。通常需要大约3-6个月才能开始创建良好的单元测试和代码。如果您的项目将持续一年,我建议研究TDD并在适当的开发环境中投入时间。

答案 6 :(得分:0)

我创建了一个网络测试解决方案(docker + cucumber);它非常简单,易于理解和修改/改进。它位于网络目录中;

我的解决方案:https://github.com/gyulaweber/hosting_tests