最近利用した Python ライブラリでは cram を使ってテストがかかれてあり、setup.py からテスト実行できるようになっていた。ミニマムな実現方法をメモ。

cram とは

URL : https://bitheap.org/cram/



Cram is a functional testing framework for command line applications based on Mercurial’s unified test format.
Cram tests look like snippets of interactive shell sessions. Cram runs each command and compares the command output in the test with the command’s actual output.

引用部にあるように大きめのプロジェクトだと Mercurial が採用している模様。


setup.py の修正

本題の cram テスト向け setup.py の修正。
setup.py に pytest 向けコマンドを追加するチュートリアルがある

pytest : Integration with setuptools/distribute test commands

これを cram 向けに書き換えればよい。で、書き換えたのが以下。

import sys
from setuptools import setup
from setuptools.command.test import test as TestCommand

class CramTest(TestCommand):
    def finalize_options(self):
        self.test_args = []
        self.test_suite = True

    def run_tests(self):
        import cram

      cmdclass={'test': CramTest})

この例では test オプションで run_tests メソッドがよびだされ cram テストファイル tests.t を実行する。

setup.py(distutils) のコマンド拡張は次の URL も参考になる

stackoverflow : Custom distutils commands


作成した setup.py で実際に cram テストを実行する


ファイル tests.t にテストケースを書く。

test echo:

  $ echo foo

test expr:

  $ expr 1 + 1

cram のインストール

Python で書かれているため pip でインストールするのが楽。

$ pip install cram

cram からテスト実行

$ cram tests.t
--- tests.t
+++ tests.t.err
@@ -6,4 +6,4 @@
 test expr:

   $ expr 1 + 1
-  10
+  2

# Ran 1 tests, 0 skipped, 1 failed.

このテストを setup.py から呼び出す。

setup.py からテスト実行

追加した test オプションはヘルプにも追加される。

$ python setup.py  --help-command
Extra commands:
  test              run unit tests after in-place build


$ python setup.py test
running test
running egg_info
running build_ext
--- tests.t
+++ tests.t.err
@@ -6,4 +6,4 @@
 test expr:

   $ expr 1 + 1
-  10
+  2

# Ran 1 tests, 0 skipped, 1 failed.


Tagged with: , ,
Posted in python

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

  • RT @__apf__: How to write a research paper: a guide for software engineers & practitioners. docs.google.com/presentation/d… /cc @inwyrd 6 days ago
  • RT @HayatoChiba: 昔、自然と対話しながら数学に打ち込んだら何かを悟れるのではと思いたち、専門書1つだけ持ってパワースポットで名高い奈良の山奥に1週間籠ったことがある。しかし泊まった民宿にドカベンが全巻揃っていたため、水島新司と対話しただけで1週間過ぎた。 それ… 3 weeks ago
  • RT @googlecloud: Ever wonder what underwater fiber optic internet cables look like? Look no further than this deep dive w/ @NatAndLo: https… 3 weeks ago
  • @ijin UTC+01:00 な時間帯で生活しています、、、 6 months ago
  • RT @mattcutts: Google's world-class Site Reliability Engineering team wrote a new book: amazon.com/Site-Reliabili… It's about managing produc… 9 months ago
%d bloggers like this: