我想用 rspec-puppet 和 beaker-rspec 测试我的控制存储库(其中包含配置文件和角色)。我仍然在使用烧杯-rspec 时遇到一些问题:
- 我想单独测试配置文件,例如
profile::postgresql
查看是否已安装数据库。 - 然后我还想单独测试我的角色,例如
role::fileserver
或role::webserver
。
我已经设置了 beaker-rspec 并且它可以工作,但这需要相当长的时间,因为它会一个接一个地应用所有配置文件。我在其中看到以下问题:
- 如果有太多的配置文件被应用到 Vagrant VM,它会被污染(来自另一个运行的剩余包、文件等,因此测试不再具有代表性)
- 一些配置文件没有任何共同点,甚至可能与它们相矛盾(例如 nginx 与 apache;它们永远不会扮演一个角色,但都在 control-repo 中定义)。
我宁愿做的是:
- beaker-rspec 应该检查已经定义了哪些角色,然后为每个角色启动一个单独的虚拟机。
- 这些应该串行或(更好)并行完成。
- 我怎样才能减少每次运行的时间,特别是如果有一个相当大的具有多个角色和不同操作系统版本等的 Puppet 设置。也许选择测试类型(“仅角色测试”或“仅配置文件测试”)。
如果 beaker-rspec 测试新 VM 中的每个配置文件也可以(但我想将测试切换为其他用途)。
我怎样才能做到这一点?谢谢 :)
这里有一些不同的回应:
Beaker-rspec 没有能力为每个测试套件使用全新的 SUT(被测系统)。现在唯一的方法是为每个测试创建一个新的 _spec.rb 文件,然后在新进程中运行每个测试,例如。
bundle exec rspec spec/acceptance/profile_test_one.rb && bundle exec rspec spec/acceptance/profile_test_two.rb
对于串行或并行运行,最好在 CI 平台中执行此操作。例如,对于 Travis(或带有 Matrix 插件的 Jenkins),您将创建一个测试矩阵,每个配置文件具有不同的测试,因此它们可以并行运行。这需要非常强大的测试机器,特别是如果您使用的是大块虚拟机。
当你说减少时间时,你指的是哪一部分?Puppet 运行需要多长时间,或者让机器进入可测试状态需要多长时间?
使用 Docker 实例可以显着加快机器配置状态。
要加快 Puppet 的运行速度,这取决于什么是慢的。如果是计算,让 SUT 更大,给它更多的内核或 RAM。对于网络相关问题,您可以使用缓存。例如在 Mac 上,您可以使用 Squid 缓存所有需要的 RPM/APT 包
我通常不对角色进行验收测试。角色基本上只是元配置文件:它们不应该有逻辑并且只是配置文件的集合。
测试角色的唯一好处是在使用多个配置文件时检测冲突,但是使用 rspec-puppet 而不是验收测试可以更好地检测冲突和依赖性检查。
例如,像这样的角色:
使用验收测试来测试四个配置文件中的每一个会更容易,并编写一个 rspec-puppet 测试以确保不同的配置文件没有依赖问题或冲突。