2012/03/13

Jenkinsでテストとカバレッジの結果をグラフ表示できるようにする

前回の記事「Xcode + CoverStoryでテストコードのカバレッジを見えるようにする」によってテストコードのカバレッジが取得できるようになりました。

テストコードを書くのは面倒に感じるのですが、ダイエットと同じように目標があって成果が目に見えるならばやる気が出るかも、ということで今回はJenkinsとそのプラグインを導入して、テスト結果やカバレッジ結果の自動集計とグラフによる可視化ができるようにします。

Jenkinsとプラグインの導入

とりあえずJenkinsを導入し、必要なプラグインも入れます。

  1. Jenkinsのサイトからファイルをダウンロードします。常駐させるのが何となく嫌な気がして、今回はコマンドラインが楽にできるjenkins.warをダウンロードしました。

  2. コマンドラインでJenkinsを起動させます。なお、Lion以降はJavaを自分で導入する必要があるようです。

    java -jar jenkins.war
    
  3. ブラウザでhttp://localhost:8080を開きます。Jenkinsが起動しているはずです。

  4. [Jenkinsの管理]→[プラグインの管理]→[利用可能]タブに移動。

  5. [Xcode Plugin]と[Cobertura Plugin]にチェックして、[再起動せずにインストール]。

  6. しばらくするとインストールが成功してプラグインが利用できるようになります。

gcovrの導入

Jenkinsについては一旦ここで置いておき、代わりにJenkinsジョブの作成のための前準備を行います。まず、gcov形式のファイルをCoberturaレポート形式に変換するためにgcovrを導入します。

上記のファイルに実行権限を付加して、パスの通る場所に置きます。

RunPlatformUnitTests修正

次に、Jenkinsでテストを自動実行できるようにするため、RunPlatformUnitTestsを書き変えます。

具体的には/Developer/Platforms/iPhoneSimulator.platform/Developer/Tools/RunPlatformUnitTestsの91行目あたりを書き変える必要があります。

    -       Warning ${LINENO} "Skipping tests; the iPhoneSimulator platform does not currently support application-hosted tests (TEST_HOST set)."
    +       export OTHER_TEST_FLAGS="-RegisterForSystemEvents"
    +       RunTestsForApplication "${TEST_HOST}" "${TEST_BUNDLE_PATH}"
2012.09.24 追記
Xcode 4.4.1では次のRunPlatformUnitTestsを書き変えるとうまくいきました。
  • /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Tools/RunPlatformUnitTests

Jenkinsジョブの作成

これで、JenkinsのジョブでXcodeを利用してカバレッジを記録できるようになりましたので、次の手順でジョブを作成します。

  1. [新規ジョブ作成]→[フリースタイル・プロジェクトのビルド]で、ジョブ名を適切に入れて[OK]。

  2. [ソースコード管理システム]あたりは個人でかなり違うと思うのでここでは省略します。各自設定してください。基本的にはSCMのプラグインを入れてリポジトリ場所の設定を行うだけです。

  3. [ビルド手順の追加]→[Xcode]を追加します。

  4. [SDK]にXcodeiphonesimulator5.0を、[Configuration]にDebugを指定します。なお、可能なバージョンはxcodebuild -showsdksで確認できます。

  5. 2012.09.30 追記
    さらに、Xcodeプラグイン中のCustom xcodebuild argumentsに TEST_AFTER_BUILD=YESを設定する必要があるみたいです。 Xcodeプラグインが古いと、この設定値が見えなくなったりするのでアップデートしてください。
  6. [ビルド手順の追加]→[シェルの実行]を追加します。

  7. 次のコードを[シェルスクリプト]に追加します。

    gcovr --xml -e '.*Tests/' -o cobertura.xml -r $WORKSPACE
  8. [ビルド後の処理]の[Cobertura カバレッジ・レポートの集計]にチェックを入れ、[Cobertura XMLレポート パターン]にcobertura.xmlを指定します。[ソースエンコーディング]はUTF-8にしておいたほうがよいかもしれません。

  9. [JUnitテスト結果の集計]にチェックを入れ、[テスト結果XML]にtest-reports/*.xmlを指定します。

これで、手動ビルド実行でコード・カバレッジとテスト結果の推移が蓄積されていきます。あとはSCMポーリングなどで自動実行できるようにすればよいでしょう。

まとめ

Jenkinsでのテストとカバレッジの結果情報の収集方法について紹介しました。 なお、ビルド出力はデフォルトでは~/.jenkinsあたりにありますので、問題があったらここらをチェックしてください。

関連リンク

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。