使用CI服务器对Web应用程序插件进行单元测试

时间:2012-04-27 15:50:38

标签: unit-testing web-applications plugins continuous-integration

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

  1. 清理测试环境。
  2. 安装将托管插件的Web应用程序的干净副本。
  3. 安装插件。
  4. 启用插件。
  5. 运行测试。
  6. 显然,在已安装的环境中运行测试很容易。大多数测试是通过直接调用插件的类的方法来解决的,但是必须配置框架,即使使用最少的设置,也允许调用其引导程序文件并执行适当的初始化。我尝试在我手动准备的环境中运行测试,并按预期运行。

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

    1. 解压缩框架(完成)。
    2. 创建数据库(完成)。
    3. 创建数据库用户并为其分配属性权限(已完成)。
    4. 运行Web应用程序的设置。
    5. 棘手的部分是并非所有Web应用程序都实现了命令行界面,例如Drupal的 drush ,因此我提出了两种可能的方法来完成安装:

      通过CURL模拟手动安装

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

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

      备份/恢复

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

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

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

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

      我现在想知道是否有更好的解决方案,因为上述内容对我来说都不是最佳选择。

      请注意,虽然我正在使用TeamCity,但CI服务器本身应该不是什么大问题,因为我正在使用ANT运行所有内容。因此,任何建议,甚至与另一个CI Serverm相关,都会受到欢迎(我知道Hudson,CruiseControl和BuildMaster,我可以轻松地调整一个概念)。感谢。

0 个答案:

没有答案
相关问题