使用 ServerSpec 测试包安装时有哪些目标或最佳实践?

What are some goals or best practices when testing a package install with ServerSpec?

所以,我已经成功地使用 Vagrant 和 Chef 将 MSI 安装到 Windows 来宾虚拟机上。哇!然后,我用 ServerSpec 编写了一些测试,检查在安装 MSI 之后,文件是否被放置在适当的位置等等。

我的问题是:在验收测试这样的软件包安装时,我应该有什么样的目标?我应该检查特定文件吗?但是如果有很多文件怎么办?还是检查每个文件的级别太低?过于接近实施细节?在为成功的软件包安装编写验收测试时,我应该达到什么水平?

就我个人而言,我从未订阅过这种级别的测试。 Windows 安装人员已有 15 年以上的工作经验,并且非常有预见性。它已经是一种声明性语言,如果您开始编写测试来验证结果,您基本上是在维护两组不同的数据。也许我错了,你自己决定。

我个人会编写测试来验证添加删除程序中是否有 1 个条目,以及它是否是您期望的版本。然后您可以更进一步验证卸载是 "clean"。您可能必须列出已知用户数据的例外情况。我能想到的唯一其他测试是安装新的和安装旧的,升级新的让你到同一个文件集。

然后我会编写测试来验证应用程序本身的功能。如果应用程序有效,则安装成功。如果失败,找出根本原因,修复应用程序或安装程序并冲洗并重复。

我使用测试驱动开发,所以我的配方中的每个资源通常都有一个测试。我先写测试。所以如果我的基本设计是:

  1. 我需要安装xxx
  2. 我需要修复 xxx 的配置文件
  3. 我需要启动xxx服务

然后我会在我的 serverspec 中编写三个测试。

  1. 检查 package 以确保安装成功
  2. 检查 file 以确保配置文件存在,模式、所有者、组和内容正确
  3. 检查 service 服务是 运行。

然后我会使用 packagefiletemplateservice 资源编写我的食谱。