如何对远程托管的Web应用进行单元测试?

时间:2008-08-21 16:55:18

标签: unit-testing web-applications tdd

我熟悉TDD并在我的工作场所和自制的网络应用程序中使用它。但是,每次我在Web应用程序中使用TDD时,我都可以完全访问Web服务器。这意味着我可以更新服务器,然后直接从服务器运行我的单元测试。我的问题是,如果您使用的是第三方网络托管服务商,您如何对其进行单元测试?

你可能会争辩说,如果你的应用程序设计得很好并且你的构建过程是健全和自动化的,那么在你的生产服务器上运行单元测试是没有必要的,但我个人觉得在知道一切仍然是“绿色“经过重大更新。


对于所有回复“只是在部署前测试”和“你没有登台服务器吗?”的人,我了解你的来源。我确实有一个临时服务器和一个CI流程设置。我的单元测试确实运行,我确保它们在更新生产之前都已通过。

我意识到在一个完美的世界里,我不会关心这一点。但我以前见过它。如果文件没有更新或者没有运行SQL脚本,那么在运行单元测试时效果会立即显现,但如果没有它们,可能会被忽视很长一段时间。

我在这里问的是,如果有任何办法,如果只是为了满足我自己的强迫性欲望,在服务器上运行单元测试,我无法安装或远程安装应用程序(例如,我将只有一个FTP访问以更新文件)?

5 个答案:

答案 0 :(得分:3)

我想我可能不得不争辩说,在生产服务器上运行单元测试并不是TDD的一部分,因为从技术上讲,当你部署到生产环境时,你已经过了“开发”。

我是TDD的坚持者,当我向客户宣传这些好处时,我经常发现自己说“你不能一半采用TDD,这是全有或全无的”

您应该拥有的是某种形式的自动化测试,您可以在“部署之后”执行,但这些不是TDD的一部分。

也许你应该再看看你的过程。

答案 1 :(得分:1)

您可以在WATIRWATINSelenium之类的内容中编写功能测试,以测试在发布特定表单数据或请求特定网址后在响应页面中返回的内容。

答案 2 :(得分:1)

为了澄清:您对Web服务器有什么样的访问权限?仅限FTP或WebDAV?从你的问题来看,我猜测ssh访问不可用 - 你要删除要部署的目录中的文件。这是对的吗?

如果是这样,单元测试的答案可能是“在部署之前执行”。您可以设置由Selenium之类的自动工具驱动的功能测试,以通过Web界面远程测试您的应用程序,但这并不是单元测试,因为您只能对整个系统进行测试。

您是否考虑过设置一个临时服务器,可能是一个VMWare实例,它反映或至少模仿您的部署环境?

答案 3 :(得分:1)

什么阻止您在服务器上运行单元测试?如果您可以上传生产代码并让它在那里运行,为什么不能上传其他代码并运行它?

答案 4 :(得分:0)

我已经为使用python和httplib / urllib2的网站编写了测试工具,一般来说它本来就是矫枉过正,但在这些情况下它是合适的。不确定它是否会被广泛使用。