コンテンツにスキップ

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 を指定可能(例: unitintegrationall)。

実行例(ホスト上)

# 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 apidocker compose up -d
  • コンテナ内で直接単体テストを実行して原因切り分け:
    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 にリンクしておきます。変更を反映しますか?