はじめに
VSCodeでコンテナ内のPytestをリモートデバッグをするには
- PythonもしくはPython関連のFrameworkのDockerfileの作成
- リモートデバッグの設定
- Python Test Explorer for Visual Studio Code(VSCodeの拡張機能)のインストール
をする必要があります
今回はDjango Rest Framework内でPytestのデバッグを行います
Dockerでの環境構築したことないよ!という方は下記の記事を参考にしてください
Poetry を使用する場合は?
リモートデバッグの設定の記事の後半に記載されていますPoetryのPythonのパスの指定方法を参照してください
使用する拡張機能について
今回はテストをGUIで確認・実行できる拡張機能である
Python Test Explorer for Visual Studio Code
を使用します
ボタンひとつで全てのテストを実行できたり任意のテストを実行できるだけでなく、
ブレークポイントも使えるので非常に便利です
使用するテストのフレームワーク設定方法
command+shift+p
を押した後Python:テストを構成する
を選択します
使用するテストフレームワークを選択します
今回はPytestを選択しますがUnittestも選択できます
後からテストフレームワークを変更される場合はもう一度上記のPython:テストを構成する
からはじめてください
以下のようなファイルが作成されたら成功です
{
"python.testing.pytestArgs": [
"."
],
"python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true
}
実際に使用してみよう!
テストエクスプローラの概要
サイドバーにあるテストエクスプローラのアイコンを選択するとテストの一覧が表示されます
テストエクスプローラの文字の右側に4つのアイコンがあります。左から順に
- 再読み込み
- テストを一斉に実行
- テストを一斉にデバッグ(ブレークポイント)
- ターミナルの起動
また、個別のメソッドの
- 実行
- デバッグ
- メソッドのあるファイルへ飛ぶ
デバッグしてみよう!
該当する箇所へブレークポイントを設定し、ブレークポイントのマークを押すとデバッガーが起動します
通常のVSCodeのデバッガ同様変数の中をみたりウォッチの設定、デバッグコンソールも使用できます
また、APIのテストを行う際は該当するメソッドにブレークポイントを設定するとテストコード同様ブレークポイントが使えるので大変便利です
Pytest用の設定を1つのファイルにまとめたい時
例えば1つのリポジトリに複数のプロジェクトでPytestの設定をしたい時、今の方法だとPythonのパスがプロジェクトごとに分かれているとプロジェクトごとにsettings.jsonを生成する必要があるので不便です
そこで、launch.jsonにPytestの設定をまとめて記載することができます
{
"version": "0.2.0",
"configurations": [
{
"name": "Pytest Project1",
"type": "debugpy",
"request": "launch",
"cwd": "${workspaceFolder}/projects/project1/",
"module": "pytest",
"args": [
"--log-cli-level=INFO"
],
"python": "${workspaceFolder}/projects/project1/.venv/bin/python",
},
{
"name": "Pytest Project2",
"type": "debugpy",
"request": "launch",
"cwd": "${workspaceFolder}/projects/project2/",
"module": "pytest",
"args": [
"--log-cli-level=INFO"
],
"python": "${workspaceFolder}/projects/project2/.venv/bin/python",
}
]
}
注意
pytest.iniのaddoptsにcoverageを入れるとブレークポイントが使えない不具合があるようです
リモートデバッグの設定をしたにも関わらずブレークポイントが機能しない場合はpytest.iniを確認してください
記事の紹介
以下の記事も書きましたので良かったら読んでみてください
参考