Cover Image for serverspecの実行結果をJUnit.xml形式で出力する

serverspecの実行結果をJUnit.xml形式で出力する

この記事は最終更新日から9年以上が経過しています。

serverspecの実行結果をJenkinsで表示するためにJUnit.xml形式で出力する方法

事前準備

  • rspec_junit_formatter のインストール
gem install rspec_junit_formatter

Rakefileの変更

serverspec-init を実行してできたRakeファイルを以下のように書き換える

require 'rake'
require 'rspec/core/rake_task'

task :spec    => 'spec:all'
task :default => :spec

namespace :spec do
  targets = []
  Dir.glob('./spec/*').each do |dir|
    next unless File.directory?(dir)
    target = File.basename(dir)
    target = "_#{target}" if target == "default"
    targets << target
  end

  task :all     => targets
  task :default => :all

  targets.each do |target|
    original_target = target == "_default" ? target[1..-1] : target
    desc "Run serverspec tests to #{original_target}"
    RSpec::Core::RakeTask.new(target.to_sym) do |t|
      ENV['TARGET_HOST'] = original_target
      if ENV['CI_FLAG']
        t.rspec_opts = "--format RspecJunitFormatter --out ./report/results_#{original_target}.xml"
      end
      t.pattern = "spec/#{original_target}/*_spec.rb"
    end
  end
end

元ファイルとの差分は以下のとおり

    desc "Run serverspec tests to #{original_target}"
    RSpec::Core::RakeTask.new(target.to_sym) do |t|
      ENV['TARGET_HOST'] = original_target
+      if ENV['CI_FLAG']
+        t.rspec_opts = "--format RspecJunitFormatter --out ../report/serverspec/results_#{original_target}.xml"
+      end
      t.pattern = "spec/#{original_target}/*_spec.rb"
    end
  end

実行方法

以下のように実行すると./report/にJUnit.xml形式で出力される

rake CI_FLAG=true spec