RemoteInstall:在 VMWare 基础设施上自动测试 Windows 安装程序
一个使用虚拟化来测试 Windows 安装程序的框架。
引言
RemoteInstall 是一种实用的测试方法,并且在 我的日常工作中非常成功。我们经历了几个测试框架迭代,但无法进行任何自动化。我们尝试了昂贵的系统和开源软件。我们花了钱。我们将自动化放在首位。但它仍然是一条死胡同。
与此同时,我们疯狂地编写 MSI 安装程序。我们必须处理一个大型分布式系统,该系统具有很高的部署失败率,该系统由许多组件组成。我们有数百个升级路径,很明显我们需要自动化它。看到公司的自动化工作陷入僵局,我决定不再尝试另一个昂贵的测试系统,而是让实习生编写一个可以利用 VMWare 基础设施的简单工具。
背景
在它开始时,RemoteInstall 做以下事情
for each virtual machine {
for each snapshot {
restore the snapshot
install the software
report success or failure
}
}
够简单吗?您可以通过一个简单的配置文件开箱即用地获得此行为。这是 CruiseControl 中的输出外观。这将测试应用程序的全新安装和从各种已知快照的升级。
结果非常棒。对于成千上万的客户来说,我们在生产中的部署失败几乎为零。
然后,最终,我们在这方面做得很好,添加了许多有用的功能。如果您有多个虚拟机,则可以并行执行此操作。 RI 与构建自动化集成。它可以从网络共享等位置获取您的最新安装程序。
接下来,我们想到:为什么不在每次成功安装后运行一些测试?所以我们添加了任务和一些简单的集成。因此,您可以在远程计算机上安装后执行 JUnit 或 NUnit 测试。
这使其成为一个成熟的测试框架。我们现在用 C# 和 Java 编写测试,并通过 RI 远程运行它们,以针对多个配置运行。
实现
最新的 C# 源代码可以在 Subversion 中找到:https://remoteinstall.svn.codeplex.com/svn。以下是一些有趣的代码方面,可帮助您入门。
RemoteInstall 库是一种模块化方法,它使用配置文件中的声明性语法来驱动执行。
- 安装程序是单个安装程序,无论是 MSI 还是 DNI。
- 驱动程序执行实际安装。
- 驱动程序任务按顺序执行驱动程序(安装程序)。
- 任务是插入序列中的附加命令。
- 虚拟机电源驱动程序管理单个已启动的虚拟机快照。
VMWareTasks 用于控制 VMWare 虚拟机和快照。
RemoteInstaller 是一个命令行工具,它使用 RemoteInstall 库来驱动执行。
使用代码
从 CodePlex 下载 RemoteInstall 的最新版本。打开帮助文件并按照入门指南进行操作。
历史
- 2009/11/24:初始版本。