我想用rspec-puppet和beaker-rspec来testing我的控制回购(具有configuration文件和angular色)。 我仍然有烧杯rspec一些麻烦:
profile::postgresql并查看数据库是否已经安装。 role::fileserver或role::webserver 。 我已经build立了烧杯rspec,它的工作原理,但它需要相当多的时间,因为它将一个接一个地应用所有的configuration文件。 我看到以下问题:
我宁愿做的是:
如果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文件不存在依赖性问题或冲突。