Intellij(Pycharm)でPytestを実行する

2024.05.15

はじめに

データアナリティクス事業本部のkobayashiです。

pythonでの開発にIDEとしてIntellij(Pycharm)を使っていますが、テストフレームワークとしてPytestを使う場合にIntellijは非常に強直な機能を提供してくれます。今回はこの機能を紹介したいと思います。

Intellij(Pycharm)でPytestを実行する

IntellijでのPytest環境の設定

IntellijでPytestを実行するのは非常に簡単で難しい設定も必要ありません。前提条件としてはPytestがインストールされいているだけです。PytestをインストールするのはIntellijのProject Structureで設定してあるPython実行環境になります。これにはIntellijのTerminalから以下のコマンドでインストールするだけです。

$ pip install pytest

環境の整備はこれだけです。では実際にテストを実行してみたいと思います。テストは以前のエントリで記述した以下のテストを行ってみます。

IntellijでPytestを実行する

ディレクトリ構成は以下のような構成になっているとします。

スクリプトのディレクトリに実行対象のファイルmain.pyがあり、そこに並列な形でテストファイルを置くtestsのディレクトリがありその中にPytestで使うtest_main.pytest_main_2.pyがあります。

次にFIle > Project StructureからIntellij上での各ディレクトリの役割を設定します。

pytest-parmのディレクトリはテスト対象のあるメインのスクリプトがあるのでSourcetestsのディレクトリはPytestで使うテストファイルがあるのでTestsを設定します。

次にPytestの実行設定を行います。

Intellijの右上のEdit Configrationからテストの設定に進みます。

テストの設定画面が開くので左上の+ボダンを押下してPython tests > pytestを選択します。

Run/Debug Configrationsが開くのでここでPytestの設定を行います。設定する内容は以下になります。

  • Target
    • Module name: テストモジュール(や関数)の名前を指定
    • Script path: テストファイルのパスを指定
    • Custom: -mでマーカーを付けたテストの実行など
  • Environment:
    • Environment variables: テスト実行時に使う環境変数を設定
    • Python interpreter: Pytestを実行するPython実行環境
    • Interpreter options: Python実行環境のオプション
    • Working directory: Pytestを実行するディレクトリ
    • TargetでCustomを設定した場合にはほぼ必須となる

今回はtests以下のテストをすべて実行したいのでTargetScript pathpytest-param/testsを指定します。これでPytestでのテスト対象も設定できたのでPytestを実行します。

メインメニュー右上のRun/Debug設定で先に設定したテスト名を選択してRun 'テスト名'を実行すると以下のようにテスト結果が一覧でわかりやすく表示されます。

Intellijではこのようなテスト結果の表示だけでなくここからテストコードを操作する事もできるのが大変便利です。

例えばエラーになったテストケースをクリックすると対象となるテストケースがエディタで開き、すぐに原因調査と修正することが可能です。

コードカバレッジの確認

PythonパッケージのcoverageをインストールすることでIntellijの画面上でコードカバレッジを確認することができます。

メインメニュー右上のRun/Debug設定でRun 'テスト名' with Coverageを実行します。

実行結果として右のCoverageウィウンドにディレクトリ、ファイル毎にカバー率が表示されます。またファイルをクリックするとエディタにファイルが表示され行にテストの実行状況が色分けで表示されるのでどのようなテストケースを追加すべきかがすぐに分かります。

まとめ

pythonでテストフレームワークとしてPytestを使う場合にIDEとしてIntellij(Pycharm)で使える機能を紹介しました。Intellijは非常に強直な機能を提供してくれていて、自分としてはこれらはPythonの開発には欠かせないツールになっています。Pytestの他にもVersion ControlであるGitの拡張機能も非常に強力なのでまた紹介したいと思います。

最後まで読んで頂いてありがとうございました。