9

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

第一个问题是测试在第一次失败时停止,而不是通过批次进行并保持计数。第二个是故障输出没有表明故障发生在哪台主机上。我可以做些什么来解决这些问题并为所有主机生成最终报告?

4

1 回答 1

2

对于第一个问题,ServerSpec默认情况下将运行您的所有测试。但是,由于您有一个为每个环境执行Rake任务的循环,因此第一个出现故障的环境会导致任务失败,因此会引发异常并且其余任务不会运行。

我已经分叉了你的要点并更新了Rake 任务,用 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我们可以使用它来添加 RSpec 配置,该配置设置after(:each)并且仅输出hoston 错误。相关的代码更改在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
于 2015-05-25T02:57:59.187 回答