Serverspec站点的高级提示部分显示了使用相同测试集测试多个主机的示例。我已经建立了自己的例子(https://gist.github.com/neilhwatson/81249ad393800a76a8ad),但有问题。使用serverspec测试使用相同测试的多个主机
第一个问题是,测试在第一次失败时停止,而不是在整个地段进行并保持理货。第二个是失败输出不表示在哪个主机上发生故障。我能做些什么来解决这些问题并为所有主机生成最终报告?
Serverspec站点的高级提示部分显示了使用相同测试集测试多个主机的示例。我已经建立了自己的例子(https://gist.github.com/neilhwatson/81249ad393800a76a8ad),但有问题。使用serverspec测试使用相同测试的多个主机
第一个问题是,测试在第一次失败时停止,而不是在整个地段进行并保持理货。第二个是失败输出不表示在哪个主机上发生故障。我能做些什么来解决这些问题并为所有主机生成最终报告?
对于第一个问题,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将输出其环境中的测试运行中,但是由于更新的主旨表明主机被在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
近了,但我现在还不能告诉一下主机故障发生在。新的要点:https://gist.github.com/neilhwatson/1d41c696102c01bbb87a –
一个新的错误:'示例'不能从一个示例中(例如'it'块)或从示例范围中运行的构造(例如'之前','let'等)。它只适用于一个示例组(例如'describe'或'context'块)。 –
Ahh,我的不好,那是来自RSpec 2,而不是RSpec 3.它是用RSpec 3完成的:http://stackoverflow.com/a/26164289/238292。我会更新回应。 –