对网站进行单元测试
Posted
技术标签:
【中文标题】对网站进行单元测试【英文标题】:Unit Testing a Website 【发布时间】:2010-10-07 12:47:28 【问题描述】:我很想知道其他开发人员如何测试他们的网站。 php 特别是在我的情况下,但这可能跨越多种语言。我已经在一个网站上工作了一年多,我真的很想自动化我在不同版本之间进行的大量回归测试。
这个特定站点在 CodeIgniter 中,所以我对我的模型进行了一些测试。我想超越只是测试这些。但是,我敢肯定,即使是非 MVC 开发人员也必须解决这个问题。
编辑:我认为能够满足我很多测试需求的功能是能够在脚本处理结束时断言参数具有特定值。就我而言,控制器中有很多逻辑,这是我要测试的主要区域。
【问题讨论】:
【参考方案1】:对于不测试 UI 的实际单元测试,您应该只测试模型中的功能。无论如何,您的大部分功能都应该在那里。
您可能想查看Selenium 以测试您网站的用户界面。它可以记录您的操作并回放它们,或者您可以直接编辑脚本。 (来源:seleniumhq.org)
【讨论】:
型号?那很奇怪。我的 MVC 应用程序中的大部分功能(程序逻辑)都在 Controller 中。模型只是一个简单的包装器,用于将数据推送/拉取到存储(数据库或其他)。 @Milan 这取决于您的语言和编码风格。例如,Ruby 更喜欢轻型控制器和重型模型。【参考方案2】:看看TOAST。它是专门为 CodeIgniter 构建的。它使用 CI 基础架构,因此您可以通过浏览器运行所有测试测试,并将结果显示为网页 (html)。使用起来非常简单。
我建议你也测试你的控制器。测试模型没问题,但模型只是数据库存储。控制器包含所有“业务逻辑”,是大多数事情出错的地方。
【讨论】:
【参考方案3】:你试过Fitnesse吗?
它有助于创建验收测试。它们对于做这种测试很痛苦的网站特别有用。
网页内也有一些来自 unclebob 的视频。好消息是 Fitnesse 不受网站测试的限制,因此您对使用它的了解也可以与其他应用程序一起使用。
我正在做的项目是一个用 C++ 编写的桌面应用程序,它使用 Fitnesse 测试。
但是,如果您的意思是对模型进行单元测试(我认为您没有这样做),则可以使用 phpunit 库创建它们。我认为 ZEND 框架有一个类似的库。
【讨论】:
对于 web 应用程序,有许多固定装置可与 selenium 一起使用,用于在 Fitnesse 中测试 UI【参考方案4】:我们修改了 Waiter (Ruby)。它将 URL 和表单填充的“脚本”播放到 IE,我们添加了一个脚本“命令”来获取屏幕截图;将屏幕截图图像与已知良好图像(即主图像)进行比较,如果该图像不同,则将其记录下来(基本上准备了此类结果的网页),并且“人类”对主图像进行审查/ 测试图像。显然,此时有两种结果——“差异是故意的”或“存在不正确的变化”。在第一个实例中,主图像被新图像替换;在第二个我们去修复错误,并且更改将包含在下一次测试运行中
【讨论】:
比较HTML不是更容易吗?除非你也在测试你的 javascripts 等。 它是对站点视觉更改的回归测试 - 包含文件中的 CSS 更改可能会更改演示文稿 - 并且图像可能已更改。我们允许在捕获时使用 MASKS(例如显示日期/时间的位置),这在 HTML 比较中可能更难做到。我们的图像比较突出了变化领域【参考方案5】:我使用 Canoo WebTest。它是目前最好的免费网站单元测试框架。它完全可以使用 XML 编写脚本,并且不需要浏览器,因此可以从构建服务器运行。
【讨论】:
【参考方案6】:就测试网络应用而言,我听说过的一个最好的想法是创建一个脚本,该脚本将遍历站点中的所有页面并检查它们与之前扫描的差异,让您接受更改并修复回归。
一般来说,GUI 应用程序(网站是 GUI 应用程序)的自动测试是困难的并且通常是不必要的。单元测试最适合使用简单的库。
【讨论】:
这不是单元测试。除了最基本的 Web 应用程序之外,任何东西都将使用多层抽象来构建。这些应该以与任何库相同的方式进行测试。如果您不熟悉OOD,也许不要提供有关它的建议?无意冒犯,自然。 OP 没有询问单元测试,而是询问一般的 Web 应用程序测试。我对OOD很熟悉,我想我知道什么是单元测试。【参考方案7】:您可能想查看 PHPUnit http://www.phpunit.de/manual/current/en/
我已经开始在我的 PHP 项目中使用它,它非常易于使用且非常强大。特别是,学习和使用模拟: http://www.phpunit.de/manual/3.0/en/mock-objects.html
在对执行数据库操作的应用程序进行单元测试时,模拟尤其重要。
【讨论】:
以上是关于对网站进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章
[JavaWeb]_[初级]_[对Jfinal框架的Service层进行单元测试]
[JavaWeb]_[初级]_[对Jfinal框架的Service层进行单元测试]
[JavaWeb]_[初级]_[对Jfinal框架的Controller进行单元测试]