2015-05-21 62 views
9

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

第一个问题是,测试在第一次失败时停止,而不是在整个地段进行并保持理货。第二个是失败输出不表示在哪个主机上发生故障。我能做些什么来解决这些问题并为所有主机生成最终报告?

回答

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将输出其环境中的测试运行中,但是由于更新的主旨表明主机被在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 
+0

近了,但我现在还不能告诉一下主机故障发生在。新的要点:https://gist.github.com/neilhwatson/1d41c696102c01bbb87a –

+0

一个新的错误:'示例'不能从一个示例中(例如'it'块)或从示例范围中运行的构造(例如'之前','let'等)。它只适用于一个示例组(例如'describe'或'context'块)。 –

+0

Ahh,我的不好,那是来自RSpec 2,而不是RSpec 3.它是用RSpec 3完成的:http://stackoverflow.com/a/26164289/238292。我会更新回应。 –

相关问题