Serverspec 站点的高级提示部分显示了使用相同测试集测试多个主机的示例。我已经构建了一个自己的示例(https://gist.github.com/neilhwatson/81249ad393800a76a8ad),但是存在问题。
第一个问题是测试在第一次失败时停止,而不是通过批次进行并保持计数。第二个是故障输出没有表明故障发生在哪台主机上。我可以做些什么来解决这些问题并为所有主机生成最终报告?
Serverspec 站点的高级提示部分显示了使用相同测试集测试多个主机的示例。我已经构建了一个自己的示例(https://gist.github.com/neilhwatson/81249ad393800a76a8ad),但是存在问题。
第一个问题是测试在第一次失败时停止,而不是通过批次进行并保持计数。第二个是故障输出没有表明故障发生在哪台主机上。我可以做些什么来解决这些问题并为所有主机生成最终报告?
对于第一个问题,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)
并且仅输出host
on 错误。相关的代码更改在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