Testing 基于web项目的自动测试

Testing 基于web项目的自动测试,testing,automated-tests,Testing,Automated Tests,最近我提出了一个问题,花开发时间为基于web的项目生成自动单元测试是否值得?我的意思是,在某些情况下,它似乎是无用的,因为在某些情况下,这些项目是面向与用户/客户交互的,因此您无法预测整个可能的用户操作集,以便能够检查所显示内容的正确性。即使是回归测试也很难做到所以我非常想知道其他有经验的开发人员的意见 是的。这周我在一个网站上遇到了一个问题。我最近刚刚关闭了数据访问层,为我的控制器和存储库设置了单元测试,但没有设置UI交互 我被一个非常明显的bug咬了一口,如果我进行集成测试,这个bug很容易

最近我提出了一个问题,花开发时间为基于web的项目生成自动单元测试是否值得?我的意思是,在某些情况下,它似乎是无用的,因为在某些情况下,这些项目是面向与用户/客户交互的,因此您无法预测整个可能的用户操作集,以便能够检查所显示内容的正确性。即使是回归测试也很难做到
所以我非常想知道其他有经验的开发人员的意见

是的。这周我在一个网站上遇到了一个问题。我最近刚刚关闭了数据访问层,为我的控制器和存储库设置了单元测试,但没有设置UI交互


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

Selenium有一个良好的web测试框架

Telerik也在开发一款用于web应用测试的软件


如果你正在编写大量Javascript,那么最近有很多JS测试框架已经出现,用于对你的Javascript进行单元测试

除此之外,使用Canoo、HtmlUnit、Selenium等测试web层更像是功能测试或集成测试,而不是单元测试。如果用户界面有很大的变化,这些可能很难维护,但它们确实可以派上用场。记录Selenium测试很容易,您可以让其他人(测试人员)帮助您创建和维护它。只需知道维护测试有一个相关的成本,需要进行平衡


还有其他类型的测试对web层非常有用——特别是模糊测试,但很多好的选择都是商业工具。一个开源并插入Rails的被称为Tarantula。在web层上运行这样的东西是一个很好的持续集成过程,不需要太多的维护。

这实际上取决于web应用程序的结构和体系结构。如果它包含一个应用程序逻辑层,那么该层应该很容易使用自动化工具(如VisualStudio)进行单元测试。此外,使用ASP.NET MVC等设计用于支持单元测试的框架也有很大帮助。

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

验收测试的自动化可以通过使用xUnit测试框架来实现,这在这里造成了混淆。如果我使用phpUnit或httpUnit创建验收测试,它是单元测试吗?我的答案是否定的。我使用什么工具来创建和运行测试并不重要。验收测试是一种显示特性是否符合要求的测试。单元测试显示类(或函数)是否满足开发人员的实现思想。单元测试对于客户端(用户)没有值。验收测试对客户有很大的价值(记住,对开发人员也是如此)

因此,我强烈建议为web应用程序创建自动验收测试

验收测试的良好框架包括:

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

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

因此,所有web应用程序都需要手动测试。自动化测试可以大大减少测试工作量(80%),但手动测试对于生成的软件的质量同样重要

至于单元测试和TDD——它提高了代码质量。这对开发人员和项目的未来都是有益的(即,对于超过两个月的项目)。然而,TDD需要技巧。如果你有这项技能,就用它吧。如果你不考虑获得技能,但要考虑时间会带来好处。通常需要3-6个月的时间来开始创建一个好的单元测试和代码。如果您的项目将持续一年以上,我建议您学习TDD,并在适当的开发环境中投入时间

你不能预测全部 可能的用户操作集,因此您可以 能够检查数据的正确性 内容显示

您无法预测代码将要传递的所有可能的数据,或者如果它是线程化的,则无法预测所有可能的竞争条件,但是您仍然需要进行单元测试。为什么?因为你可以把范围缩小很多。你可以预见将要发生的各种病态的事情。你只要想一想,积累一些经验

用户交互