Serverspec站点的“高级提示”部分显示了测试具有相同测试集的多个主机的示例.我已经建立了一个我自己的例子(
https://gist.github.com/neilhwatson/81249ad393800a76a8ad),但是有问题.
第一个问题是测试在第一次失败时停止,而不是通过批次进行,并保持一致.第二个是失败输出并不表示哪个主机出现故障.我可以如何解决这些问题并为所有主机生成最终报告?
解决方法
对于第一个问题,默认情况下,ServerSpec将运行所有测试.但是,由于您有一个为每个环境执行Rake任务的循环,因此第一个出现故障的环境会导致任务失败,因此引发异常,其余任务不会运行.
我已经分手了,更新了Rake task to surround it with a begin/rescue.
... begin desc "Run serverspec to #{host}" RSpec::Core::RakeTask.new(host) do |t| ENV['TARGET_HOST'] = host t.pattern = "spec/base,cfengine3/*_spec.rb" end rescue end ...
对于第二个问题,ServerSpec看起来不会输出测试正在运行的环境,但是由于更新的Gist显示主机在spec_helper.rb中被设置,所以我们可以使用它来设置一个after( :每个),只输出主机出错.相关代码更改在fork of the gist,但基本上您只需要在spec_helper.rb中的以下代码段:
RSpec.configure do |c| c.after(:each) do |example| if example.exception puts "Failed on #{host_run_on}" end end end