VSCodeのPython拡張機能でテストカバレッジ表示機能が追加されました
はじめに
こんにちは、アノテーションのなかたです。
以前までは、Coverage Gutters 等の拡張機能を追加でインストールする必要がありましたが、Python拡張機能が対応したことで導入がしやすくなったと思います。
やってみる
今回は、Pytest と pytest-cov によるテスト環境でカバレッジ表示機能を試しています。
また手順 1, 2, 3 については、VSCode で Pytest によるテストカバレッジ環境を用意する手順になりますので、用意できている方は手順4から読み進めていただければと思います。
1. テスト環境の準備
Python拡張機能をインストールします。
また、Pythonやライブラリをインストールします。
Python仮想環境の作成やPytestのインストール
コマンドで実行する例を以下に挙げていきます。
# フォルダの作成
mkdir app
cd app
# Python仮想環境の作成と起動
python3 -m venv .venv
source .venv/bin/activate
# Pytestのインストール
pip install pytest
# フォルダの作成
mkdir src
mkdir tests
# ImportErrorを避けるため、__init__.pyの作成
touch tests/__init__.py
テスト対象のスクリプトを作成します。
def add(x: int, y: int) -> int:
return x + y
five = add(2, 3)
print(f'{five = }')
テストコードを書きます。
from src.main import add
def test_add():
assert add(1, 2) == 3
assert add(2, 4) == 6
assert add(3, 5) == 8
念のため、pytestコマンドからテストが実行できることを確認します。
(.venv) vscode_python_coverage % pytest tests/test_main.py
================================================================== test session starts ===================================================================
platform darwin -- Python 3.12.6, pytest-8.3.3, pluggy-1.5.0
rootdir: /Users/xxxx/Documents/Dev/vscode_python_coverage
collected 1 item
tests/test_main.py . [100%]
=================================================================== 1 passed in 0.01s ====================================================================
実行が確認できました。
以下のようなディレクトリ構造でテストを想定しています。
% tree
.
├── src
│ └── main.py
└── tests
├── __init__.py
└── test_main.py
3 directories, 3 files
2. テストエクスプローラーの準備
テストエクスプローラーを準備していきます。
まず、Configure Python Tests
からテストに使うツールを選択します。
今回はPytestを使うので、そちらを選択します。
次に、テストコードを配置するフォルダを指定します。
tests
フォルダを作成しておいたため、そちらを選択します。
すると、このようにそれぞれのテストを実行できるUIが用意されます。
ファイルの横に表示されている>
ボタンからテストの実行が可能です。
3. テストカバレッジ機能の有効化
カバレッジ結果を集計するため、pytest-cov
ライブラリをインストールします。
pip install pytest-cov
またsettings.json
にて、Pytest実行時にカバレッジファイルが作成されるよう以下のJSONを入力します。
{
// Pytestの有効化
"python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true,
// Pytest実行時のオプション
"python.testing.pytestArgs": [
"tests", "--cov=src", "--cov-report", "xml"
]
}
4. カバレッジ表示機能の有効化
設定に以下の項目を追加し、テストカバレッジ表示機能を有効化します。
"python.experiments.optInto": ["pythonTestAdapter"]
設定を読み込んだ状態でPython拡張機能を起動させたいので、ウィンドウのリロードを行います。
コマンドパレット(Command + Shift + p
)からDeveloper: Reload Window
を選択することでリロードができます。
リロードした後にテストエクスプローラーを表示すると、テスト項目の右側にてチェックマークのようなマークが付属したテスト実行ボタンが表示されると思います。
こちらが表示されたことでカバレッジ表示機能の有効化が確認できました。
5. カバレッジ表示機能を試してみる
まず、カバレッジが表示されていない画面を見てみます。
特にテストに関連する表示は見当たりません。
先ほども言及したチェックマークのついたボタンから、テストを実行します。
コードブロックごとにテストがカバーされている部分とされていない部分が色分けされました。
テストでカバーしていない例外ブロックをパッと把握できるようになりました。
ディレクトリツリーでもカバレッジ結果が表示されていました。
おわりに
今回の検証において、設定項目の追加し忘れや拡張機能がリロードされていないことによりハマった部分が多かったです。
有効化する際には、手順を着実に確認しながら進めるのが良いと感じました。
参考
アノテーション株式会社について
アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。