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

Unit testing 使用CI服务器对Web应用程序插件进行单元测试,unit-testing,web-applications,plugins,continuous-integration,Unit Testing,Web Applications,Plugins,Continuous Integration,我使用TeamCity 7作为CI服务器,我必须测试几个Web应用程序插件,主要是用PHP编写的。我熟悉ANT和*Unit,但我有一个问题需要解决:为了正确测试插件,我的想法如下: 清理测试环境 安装将承载插件的Web应用程序的干净副本 安装插件 启用插件 运行测试 显然,在已安装的环境中运行测试很容易。大多数测试都是通过直接调用插件类的方法来启动的,但是框架必须进行配置,即使设置很少,以允许调用其引导文件并执行适当的初始化。我试着在我手动准备的环境中运行测试,它们按预期运行 现在的问题是自动化

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

  • 清理测试环境
  • 安装将承载插件的Web应用程序的干净副本
  • 安装插件
  • 启用插件
  • 运行测试
  • 显然,在已安装的环境中运行测试很容易。大多数测试都是通过直接调用插件类的方法来启动的,但是框架必须进行配置,即使设置很少,以允许调用其引导文件并执行适当的初始化。我试着在我手动准备的环境中运行测试,它们按预期运行

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

  • 将框架解压缩到某个位置(完成)
  • 创建数据库(完成)
  • 创建数据库用户并为其分配属性权限(完成)
  • 运行Web应用程序的安装程序
  • 棘手的是,并非所有Web应用程序都实现命令行界面,例如drush for Drupal,因此我提出了两种可能的方法来完成安装:

    通过CURL模拟手动安装

    • 注意安装步骤和需要填写的表格
    • 使用CURL将数据发布到每个表单
    我尝试了这个方法,仍然是手动的,结果可以接受。Web应用程序按预期安装,并且可以使用。
    但是,这需要一个Web服务器,应用程序可以在其中运行。据我所知,TeamCity代理在自己的随机命名目录中工作,其中“安装”的任何内容都无法通过HTTP请求访问

    备份/恢复

    • 手动预安装Web应用程序并配置其基本设置
    • 压缩应用程序的目录及其数据库的备份
    • 在运行测试之前,请解压缩代理工作目录中的目录
    • 还原备份的数据库。现在将“配置”应用程序
    这种方法有点“粗糙”,但不需要运行Web服务器。虽然Web应用程序将无法为HTTP请求提供服务器,但这并不一定重要,因为测试将针对插件的类运行

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

    • 涉及与Web应用程序交互的测试(例如挂钩、事件处理程序等)无法运行
    • 由于Web应用程序及其数据库是预先配置的,因此它们的参数在每次运行时都是相同的。因此,不可能同时运行两个代理,例如测试两个不同的插件
    我现在想知道是否有更好的解决方案,因为以上两种方法对我来说都不是最优的


    请注意,尽管我使用的是TeamCity,但CI服务器本身应该不是什么大不了的,因为我用ANT运行一切。因此,任何建议,即使是与另一个CI服务器相关的建议,都是受欢迎的(我知道Hudson、CruiseControl和BuildMaster,我可以很容易地修改一个概念)。谢谢。

    我想我找到了解决问题的办法。这需要一点努力,一旦我确定它确实有效,我会发布一个答案。