1

我使用 TeamCity 7 作为 CI 服务器,我必须测试几个 Web 应用程序插件,主要是用 PHP 编写的。我熟悉 ANT 和 *Unit,但我有一个问题要解决:要正确测试插件,我的想法如下:

  1. 清理测试环境。
  2. 安装将托管插件的 Web 应用程序的干净副本。
  3. 安装插件。
  4. 启用插件。
  5. 运行测试。

显然,在已安装的环境中运行测试是容易的部分。大多数测试是通过直接调用插件的类的方法来触发的,但是必须配置框架,即使是最小的设置,以允许调用其引导文件并执行适当的初始化。我尝试在手动准备的环境中运行测试,它们按预期运行。

现在的问题是自动安装标准 Web 应用程序,最重要的是,它的配置。基本步骤如下:

  1. 在某处解压缩框架(完成)。
  2. 创建数据库(完成)。
  3. 创建一个数据库用户并为其分配属性权限(完成)。
  4. 运行 Web 应用程序的设置。

棘手的部分是并非所有 Web 应用程序都实现了命令行界面,例如Drupal 的drush,因此我提出了两种可能的方式来完成安装:

通过 CURL 模拟手动安装

  • 记下安装步骤和需要填写的表格。
  • 使用 CURL 将数据发布到每个表单。

我尝试了这种方法,仍然是手动的,结果可以接受。Web 应用程序按预期安装,并且可以使用。
但是,这需要一个可以运行应用程序的 Web 服务器。据我所知,TeamCity 代理在他们自己的、随机命名的目录中工作,并且无法通过 HTTP 请求访问其中“安装”的任何内容。

备份/恢复

  • 手动预安装 Web 应用程序并配置其基本设置。
  • 压缩应用程序的目录及其数据库的备份。
  • 在运行测试之前,解压缩代理工作目录中的目录。
  • 恢复备份的数据库。该应用程序现在将被“配置”。

这种方法有点“粗糙”,但它不需要运行 Web 服务器。尽管 Web 应用程序无法处理 HTTP 请求,但这并不重要,因为测试将针对插件的类运行。

但是,这种方法有两个主要缺点:

  • 无法运行涉及与 Web 应用程序交互的测试(例如挂钩、事件处理程序等)。
  • 由于 Web 应用程序及其数据库是预先配置的,因此它们的参数在每次运行时都是相同的。因此,不可能同时运行两个代理,例如测试两个不同的插件。

我现在想知道是否有更好的解决方案,因为上述两种方法对我来说都不是最优的。

请注意,虽然我使用的是 TeamCity,但 CI 服务器本身应该没什么大不了的,因为我使用 ANT 运行所有东西。因此,任何建议,甚至与另一个 CI Serverm 相关,都将受到欢迎(我知道 Hudson、CruiseControl 和 BuildMaster,我可以轻松地适应一个概念)。谢谢。

4

0 回答 0