Serverspec站点的“高级提示”部分显示了使用相同测试集测试多个主机的示例。我已经构建了一个我自己的例子(https://gist.github.com/neilhwatson/81249ad393800a76a8ad),但是存在问题。
第一个问题是测试在第一次失败时停止,而不是继续进行并保持计数。第二个是故障输出并不表示故障发生在哪个主机上。如何解决这些问题并为所有主机生成最终报告?
答案 0 :(得分:2)
对于第一个问题,默认情况下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
中设置,我们可以使用它来add an RSpec configuration设置after(:each)
并仅在错误时输出host
。相关的代码更改位于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