複数バージョンのPythonでのテスト
最近 pyroonga というPythonから groonga が操作できるようなものを作り始めたのですが、作るにあたってサポートするPythonのバージョンを2.6、2.7、3.xに決めました。
そこで問題になるのがテストです。複数バージョンでテストしないといけないので、virtualenvあたりを使うんですが、いちいちバージョンを切り替えてテストを走らせるのがめんどくさいです。
で、そのためのツールに tox というものがあります。これを使うと複数バージョンでのテストがコマンド一発で済みます。
前提条件として、テストに使用するバージョンのPythonがシステムにインストールされている必要があります。 まぁ普通のPythonistaならPython2.6、2.7、3.2ぐらいは当然入れていると思いますので問題ないでしょう。
使い方とか
例として以下のようなディレクトリ構成になっているとします。
ディレクトリ構成:
. |-- example | |-- __init__.py | `-- tests | |-- __init__.py | `-- test_example.py |-- setup.py `-- tox.ini
toxを使用するにはsetup.pyが必要なので、適当に用意してください。
tox.ini はsetup.pyと同じディレクトリに置きます。
# tox.ini [tox] envlist = py26,py27,py32 [testenv] deps = nose commands = nosetests []
envlist がテストに使用するPythonのバージョンです。前述の通り、既にシステムにインストールされている必要があります。pypyやjythonも指定できたりします。
deps はテストに必要なパッケージを指定できます。ここに書いたものはtoxが自動的にpypiから持ってきてくれます。
commands にテストを実行するコマンドを書きます。 [] にはtoxを実行するときの引数が入ります。
以下のコマンドでtoxを実行します。
% tox
nosetestsに引数を渡してやりたい場合は
% tox --with-doctest
これで、tox.ini と同じディレクトリに .tox というディレクトリに envlist で指定した各バージョンのvirtualenvが構成されてテストが走ります。
特定のバージョンのテストだけ実行したい場合は -e オプションを付けて
% tox -e py26
とします。
テストが実行された後は、どのバージョンでテストが失敗したかなどが分かります。
% tox _____________ [tox sdist] _____________ ... ____________ [tox summary] ____________ [TOX] ERROR: py26: commands failed [TOX] py27: commands succeeded [TOX] py32: commands succeeded %
さらに詳しく知りたい場合は公式サイト http://tox.testrun.org/latest/ を見てみてください。