主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Python: テストの環境を自機の外に用意して楽をする、テスト結果を保証してもらう

                
tags: python
 Travis CIとは継続的インテグレーションを行うのに便利なWebサービスである。
”継続的インテグレーション、CI(英: continuous integration)とは、主にプログラマーのアプリケーション作成時の品質改善や納期の短縮のための習慣のことである。エクストリーム・プログラミング (XP) のプラクティスの一つで、狭義にはビルドやテスト、インスペクションなどを継続的に実行していくことを意味する[1]。特に、1990年代後半以降の開発においては、継続的インテグレーションをサポートするソフトウェアを使用する傾向が強まってきた。” - Wikipedia 継続的インテグレーション


 Travis CIを使うメリットを上記のように書いても、初見でははてさて具体的になにしてくれるの?便利なの?というところ。一つの一般的な使い方をざっくり書くと、Githubと連携させて使うとプッシュするだけで異なるPythonバージョンでテストを行えて、テスト結果にいつでもアクセスできるようにしてくれる。
 Pythonでなにかを書いてテストするとなると、どのバージョンのPythonでテストにとおったかというのは重要な情報である。今だとPythonの2.7, 3.3, 3.4に対応していることが望ましいだろうし欲を出せばPyPy, PyPy3にも対応しているとありがたい。それらに加えて3.5も頭角を現そうとしていることを考えると、六つのPython環境でテストしなければならなくなる。面倒。でもTravis CIを使えばGithubにポチッといつもどおりプッシュするだけでそれをやってくれちゃう。
 どこかで開発したものをどこかのマシンにインストールしてエラーが出て、「私の用意した環境ではテストにとおったんです」と開発者に言われてもどのくらい信用できるかはわからない。Travis CIならテストは開発者の環境とは関係ないところでやってくれるし、テスト結果が残るのでいつでもアクセスできる。

 Travis CIを使っているPythonプロジェクトは結構多い。PyPIでパッケージを探していると文字以外に下部にあるような画像の並びを見ることがある。
1410241114157.jpg
これの”build passing”がTravis CIの提供するもので、テストがとおっていることを示してくれている。↑はスクショだが、本物はTravis CIへのリンクになっている。ここでPillowのTravis CIテスト結果を見てみる。
https://travis-ci.org/python-pillow/Pillow

 開いてみると環境別のテスト結果の一覧になっている。個別にテスト時のコンソールを再現して出力を確認できるようにもなっている。


 Travis CIはどんなものかということを上記まででざっくり説明した。Githubに連携して使うには、登録フォームを埋めたりするでもなく、Travis CIからGithubの自アカウントへのアクセス許可を与えるだけである。それでTravis CIでアカウントができればマイページからTravis CIでのテストを有効にしたいリポジトリを連携ONに切り替え、そのリポジトリに.travis.ymlというファイルを追加する。そこらへんは日本語でも紹介ページがいくつかある。
http://qiita.com/masashi0127/items/5bfcba5cad8e82958844

 参考までにPillowを使う自作Pythonモジュールの.travis.ymlを。
https://travis-ci.org/hMatoba/Piexif
language: python

python:
- pypy
- pypy3
- 2.7
- 3.3
- 3.4

install:
- pip install pillow

script:
- python setup.py test

matrix:
fast_finish: true

 Travis CIでテストを済ませると下のようなバッジを得られる。これをGithubやらPyPIのプロジェクトページに貼り付けてテストが済んでいることを示す。

 多環境でテストを実施できる便利なサービスなんだけど、Github連携ではプッシュせねば使えないので、余計な履歴を増やさないためにも一度自分の環境でテストを実施して通るのを確認してからTravisでの多環境テストをしたほうがいいと思う。
 ちなみにソフトウェア界隈はシリコンバレーでやってますーというのが多いが、Travis CIはドイツの会社のサービスらしい。

 Travis CI導入のついでにもう一仕事するのもいいかもしれない。coverallsという、テストがどれくらいのコードをカバーできているかを計測して公開してくれるサービスがある。これでテストの妥当性を保証してもらう。
 使い方はTravis CIの導入とそう変わりはない。GithubとTravis CIと連携できるサービスなので、Travis CIからGithubの自アカウントへのアクセス許可を与えた時と同様にcoverallsにいって簡単な許可をあたえるだけである。
https://coveralls.io/

 連携済ませたらさっき書いた.travis.ymlをちょっと書き換える。以下をそれぞれ適したところに追記。
install:
- pip install coveralls

script:
- coverage run --source=[my repos] setup.py test

after_success:
coveralls

追記によって.travis.ymlは下記のように。
language: python

python:
- pypy
- pypy3
- 2.7
- 3.3
- 3.4

install:
- pip install pillow
- pip install coveralls

script:
- coverage run --source=piexif setup.py test

after_success:
coveralls

matrix:
fast_finish: true

 .travis.ymlの書き換えが済んだらプッシュしてみれば、coverallsのマイページに結果が出ていて、Travis CIと同じくバッジが得られるようになっているはず。
Coverage Status





 PythonのPillowのIssuesを見て、機能追加で手伝えそうなところがあったのでスクリプトを書いてメッセージを投げてみたところ、Travis CIとCoverallsはアカウント作るのタダだから使ってみない?と来た。そんなわけでそれら二つの使い方の勉強がてら紹介と導入方法を記事にしてみた。面倒かなーと思っていたら意外にシームレスに連携できて、とても便利なものだった。品質保証の手段としてオススメ。
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。