Visual Studio Code での Python テスト

Python 拡張機能は、VS Code の組み込みテスト機能を拡張し、Python の標準unittest フレームワークおよび pytest に対して、テストの検出、カバレッジ測定、実行、およびデバッグ機能を提供します。

テストの構成

Python 拡張機能がインストールされ、エディターで Python ファイルが開かれている場合、VS Code のアクティビティバーにテスト用ビーカーアイコンが表示され、テストエクスプローラービューが開きます。テストエクスプローラーを開くと、テストフレームワークが有効になっていない場合にPython テストの構成ボタンが表示されます。Python テストの構成を選択すると、テストフレームワークとテストが含まれるフォルダーを選択するよう求められます。unittest を使用する場合は、テストファイルを識別するためのファイルグロブパターンも選択します。

注意

ファイルグロブパターンとは、ワイルドカードに基づいてファイルやフォルダー名に一致させ、含めるファイルや除外するファイルを定義するための文字列パターンです。

Configure Python Tests button displayed in the Test Explorer when tests haven't been configured.

テストは、コマンドパレットから Python: Configure Tests コマンドを使用するか、VS Code の設定ドキュメントに従って、設定エディターまたは settings.json ファイルで python.testing.unittestEnabled または python.testing.pytestEnabled を設定することで、いつでも構成できます。各フレームワークには、テスト構成設定で説明されているように、フォルダーやパターンに関する特定の構成設定もあります。

pytest を有効にした際に、アクティブな環境にインストールされていない場合は、Python 拡張機能がバックグラウンドでインストールを試みます。なお、両方のフレームワークが有効になっている場合、Python 拡張機能は pytest のみを実行します。

注意

Python 拡張機能でサポートされている pytest の最小バージョンは 7.0.0 です。

テストの検出

デフォルトでは、フレームワークを有効にすると Python 拡張機能はテストの検出を試みます。コマンドパレットから Test: Refresh Tests コマンドを使用して、いつでも手動でテストの検出を実行できます。

ヒント

python.testing.autoTestDiscoverOnSaveEnabled はデフォルトで true に設定されており、ワークスペース内の Python ファイルを追加、削除、更新するたびに自動的にテスト検出が行われます。この機能を無効にするには、VS Code の設定ドキュメントに従い、設定エディターまたは settings.json ファイルで値を false に設定します。この設定を有効にするにはウィンドウの再読み込みが必要です。自動テスト検出に含まれるファイルをより細かく制御するには、デフォルトで **/*.py となっている python.testing.autoTestDiscoverOnSavePattern 設定を調整してください。

テスト検出には、現在のフレームワークの検出パターンが適用されます(テスト構成設定を使用してカスタマイズ可能)。デフォルトの動作は以下の通りです。

  • python.testing.unittestArgs: プロジェクトのトップレベルフォルダーで、名前に "test" を含む Python (.py) ファイルを検索します。すべてのテストファイルはインポート可能なモジュールまたはパッケージである必要があります。-p 構成設定でファイル照合パターンを、-t 設定でフォルダーをカスタマイズできます。

  • python.testing.pytestArgs: 現在のフォルダーおよびすべてのサブフォルダー内にあり、名前が "test_" で始まるか、"_test" で終わる Python (.py) ファイルを検索します。

ヒント

サブフォルダーに配置されたテストが検出されない場合がありますが、これはテストファイルがインポートできないためです。インポート可能にするには、そのフォルダーに __init__.py という名前の空ファイルを作成してください。

テストの検出が成功すると、テストエクスプローラーにテストが一覧表示されます。

The VS Code Test Explorer for Python tests

テストエクスプローラーから直接テスト検出をトリガーする場合、実行中の検出をキャンセルすることもできます。検出中は 更新 ボタンが キャンセル ボタンに置き換わるので、それを使用してください。

Cancel test discovery button in the Test Explorer.

検出に失敗した場合(テストフレームワークがインストールされていない、テストファイルに構文エラーがあるなど)、エラーメッセージとログへのリンクがテストエクスプローラーに表示されます。Python 出力パネルを確認すると完全なエラーメッセージが表示されます(表示 > 出力 メニューコマンドで出力パネルを表示し、右側のドロップダウンから Python を選択します)。

Discovery failure error messaged displayed in the Test Explorer

テストの実行

以下のいずれかのアクションを使用してテストを実行できます。

  • テストファイルを開いた状態で、前述のセクションで示したテスト定義行の横にある緑色の実行アイコンを選択します。このコマンドは、そのメソッドのみを実行します。

    Run test icon displayed on the gutter when the test file is open in the editor

  • コマンドパレットから、以下のコマンドを実行します。

    • Test: Run All Tests - 検出されたすべてのテストを実行します。
    • Test: Run Tests in Current File - エディターで開いているファイルのすべてのテストを実行します。
    • Test: Run Test at Cursor - エディターのカーソル位置にあるテストメソッドのみを実行します。
  • テストエクスプローラーから

    • 検出されたすべてのテストを実行するには、テストエクスプローラー上部の再生ボタンを選択します。

      Running all tests through Test Explorer

    • 特定のグループのテスト、または単一のテストを実行するには、ファイル、クラス、またはテストを選択し、その項目の右側にある再生ボタンを選択します。

      Running tests at specific scopes through Test Explorer

    • テストエクスプローラーから複数のテストを選択して実行することもできます。これを行うには、実行したいテストを Ctrl+クリック(macOS の場合は Cmd+クリック)し、いずれかを右クリックして Run Test を選択します。

テスト実行後、VS Code は結果をエディター内のガター装飾として直接表示します。失敗したテストはエディター内で強調表示され、Peek ビューによってエラーメッセージとテスト実行履歴が表示されます。Escape キーでこのビューを閉じることができます。また、ユーザー設定(コマンドパレットから Preferences: Open Settings (UI) を実行)で Testing: Automatically Open Peek View 設定を never に変更することで、この機能を無効にできます。

テストエクスプローラーでは、個々のテストの結果に加え、それらのテストを含むクラスやファイルの結果も表示されます。フォルダー内のいずれかのテストが失敗すると、フォルダーに失敗アイコンが表示されます。

Test results on a unittest class and in Test Explorer

VS Code は テスト結果 パネルにもテスト結果を表示します。

Test results in the Test Results panel

カバレッジ付きテストの実行

カバレッジを有効にしてテストを実行するには、テストエクスプローラーのカバレッジ実行アイコンを選択するか、テスト実行をトリガーする通常のメニューから Run with coverage オプションを選択します。Python 拡張機能は、pytest を使用している場合は pytest-cov プラグインを、unittest の場合は coverage.py を使用してカバレッジを計測します。

注意

カバレッジ付きテストを実行する前に、プロジェクトに適したテストカバレッジパッケージをインストールしていることを確認してください。ブランチカバレッジは、coverage バージョン 7.7 以上でのみサポートされています。

カバレッジ実行が完了すると、行レベルのカバレッジがエディターで強調表示されます。テストカバレッジ結果は、テストエクスプローラーの「Test Coverage」サブタブに表示されます。これは、コマンドパレットの Testing: Focus on Test Coverage View コマンド(⇧⌘P (Windows, Linux Ctrl+Shift+P))からも移動できます。このパネルでは、ワークスペース内の各ファイルとフォルダーの行カバレッジメトリクスや、該当する場合はブランチカバレッジを確認できます。

Gif showing running Python tests with coverage.

pytest 使用時にカバレッジ実行を詳細に制御するには、python.testing.pytestArgs 設定を編集して仕様を含めることができます。python.testing.pytestArgs に pytest の引数 --cov が存在する場合、Python 拡張機能はカバレッジ引数に対してそれ以上の編集を行わず、ユーザーのカスタマイズが優先されます。--cov 引数が見つからない場合、拡張機能は実行前に --cov=. を pytest 引数に追加し、ワークスペースルートでカバレッジを有効にします。

テストカバレッジの詳細については、VS Code のテストカバレッジドキュメントを参照してください。

テストのデバッグ

テストをデバッグするには、関数定義の横にあるガター装飾を右クリックして Debug Test を選択するか、テストエクスプローラー内の該当テストの横にある Debug Test アイコンを選択します。

Debug Test icon in the Test Explorer

注意

テストの実行やデバッグでは、テストファイルが自動的に保存されることはありません。テストを実行する前には必ず変更を保存してください。保存しないと、結果が古いバージョンのファイルに基づいているため混乱する可能性があります!

コマンドパレットから以下のコマンドを使用してテストをデバッグできます。

  • Test: Debug All Tests - ワークスペース内のすべてのテストでデバッガーを起動します。
  • Test: Debug Tests in Current File - エディターで開いているファイルで定義されたテストでデバッガーを起動します。
  • Test: Debug Test at Cursor - エディターでカーソルを合わせているメソッドのみでデバッガーを起動します。また、テストエクスプローラーの Debug Test アイコンを使用して、選択したスコープ内の全テストや検出されたすべてのテストに対してデバッガーを起動することもできます。

ガター装飾をクリックした際のデフォルト動作を、実行からデバッグに変更することもできます。これには settings.json ファイルで testing.defaultGutterClickAction 設定の値を debug に変更します。

デバッガーは他の Python コードと同様にテストでも動作し、ブレークポイントや変数検査などが可能です。テストデバッグの設定をカスタマイズするには、ワークスペースの .vscode フォルダーにある launch.json または settings.json ファイルで、設定に "purpose": ["debug-test"] を追加してテストデバッグ設定を指定します。この構成は、Test: Debug All TestsTest: Debug Tests in Current File、および Test: Debug Test at Cursor コマンドを実行する際に使用されます。

例えば、以下の launch.json ファイルの構成は、テストデバッグ時の justMyCode 設定を無効にします。

{
  "name": "Python: Debug Tests",
  "type": "debugpy",
  "request": "launch",
  "program": "${file}",
  "purpose": ["debug-test"],
  "console": "integratedTerminal",
  "justMyCode": false
}

"purpose": ["debug-test"] を含む構成エントリが複数ある場合、現時点ではこの要求タイプに対する複数の定義をサポートしていないため、最初の定義が使用されます。

デバッグの詳細や VS Code での動作については、Python デバッグ構成および一般的な VS Code のデバッグに関する記事を参照してください。

テストの並列実行

pytest でのテストの並列実行サポートは、pytest-xdist パッケージを通じて利用可能です。pytest-xdist の使用方法の詳細については、公式ドキュメントを参照してください。

xdist が有効で、引数にワーカー数が指定されていない場合、ワーカー数はテストエクスプローラーで選択されたテストの数に基づいて Python 拡張機能によって自動的に最適化されます。

Django 単体テスト

Python 拡張機能は、Django 単体テストの検出と実行もサポートしています!いくつかの追加セットアップ手順で Django テストを検出できます。

  1. settings.json ファイル"python.testing.unittestEnabled": true, に設定します。
  2. 環境変数として MANAGE_PY_PATH を追加します。
    1. プロジェクトのルートに .env ファイルを作成します。
    2. .env ファイルに MANAGE_PY_PATH='<path-to-manage.py>' を追加します。ここで <path-to-manage.py> は、アプリケーションの manage.py ファイルへのパスに置き換えてください。

      ヒント: エクスプローラービューでファイルを右クリックし、パスをコピーを選択してパスをコピーできます。

  3. 必要に応じて settings.json ファイル"python.testing.unittestArgs": [] に Django テスト引数を追加し、Django と互換性のない引数は削除します。
注意

デフォルトでは、Python 拡張機能はプロジェクトルートにある .env ファイルを探して読み込みます。.env ファイルがプロジェクトルートにない場合や、VS Code 変数置換を使用している場合は、settings.json ファイル"python.envFile": "${workspaceFolder}/<path-to-.env>" を追加します。これにより、テストの実行と検出時に Python 拡張機能がこのファイルから環境変数を読み込めるようになります。Python 環境変数の詳細についてはこちらを参照してください。

テストビューに移動し、テストを更新ボタンを選択して Django テストを表示させます!

トラブルシューティング

Django 単体テストがテストビューに表示されない場合は、以下のトラブルシューティング手順を試してください。

  • Python 出力パネルでエラーメッセージを検索します。テストが検出されない理由のヒントになるかもしれません。
  • ターミナルで Django テストを実行してみてください。その後、同じコマンドを VS Code の設定に「変換」します。例えば、ターミナルで python manage.py test --arg を実行する場合、.env ファイルに MANAGE_PY_PATH='./manage.py' を追加し、VS Code 設定で "python.testing.unittestArgs": [--arg] を設定します。または、Python 出力パネルで Python 拡張機能によって実行されているコマンドを確認することもできます。
  • MANAGE_PY_PATH 環境変数を設定する際、最初は相対パスを使用していた場合は、manage.py ファイルの絶対パスを使用してみてください。

テストコマンド

以下は、VS Code の Python 拡張機能でテストを行うためのすべてのサポートされているコマンドです。これらはすべてコマンドパレットから見つけることができます。

コマンド名 説明
Python: Configure Tests Python 拡張機能で使用するテストフレームワークを構成します。
Test: Clear All Results すべてのテストステータスをクリアします(UI はセッション間でテスト結果を保持するため)。
Test: Debug All Tests 検出されたすべてのテストをデバッグします。2021.9 より前のバージョンの Python: Debug All Tests に相当します。
Test: Debug Failed Tests 直近のテスト実行で失敗したテストをデバッグします。
Test: Debug Last Run 直近のテスト実行で実行されたテストをデバッグします。
Test: Debug Test at Cursor エディターでカーソルを合わせているテストメソッドをデバッグします。2021.9 より前のバージョンの Python: Debug Test Method... に似ています。
Test: Debug Tests in Current File エディターで現在フォーカスされているファイルのテストをデバッグします。
Test: Go to Next Test Failure エラー Peek ビューが開いている場合、エクスプローラーで失敗した次のテストの Peek ビューを開いて移動します。
Test: Go to Previous Test Failure エラー Peek ビューが開いている場合、エクスプローラーで失敗した前のテストの Peek ビューを開いて移動します。
Test: Peek Output 失敗したテストメソッドのエラー Peek ビューを開きます。
Test: Refresh Tests テストの検出を実行し、テストの変更、追加、削除を反映するようにテストエクスプローラーを更新します。2021.9 より前のバージョンの Python: Discover Tests に似ています。
Test: Rerun Failed Tests 直近のテスト実行で失敗したテストを実行します。2021.9 より前のバージョンの Python: Run Failed Tests に似ています。
Test: Rerun Last Run 直近のテスト実行で実行されたテストをデバッグします。
Test: Run All Tests 検出されたすべてのテストを実行します。2021.9 より前のバージョンの Python: Run All Tests に相当します。
Test: Run All Tests with Coverage 検出されたすべてのテストを実行し、テストによってコードのどの程度が網羅されているかを計算します。
Test: Run Test at Cursor エディターでカーソルを合わせているテストメソッドを実行します。2021.9 より前のバージョンの Python: Run Test Method... に似ています。
Test: Run Test in Current File エディターで現在フォーカスされているファイルのテストを実行します。2021.9 より前のバージョンの Python: Run Current Test File に相当します。
Test: Show Output すべてのテスト実行の詳細を含む出力を開きます。2021.9 より前のバージョンの Python: Show Test Output に似ています。
Testing: Focus on Test Explorer View テストエクスプローラービューを開きます。2021.9 より前のバージョンの Testing: Focus on Python View に似ています。
Test: Stop Refreshing Tests テスト検出をキャンセルします。

テスト構成設定

Python を使用したテストの動作は、VS Code が提供する一般的な UI 設定、および Python や有効にしたフレームワーク固有の設定によって制御されます。

一般的な UI 設定

テスト機能の UI に影響する設定は VS Code 自体が提供しており、"Testing" で検索すると VS Code 設定エディターで見つけることができます。

一般的な Python 設定

設定
(python.testing.)
既定値 説明
autoTestDiscoverOnSaveEnabled true テストファイルを保存したときに自動テスト検出を有効にするか無効にするかを指定します。この設定を変更した後、適用するためにウィンドウの再読み込みが必要になる場合があります。
cwd null テストの作業ディレクトリ(オプション)を指定します。この設定が存在すると、pytest の --rootdir 引数が動的に調整されます。
autoTestDiscoverOnSavePattern **/*.py autoTestDiscoverOnSaveEnabledtrue の場合に、どのファイルの変更が自動テスト検出をトリガーするかを決定するグロブパターンを指定します。
debugPort 3000 unittest テストのデバッグに使用されるポート番号です。
promptToConfigure true 潜在的なテストが検出された場合に、VS Code がテストフレームワークの構成を促すかどうかを指定します。

unittest 構成設定

Unittest 設定
(python.testing.)
既定値 説明
unittestEnabled false unittest をテストフレームワークとして有効にするかどうかを指定します。pytest の同等の設定は無効にする必要があります。
unittestArgs ["-v", "-s", ".", "-p", "*test*.py"] unittest に渡す引数。スペースで区切られた各要素はリストの別々の項目となります。デフォルトの説明については以下を参照してください。

unittest のデフォルト引数は以下の通りです

  • -v はデフォルトの冗長性を設定します。よりシンプルな出力が必要な場合は、この引数を削除してください。
  • -s . はテスト検出の開始ディレクトリを指定します。"test" フォルダーにテストがある場合は、引数を -s test(引数配列では "-s", "test")に変更します。
  • -p *test*.py はテストを検索するために使用される検出パターンです。この場合は、"test" という単語を含むすべての .py ファイルです。すべてのファイル名に "_test" を追加するなど、テストファイルの命名が異なる場合は、配列の適切な引数で *_test.py のようなパターンを使用します。

最初の失敗でテスト実行を停止するには、引数配列にフェイルファストオプション "-f" を追加します。

利用可能なオプションの全セットについては、unittest コマンドラインインターフェイスを参照してください。

pytest 構成設定

pytest 設定
(python.testing.)
既定値 説明
pytestEnabled false pytest をテストフレームワークとして有効にするかどうかを指定します。unittest の同等の設定は無効にする必要があります。
pytestPath "pytest" pytest へのパス。pytest が現在の環境の外にある場合は、フルパスを使用してください。
pytestArgs [] pytest に渡す引数。スペースで区切られた各要素はリストの別々の項目となります。pytest コマンドラインオプションを参照してください。

pytest のデフォルト引数は以下の通りです

  • rootdir は、ワークスペース内の python.testing.cwd 設定の存在に基づいて動的に調整されます。

pytest 設定で説明されているように、pytest.ini ファイルを使用して pytest を構成することもできます。

注意

pytest-cov カバレッジモジュールをインストールしている場合、pytest-cov も実行中のソースコードにアクセスするために同じ手法を使用するため、デバッグ中に VS Code がブレークポイントで停止しません。この動作を防ぐには、テストデバッグ時に pytestArgs--no-cov を含めてください(例: デバッグ構成に "env": {"PYTEST_ADDOPTS": "--no-cov"} を追加する)。(その起動構成の設定方法については、前述の テストのデバッグ を参照してください。)(詳細については、pytest-cov ドキュメントの Debuggers and PyCharm を参照してください。)

IntelliSense 設定

IntelliSense 設定
(python.analysis.)
既定値 説明
inlayHints.pytestParameters false pytest フィクスチャ引数の型のインレイヒントを表示するかどうか。許可される値は true または false です。

関連項目

© . This site is unofficial and not affiliated with Microsoft.