はじめに
web sever の実行時に breakpoint で止める方法を書いた記事はたくさん見かけます。
しかし、dokcer compose したコンテナ内での pytest 実行時に breakpoint で止める記事は見かけず、苦労したので書きます。
(test code に break point を置いた場合の話です)
確認した環境
- macOS Big Sur 11.6.1
- Visual Studio Code Version: 1.59.0
- Docker Desktop 4.3.1.
- Docker Engine v20.10.11
実践
ローカルでのステップ
- VsCodeからコンテナに attach するための extension を install する
- docker compose up でアプリケーションの dev コンテナ を起動する
- VsCode の左端の緑部分をクリック
- Attach to Running Container... を選択
- attach できるコンテナの一覧が出るので、 アプリケーションの dev コンテナを選択する
- 選択するとリモートコンテナコンテナに入れる
リモートコンテナ(アプリケーションの dev コンテナ)内のステップ
- リモートコンテナの中身が新しく VSCode
- 公式の debug 記事 に記載のある VsCode の debugger 機能を含む extension を install する
- VsCode のエクスプローラーで以下を確認する
- テストコードが存在すること
- アプリケーションのコードが存在すること
- .vscode フォルダ内に launch.json が存在すること
- launch.json の configurations 項目を確認する
- name : 任意 (ここでは exec pytest)
- 後で debug を開始する際の名称になる
- request : launch
- module : pytest
- name : 任意 (ここでは exec pytest)
launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Module",
"type": "python",
"request": "launch",
"module": "pytest",
"args": [
"tests"
]
}
]
}