使用serverspec使用相同的测试测试多个主机

时间:2015-05-21 12:50:17

标签: ruby rspec rspec3 serverspec

Serverspec站点的“高级提示”部分显示了使用相同测试集测试多个主机的示例。我已经构建了一个我自己的例子(https://gist.github.com/neilhwatson/81249ad393800a76a8ad),但是存在问题。

第一个问题是测试在第一次失败时停止,而不是继续进行并保持计数。第二个是故障输出并不表示故障发生在哪个主机上。如何解决这些问题并为所有主机生成最终报告?

1 个答案:

答案 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