忍者ブログ
[375] [374] [373] [372] [371] [370] [369] [367] [368] [366] [365]

DATE : 2024/11/22 (Fri)
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


DATE : 2008/10/16 (Thu)

はじめに

Hudson では、Java 以外の言語で作られたプロジェクトの継続的インテグレーションを行うことができます。特に、テスト結果のログを JUnit 形式の XML で出力できる場合、テスト結果の管理もできるので便利です。本記事では、unittest モジュールを用いてユニットテストを行っている Python プロジェクトのテスト結果を Hudson で管理させる方法についてメモします。Python プロジェクトはすでに Hudson に登録できている状態だとします。Hudson でプロジェクトを管理する方法については、「Hudsonを使ったアジャイルな開発入門」(川口耕介、gihyo.jp)を参考にしてください。本記事で使用した Hudson のバージョンは 1.255、Python のバージョンは 2.6 です。

unittest モジュールの結果から、JUnit 形式のログファイルを出力

unittest モジュールは、標準では JUnit 形式のログを出力しません。そこで、Sebastian Rittau 氏が開発された XML Test Runner for PyUnit を使用します。「XML Test Runner」から xmlrunner.py をダウンロードし、プロジェクトのフォルダか <Python のインストールフォルダ>\Lib に配置します。次に、テストを実行するスクリプトを作成します。例えば、test_on_hudson.py というスクリプトに以下のように記述します(「<...>」の部分は、各自のテスト用スクリプトに応じて置き換えてください)。なお、以下のコードは「Hudson embraces Python」(Redsolo)のものを参考にしています。対象とする XML Test Runner for PyUnit は、2007-11-12 版のものです。

import sys
import unittest
import xmlrunner
import <テスト対象モジュール>

if __name__ == "__main__":
    suite = unittest.TestSuite([
        unittest.TestLoader().loadTestsFromTestCase(<テストケース>),
        <その他テストケース>
        ])

    runner = xmlrunner.XMLTestRunner(sys.stdout)
    runner.run(suite)

テストを実行するスクリプトが出来上がったら、Hudson に登録しておきます。

ビルド手順にユニットテストの起動を指定

プロジェクトページの「設定」→「ビルド手順の追加」から、ユニットテストを起動するスクリプトを実行します。例えば、「Windows バッチコマンドの実行」からユニットテストを起動する場合は、次のようになります。

python <ワークスペースからの test_on_hudson.py のパス> > testlog.xml

「Ant の呼び出し」の場合の Ant スクリプトは、次のようになります。各プロパティは各自のプロジェクトに応じて置き換えてください。hudson.WORKSPACE プロパティは、Hudson から提供される環境変数で、Hudson の上のプロジェクトのワークスペースフォルダを表します。以下の Ant スクリプトでは、ログファイルを <プロジェクトのワークスペース>/logs に「PYUNIT-<ビルドタグ>.xml」という名前で出力します。この Ant スクリプトは、「Ant の呼び出し」→「高度な設定」→「ビルドファイル」にこのファイルのパスを指定するだけで使えます。

<?xml version="1.0" encoding="utf-8"?>

<project name="unittestOnHudson" default="test" basedir=".">
  <description>
    Python プロジェクトのユニットテストを Hudson 上で実行する。
  </description>
  <property environment="hudson"/>

  <!-- テスト用コードのパス -->
  <property name="testCode"
            location="${hudson.WORKSPACE}/sample/test_on_hudson.py"/>
  <!-- ログを出力するディレクトリのパス -->
  <property name="logsDirectory"
            location="${hudson.WORKSPACE}/logs"/>
  <!-- ログファイルの名前 -->
  <property name="logName"
            value="PYUNIT-${hudson.BUILD_TAG}.xml"/>

  <target name="test">
    <mkdir dir="${logsDirectory}"/>
    <delete includeemptydirs="true">
      <fileset dir="${logsDirectory}" includes="**/*"/>
    </delete>
    <exec executable="python" output="${logsDirectory}/${logName}">
      <arg path="${testCode}"/>
    </exec>
  </target>

</project>

あとは、「ビルド後の処理」の「JUnitテスト結果の集計」にチェックを入れ、「テスト結果 XML」に出力されるログファイルのパターンを記述すれば完了です。上記の「Windows バッチコマンドの実行」の場合は、「テスト結果 XML」に「testlog.xml」を、「Ant の呼び出し」の場合は「logs/PYUNIT-*.xml」を指定してください。

参考文献

忍者ブログ [PR]
ブログ内検索
最近の状況
リンク
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
ブログ内検索
最近の状況
リンク
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック