2015-05-21 59 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。我會更新迴應。 –

相關問題