テスト
N.E.K.O. はユニットテスト、フロントエンド統合テスト、エンドツーエンドフローをカバーする包括的なテストスイートを備えています。
セットアップ
bash
# 依存関係をインストール
uv sync
# Playwright ブラウザをインストール(フロントエンド & e2e テスト用)
uv run playwright installテスト用 API キー
bash
cp tests/api_keys.json.template tests/api_keys.json
# tests/api_keys.json を編集して API キーを入力このファイルは gitignore されており、コミットされません。
テストの実行
WARNING
すべてのテストコマンドは正しい Python 環境を使用するために uv run を使用する必要があります。
bash
# すべてのテスト(e2e を除く)
uv run pytest tests/ -s
# ユニットテストのみ
uv run pytest tests/unit -s
# フロントエンド統合テスト
uv run pytest tests/frontend -s
# エンドツーエンドテスト(明示的なフラグが必要)
uv run pytest tests/e2e --run-e2e -sテスト構成
tests/
├── conftest.py # 共有フィクスチャ(サーバーライフサイクル、ページ、データディレクトリ)
├── api_keys.json # API キー(gitignore 対象)
├── unit/
│ ├── test_providers.py # マルチプロバイダー API 接続
│ ├── test_text_chat.py # OmniOfflineClient テキスト + ビジョンチャット
│ ├── test_voice_session.py # OmniRealtimeClient WebSocket セッション
│ └── test_video_session.py # OmniRealtimeClient ビデオ/画面ストリーミング
├── frontend/
│ ├── test_api_settings.py # API キー設定ページ
│ ├── test_chara_settings.py # キャラクター管理ページ
│ ├── test_memory_browser.py # メモリブラウザページ
│ ├── test_voice_clone.py # ボイスクローンページ
│ └── test_emotion.py # Live2D + VRM 感情マネージャーページ
├── e2e/
│ └── test_e2e_full_flow.py # 完全なアプリジャーニー(8 ステージ)
├── utils/
│ ├── llm_judger.py # LLM ベースのレスポンス品質評価器
│ └── audio_streamer.py # オーディオストリーミングテストユーティリティ
└── test_inputs/
├── script.md # オーディオテスト用の録音スクリプト
└── screenshot.png # ビジョンテスト用のテストスクリーンショットテストカテゴリ
ユニットテスト (tests/unit/)
コアバックエンドコンポーネントを分離してテストします:
- プロバイダー接続: サポートされているすべてのプロバイダーへの API 接続を検証
- テキストチャット: テキストとビジョン入力で
OmniOfflineClientをテスト - ボイスセッション:
OmniRealtimeClientの WebSocket 接続をテスト - ビデオセッション: 画面共有とビデオストリーミングをテスト
フロントエンドテスト (tests/frontend/)
Playwright を使用して Web UI ページをテストします:
- API 設定: キー入力、プロバイダー切り替え、保存/読み込み
- キャラクター設定: CRUD 操作、性格編集
- メモリブラウザ: メモリファイルの一覧、編集、保存
- ボイスクローン: アップロードインターフェース、ボイスプレビュー
- 感情マネージャー: Live2D と VRM の感情マッピング
E2E テスト (tests/e2e/)
完全なシステムを実行する完全なユーザージャーニーテストです。以下の理由により --run-e2e フラグが必要です:
- 実際のサーバープロセスを起動する
- 実際の API 呼び出しを行う
- 実行に長い時間がかかる
テストユーティリティ
LLM Judger (tests/utils/llm_judger.py)
レスポンスの品質を評価する LLM ベースの評価器です。e2e テストでキャラクターの応答が文脈的に適切で、キャラクターに沿っており、事実として妥当であることを検証するために使用されます。
Playwright パターン
フロントエンドテストは 偵察後アクション パターンに従います:
- ページに移動する
networkidleを待つ(JS レンダリングコンテンツには重要)- レンダリングされた DOM を検査する
- 検出したセレクターを使用してアクションを実行する
python
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto('http://localhost:48911')
page.wait_for_load_state('networkidle')
# ページとの安全なインタラクションが可能TIP
CI 互換性のために常に Chromium をヘッドレスモードで起動してください。動的コンテンツを検査する前に networkidle を待ってください。
新しいテストの作成
- テストファイルを適切なサブディレクトリに配置します(
unit/、frontend/、e2e/) - pytest マーカーを使用します:
@pytest.mark.unit、@pytest.mark.frontend、@pytest.mark.e2e - サーバーライフサイクルとページセットアップには
conftest.pyの共有フィクスチャを使用します - 既存の命名規則に従います:
test_<module>_<feature>.py
