はじめに
こんにちは、Python界の情弱です。前回はJenkinsを導入するところまで。今回はPythonで書かれたプロジェクトのテストを走らせて結果を表示するまで。pytestを使った場合の結果の取得方法を調べたのでメモ。
参考
- Using Tox with the Jenkins Integration Server — tox 1.4-1 documentation
- ここに全部書いてあるので特に困ることはなかった
準備
まずテストを走らせるためにCIが実行するスクリプトが必要。Jenkinsはユーザjenkinsで動いているためそいつにPythonとかGitの設定をしてやらないといけない。
Gitの設定
GitHubにアクセスするときはempty identだとエラーになるので設定しておく。Gitのユーザ名とメールアドレスをJenkinsの管理画面で設定しておく。
Jenkinsの管理 > システムの管理でGit pluginの設定をする。
jenkinsユーザがtoxを使えるようにする
jenkinsユーザはホームディレクトリがないので、pythonbrewとか使うにも色々設定したりするのがめんどくさい。しょうがないので、pipとtoxだけ素のPythonから使えるようにする。(自前でビルドしてjenkinsユーザのプロファイルにそのパスを追加しとくんでもいいけど、設定するのがめんどくさかったのでやめた)
(ymotongpoo)% sudo apt-get install python-pip (ymotongpoo)% sudo pip install tox (ymotongpoo)% sudo -u jenkins python -c "import tox; print tox.__version__" 1.3
無事jenkinsユーザからでもtoxが使えるようになりました。
Python Pluginのインストール
調べたらjenkinsユーザ自体がtoxを走らせるにはPython Pluginが一番便利っぽいということで入れる。
いつものJenkinsの管理 > プラグインの管理からPython Pluginを探してインストール。
toxの準備
tox.iniファイルを作成します。
- tox.ini
[tox] envlist = py26, py27 [testenv:py27] basepython = /opt/python/2.7/bin/python2.7 [testenv] deps = pytest requests commands = py.test \ --junitxml=junit-{envname}.xml \ test
当方Ubuntu 10.04のためPython 2.7は自前ビルドなので、py27に実行ファイルまでのパスを教えてあげる。またJenkinsはJUnit形式のログしか読めないのでその旨記述。あとpy.testがtestディレクトリ以下のテストを実行するようにするためにディレクトリ指定。ちなみにプロジェクトの階層はこんな感じ。
% tree -L 1 <project> <project> ├── LICENSE ├── README.rst ├── docs/ ├── pavement.py ├── <package>/ ├── samples/ ├── setup.py ├── test/ └── tox.ini
あとtoxでテスト実行する際にsetup.pyでREADME.rstを読み込んでる部分がエラーになるので若干修正。関係あるところだけ抜き出すと
- setup.py
import os.path def read_file(name): path = os.path.join(os.path.dirname(__file__), name) with open(os.path.abspath(path), 'r') as f: data = f.read() return data try: long_description = read_file('README.rst'), except IOError: long_description = ""
どうせtoxはテスト時しか使わないのでsetup.pyに渡すlong_descriptionは適当で大丈夫。
プロジェクトの設定
やっと準備出来たのでJenkinsプロジェクトの設定をする。
ダッシュボード > 新規ジョブの作成 > マルチ構成プロジェクトのビルド を選択。
そのままプロジェクトの設定画面になるので順次設定。ソースコード管理システムはGitを選んでレポジトリはJenkins側からコミットするわけでもなければGitHubならGit read-onlyのURLを渡しとけばいい。またテストを行うデフォルトのブランチ名も指定する。僕はgit-flow使ってるのでdevelopとしておく。
ビルドトリガは適当に設定しておく。僕はSCMをポーリングを10分おきに行う設定にした。
次にマトリックスの設定。ここでユーザ定義でtoxのtestenvを記述していく。名前は適当でよくて、値のところにtoxのenv名を書いていく。今回はpy26とpy27とする。
最後にビルドとビルド後の処理の設定をする。ここでPython Pluginを入れておいて良かった話になる。
Execute Python Scriptにしてtoxがcommandを実行するように記述。またビルド後(テスト実行後)にtoxのテスト結果を取得できるように、tox.iniで-junitxmlに渡したファイル名を記述。
- ビルド用(テスト実行用)スクリプト
import tox
tox.cmdline()
- ビルド後(テスト実行後)の処理
「JUnitテスト結果の集計」を選択して、テスト結果XMLを次のとおりにする。
**/junit-*.xml
テストを実行してみる
とりあえずプロジェクトのビルドを実行してみる。
初回はワークスペースにGitレポジトリをチェックアウトしてきたり、tox用にvirtualenvの環境作ったりするので若干時間かかる。出力内容はコンソール出力で見られるので、テストが失敗してたらそこを確認すればだいたい分かる。
Jenkinsを使ったPythonのテストやSphinxのビルドはBeProudさんで書かれたPythonプロフェッショナルプログラミングで1章割いてあります。こちらではMercurialを使っていたりSphinxのビルドを使っていたりします。ステマです。でもPythonプロジェクトの運用が書かれた日本語書籍は実質いまこれとエキスパートPythonプログラミングしかないと思います。

- 作者: ビープラウド
- 出版社/メーカー: 秀和システム
- 発売日: 2012/03/26
- メディア: 単行本
- 購入: 3人 クリック: 719回
- この商品を含むブログ (12件) を見る