はじめに
以前、Azure Pipelines上でRailsアプリのテストを実行する方法を書きました。
このエントリーでは、テストレポートとカバレッジをAzure Pipelines上で表示させる方法を記します。
テストレポートの表示方法
Azure Pipelines上でテストレポートを表示させると、下の画像のように失敗したテストに対してエラーメッセージやスタックトレースを表示させることができます。逐一ログメッセージを読み取る必要がなく分かりやすいです。
Railsアプリの準備
Azure Pipelinesがサポートしているテストレポートの形式はpublish-test-results機能のドキュメントのようにさまざまなものがあります。
今回はJUnit形式にすることにしました。minitestではminitest-reporters
gemというものがあり、これを利用するとtest/reports
以下にTEST-*.xml
ファイルが生成されます。
具体的にはGemfile
にgem 'minitest-reporters', require: false
を追加します。
group :test do gem 'simplecov', require: false gem 'minitest-reporters', require: false end
その後、test/test_helper.rb
に以下の設定を追加します。
require 'minitest/reporters' Minitest::Reporters.use! Minitest::Reporters::JUnitReporter.new
Azure Pipelinesの設定
次にazure-pipelines.yml
に設定を追加します。上記で紹介したpublish-test-results機能を使います。簡単な設定はAzure Pipelines上で行えます。該当のpipelineの右端から「Edit」を選択します。
その後、「test results」と検索領域に入力すると「Publish Test Results」が絞り込まれるのでそれをクリックします。
各種設定の入力欄が現れるので、必要事項を入力して「Add」をクリックすると設定が挿入されます。
最終的には以下のような設定となりました。
- task: PublishTestResults@2 condition: succeededOrFailed() inputs: testResultsFormat: 'JUnit' testResultsFiles: 'test/reports/TEST-*.xml'
ポイントとしてcondition: succeededOrFailed()
を追加することを挙げておきます。この設定をしておかないと、テストが失敗したときにテストレポートが出力されないので、あまり意味を成さないです。
カバレッジを表示する
Publish Code Coverage Results taskを使うと、カバレッジ情報を下図のようにきれいに表示可能です。どのファイルのカバレッジが低いか一目瞭然です。
Railsアプリの準備
Publish Code Coverage Results taskがサポートしているカバレッジデータのフォーマットは以下のドキュメントが示すようにCoberturaやJaCoCoがあります。
今回はCobertura形式で出力する方法を記します。Rubyのカバレッジ計測gemであるSimpleCovにてCobertura形式で出力させるにはsimplecov-cobertura gemを使います。
Gemfileには以下のような記述となります。
group :test do gem 'simplecov', require: false gem 'simplecov-cobertura', require: false gem 'minitest-reporters', require: false end
test/test_helper.rb
に以下の記述を追加します。
require 'simplecov-cobertura' SimpleCov.formatter = SimpleCov::Formatter::CoberturaFormatter
Azure Pipelinesの設定
次にazure-pipelines.yml
に設定を追加します。具体的な設定方法はPublish Code Coverage Results taskのドキュメントや上記のテストレポートで記した方法を参考にしてください。
最終的には以下のような設定となりました。
- task: PublishCodeCoverageResults@1 inputs: codeCoverageTool: 'Cobertura' summaryFileLocation: 'coverage/coverage.xml'
あとはAzure Pipelines上でテストを流せばカバレッジが上で示した画像のようにきれいに参照可能となります。