木偶,在控制回购与烧杯rspectestingangular色

我想用rspec-puppet和beaker-rspec来testing我的控制回购(具有configuration文件和angular色)。 我仍然有烧杯rspec一些麻烦:

  • 我想单独testingconfiguration文件,例如profile::postgresql并查看数据库是否已经安装。
  • 然后,我还想单独testing我的angular色,例如role::fileserverrole::webserver

我已经build立了烧杯rspec,它的工作原理,但它需要相当多的时间,因为它将一个接一个地应用所有的configuration文件。 我看到以下问题:

  • 如果将过多的configuration文件应用到Vagrant虚拟机上,将会受到污染(来自另一个运行的剩余软件包,文件等等,以致testing不再具有代表性)
  • 一些configuration文件没有任何共同之处,甚至可能与它们相矛盾(例如,nginx与apache;它们永远不会在一个angular色中,但都在控制回购中定义)。

我宁愿做的是:

  • beaker-rspec应该检查已经定义了哪些angular色 ,然后为每个angular色启动一个单独的虚拟机。
  • 这些应该连续地或者(更好地)并行地完成。
  • 如何减less每次运行的时间,特别是如果有一个相当大的Puppet设置与多个angular色和不同的操作系统版本等。也许selecttesting的types(“只有angular色testing”或“唯一configuration文件testing”)。

如果beaker-rspectesting新虚拟机中的每个configuration文件(但是接下来我想切换其他用法的testing),也是可以的。

我怎样才能做到这一点? 谢谢 :)

这里有几个不同的答案:

beaker-rspec应该检查已经定义了哪些angular色,然后为每个angular色启动一个单独的虚拟机。 这些应该连续地或者(更好地)并行地完成。

烧杯rspec没有能力使用每个testing套件一个全新的SUT(被测系统)。 现在唯一的方法是每个testing创build一个新的_spec.rb文件,然后在新的进程中运行每个testing,例如。 bundle exec rspec spec/acceptance/profile_test_one.rb && bundle exec rspec spec/acceptance/profile_test_two.rb

对于串行或并行运行,最好在CI平台中完成。 所以对于Travis(或者Matrix插件中的Jenkins),例如,您可以创build一个testingmatrix,每个configuration文件具有不同的testing,因此它们可以并行运行。 这需要function强大的testing机器,特别是在使用笨重的虚拟机时。

如何减less每次运行的时间,特别是如果有一个相当大的Puppet设置与多个angular色和不同的操作系统版本等。也许selecttesting的types(“只有angular色testing”或“唯一configuration文件testing”)。

当你说减less时间,你的意思是哪一部分? 傀儡运行需要多长时间,或者机器需要多长时间才能进入可testing状态?

使用Docker实例显着加快了机器configuration状态。

为了加速木偶运行,这取决于什么是缓慢的。 如果是计算,使SUT更大,给它更多的内核或内存。 对于networking相关的问题,您可以使用caching。 例如在Mac上, 您可以使用Squid来caching所有必需的RPM / APT软件包

我通常不会为angular色进行验收testing。 angular色基本上只是元configuration文件:他们不应该有逻辑,只是一个configuration文件的集合。

testingangular色的唯一好处是使用多个configuration文件时检测到冲突,但是使用rspec-puppet而不是验收testing可以更好地检测冲突和依赖性检查。

举个例子,像这样的angular色:

 class role::foo_blog { include profile::base include profile::nginx include profile::php include profile::mysql } 

使用验收testing来testing四个configuration文件中的每一个将会更容易,并且编写rspec-puppettesting以确保不同configuration文件不存在依赖性问题或冲突。