如何使用自动化测试的虚拟机?

时间:2011-06-15 14:16:07

标签: automated-tests teamcity virtualization

我正在尝试使用虚拟机环境为我们的应用程序设置自动化测试。

我想要的是类似以下情况:

  1. 构建服务器自动触发,以启动应用程序的自动测试
  2. 然后运行“构建”脚本,其中包括:
    1. 将应用程序文件和测试脚本复制到VM可访问的位置
    2. 启动VM
      1. 在VM中,特殊应用程序在共享文件夹中查找并启动测试脚本
      2. 测试脚本完成其工作,结果输出到共享文件夹
      3. 测试脚本结束
      4. 特殊应用程序然后删除测试脚本
      5. 特殊应用程序以某种方式让VM管理器关闭VM并恢复到之前的快照
    3. 当VM退出时,处理结果并发送到构建服务器。
  3. 如果重要的话,我正在使用TeamCity。 对于虚拟机,我们使用VirtualBox,但如果需要,我们可以对任何其他人开放。

    是否有任何应用程序/套件可以管理此方案?

    如果没有,那么我会自己编写代码,应该很简单但是我不确定的唯一部分是处理虚拟机。

    我需要做的是让VM在测试后自行关闭并恢复到之前的快照,因为我希望它在下一个测试中处于已知状态。

    任何指针?

3 个答案:

答案 0 :(得分:11)

我有类似的设置正在运行,我选择使用Vagrant作为我们的开发人员用于规范化开发环境的同样的事情。

虚拟机的初始状态是使用puppet编写的,但是我们没有在每次测试中从头开始运行部署脚本,每天只运行一次。

你可以使用木偶/厨师来做所有事情,但是对于VM上的所有其他操作,我们会使用Fabric脚本,因为它们也用于实际部署,并且以某种方式使我们更好地工作。总之,脚本看起来如下所示:

vagrant up   # fire up the vm, and run the puppet provisioning tool
fab vm run_test  # run tests on vm
fab local process_result  # process results on local shared folder
vagrant destroy  # destroy the vm

优势在于您的开发人员还可以使用vagrant来模仿您的生产环境,而无需自己处理(即数据库设置的更改会同步到您的所有开发人员vm的任何位置)并且相同的脚本可以是也用于生产。

答案 1 :(得分:4)

VirtualBox确实有COM API。我没有经验,但可能会使用它。一种选择是让TeamCity触发脚本来执行此操作。我建议从NAnt开始(由TeamCity原生支持),并在必要时执行PowerShell。

答案 2 :(得分:2)

虽然我对这两者都没有任何经验,但我最近听说过这个领域有几个应用程序:

http://www.infoq.com/news/2011/05/virtual_machine_test_harness

http://www.automatedqa.com/techpapers/testcomplete/automated-testing-in-virtual-labs/