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

时间:2020-03-05 18:41:39  来源:igfitidea点击:

我熟悉TDD,并在工作场所和自制的Web应用程序中使用它。但是,每次我在Web应用程序中使用TDD时,我都拥有对Web服务器的完全访问权。这意味着我可以更新服务器,然后直接从服务器运行我的单元测试。我的问题是,如果我们使用的是第三方虚拟主机,如何在它们上运行单元测试?

我们可能会争辩说,如果应用程序设计良好且构建过程合理且自动化,则无需在生产服务器上运行单元测试,但就我个人而言,我知道在此之后一切仍为"绿色",因此我很安心重大更新。

对于每个回答"在部署之前进行测试"和"我们没有登台服务器?"的人来说,我都知道我们来自哪里。我确实有一个登台服务器和一个CI流程。我的单元测试确实可以运行,并且确保在更新生产之前它们都通过了。

我意识到,在一个完美的世界中,我不会为此担心。但是我以前见过。如果遗漏了更新文件或者未运行SQL脚本,则在运行单元测试时,效果会立即显现出来,但如果没有它们,可能会在相当长的时间内被忽略。

我在这里要问的是,是否有办法(如果只是为了满足自己的强迫性愿望)在无法安装应用程序或者无法将应用程序安装到其中的服务器上运行单元测试(例如,我只能通过FTP访问为了更新文件)?

解决方案

回答

我们可以使用WATIR,WATIN或者Selenium等功能编写功能测试,以测试在发布某些表单数据或者请求特定URL之后在响应页面中返回的内容。

回答

我已经为使用python和httplib / urllib2的网站编写了测试工具,这通常会显得有些过分,但是在这些情况下是合适的。不确定它是否会通用。

回答

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

我对TDD相当执着,在向客户讲讲好处时,我常常发现自己说:"我们不能一半采用TDD,或者全部或者一无所有"。

我们可能应该拥有的是某种形式的自动测试,我们可以在"部署后"执行该测试,但这不是TDD的一部分。

也许我们应该再次查看过程。

回答

为了澄清:我们对Web服务器具有哪种访问权限?仅FTP或者WebDAV?从问题来看,我猜想ssh访问不可用,我们正在将文件拖放到要部署的目录中。那是对的吗?

如果是这样,单元测试的答案很可能是"在部署之前完成"。我们可以设置由Selenium之类的自动化工具驱动的功能测试,以通过Web界面远程测试应用程序,但这并不是真正的单元测试,因为我们只限于测试整个系统。

我们是否考虑过设置作为镜像或者至少模仿部署环境的登台服务器(也许作为VMWare实例)?

回答

是什么导致我们无法在服务器上运行单元测试?如果我们可以上载生产代码并在其中运行,那么为什么不能上载其他代码并同时运行呢?