Pythonのsetuptoolsでテストを実施

Python学習【365日チャレンジ!】189日目のマスターU(@Udemy11)です。

半沢直樹がおもしろすぎて、思わず過去シリーズをイッキ見してしまいました。

2週間無料体験が付いているので、半沢直樹を見るだけなら無料で見れちゃいますよ!

paravi 半沢直樹

半沢直樹以外にも魅力的なドラマや映画も見れちゃうので、ぜひ一度無料体験してみてはどうでしょう?

ハマりすぎてPython学習がおろそかにならないように気をつけないといけませんね。

それでは、今日もPython学習をはじめましょう。

昨日の復習

昨日は、setuptoolsを使ってテストを実行する方法を学習しました。

以前作成した対話アプリJarvisでsetuptoolsを使ってunittestを実行し、配布するパッケージにもテストファイルを添付することができました。

テストファイルもメインファイルと同じ階層にすることで、どのファイルのテストファイルなのか簡単にわかりましたね。

setuptoolsでunittestを実施する方法はこちらの記事を参考にしてください。

今日は、setuptoolsでpytestのテストを実行する方法を学習します。

pytest-runner

setuptoolsを使ってpytestを実行するにはpytest-runnerをインストールする必要があります。

pip install pytest-runner

上記コマンドをターミナルから実行してpytest-runnerをインストールします。

次にsetup.pyが実行されたときに最初に読み込まれるコンフィグファイルを作成します。

setup.cfg

新しくsetup.cfgという名前のファイルを作成し、次のように記述します。

[aliases]
test=pytest

これでターミナルからpython setup.py testを実行すれば、テストはpytestで実行されます。

実行結果

Pythonのテストをsetuptoolsを使ってpytestで実行する

Pycharmのバージョンにもよるかもしれませんが、pytestでテストを実行した場合は、次のフォルダ・ファイルが作成されるようです。

Pythonのテストをsetuptoolsを使ってpytestで実行する

また、ターミナルでコマンドpython setup.py sdistを実行すれば、昨日同様、テストファイルが入ったtestsフォルダも一緒に含まれたパッケージを作ることができます。

続いてsetup.cfgsetup.pyを少し変更したやり方もあります。

setup.cfgを変更

先程作ったsetup.cfgに少しコードを付け加えます。

[aliases]
test=pytest

[tool:pytest]
python_files = tests/*

testsフォルダにあるテストファイルをパッケージに入れるコードを加えました。

次にsetup.pyを変更します。

setup.pyを変更

昨日のコードで最後に記述していたtest_suits='tests'に変えてtests_require=['pytest']を追加します。

from setuptools import setup, find_packages

setup(
    name='jarvis',
    version='1.0.0',
    packages=find_packages(),
    package_data={'jarvis':['templates/*.txt']},
    url='http://udemyfun.com',
    license='Free',
    author='MasterU',
    author_email='master@udemyfun.com',
    description='First package',
    tests_require=['pytest'],
)

変更後、ターミナルからpython setup.py testを実行すれば、先程と同じように、pytestでテストが実行された結果が返されます。

試すことが大切

かなりしつこく言ってますが、やはりどんどん試すことが大切です。

今回の学習では、最初にかなりつまづきました。

酒井さんの講座の中では、特に何もインストールしなくても普通にエラーもなく進んでいたのですが、何度やっても次のエラーが出てテストができませんでした。

error: invalid command 'pytest'

改めて、レクチャーの質問や紹介されているページを調べてみると、pytest-runnerをインストールするとうまくいくみたいだったので、やってみたところうまく動いたというわけです。

さらに、setup.cfgのコードやsetup.pyのコードも色々と試しているうちに、違う方法でもできることを発見したわけです。

とはいえ、これが正しいかどうかはわからないのですが、とりあえずうまく動いているので、間違ってはいないと思います。

試すことでわからないことも少しずつ分かっていくので、ぜひ色々と試してみてください。

私が今Pythonを学習しているのは、こちらの講座です。

Udemy講師 酒井さん プログラミング Python

それでは明日も、Good Python!