E2E 実行ランブック
[!NOTE] 最新の実装状況は 機能実装ステータス (Remaining Functionality) を参照してください。
目的 - リポジトリ内の API コンテナ経由でテストを実行する手順と、よくある失敗の対処法をまとめます。
前提
- Docker / Docker Compose がインストールされ、docker compose up -d でサービスが起動していること。
- API コンテナは evospikenet-api として動作し、ホストの 8000 に公開されている想定です。
主要エンドポイント
- GET /test/test-status — 現在のテスト実行状態(例: {"status":"idle","message":"No test running"})
- POST /test/run-tests — バックエンド内で pytest を実行します。クエリ/パラメータで test_type を指定可能(例: unit、integration、all)。
実行例(ホスト上)
# API が稼働していることを確認
curl -sS http://localhost:8000/test/test-status
# バックエンドでユニットテストを実行(同期呼び出し、応答に stdout/stderr が含まれる)
curl -sS -X POST "http://localhost:8000/test/run-tests?test_type=unit" -H "Content-Type: application/json" -o /tmp/e2e_run_output.json -w "\nHTTP_STATUS:%{http_code}\n"
# 結果確認
cat /tmp/e2e_run_output.json
注意点 / トラブルシュート
- run-tests は API 内でサブプロセス実行するため、コンテナ側の Python 環境に必要な依存が揃っている必要があります。今回の実行では以下のような問題が確認されました:
- ModuleNotFoundError: No module named 'torch._custom_ops' などの torch 関連エラー
- ModuleNotFoundError: No module named 'GPUtil', zmq, pkg_resources など依存不足
- テストソースの構文エラー(不正な except/indent 等)
- 対処:
- 軽量に動かす:
test_type=unitや特定のファイルだけを実行する(例は下記)。 - コンテナを修正する:
evospikenet-apiイメージに不足パッケージを追加するか、ホスト側で依存を満たした再ビルドを行う。- Dockerfile を編集し、必要な pip パッケージを追加 →
docker compose build api→docker compose up -d
- Dockerfile を編集し、必要な pip パッケージを追加 →
- コンテナ内で直接単体テストを実行して原因切り分け:
docker exec -it evospikenet-api /bin/bash source /opt/venv/bin/activate cd /home/app/app # 例: 単一テストファイルを実行 /opt/venv/bin/python -m pytest tests/unit/test_stdp_modulation.py -q
ログと結果の保存場所
- API は JSON レポート(プラグインがある場合)を /tmp/test_results.json に書くように設定されている場合があります。
- run-tests のレスポンス本体にも stdout / stderr / returncode が含まれます(呼び出し側で保存可能)。
CI と運用の提案 - CI ではフルテストを API 経由で一括実行するのではなく、ジョブ単位で必要なサブセットを実行することを推奨します。フルスイートは依存が重く失敗要因が増えるため、ステージングでのみ実行する方が扱いやすいです。
次のステップ
- 必要ならこのドキュメントを README.md にリンクしておきます。変更を反映しますか?