Files
VRCT/src-python/docs/test_endpoints.md
misyaguziya 3af594960a test_endpoints.py と docs/test_endpoints.md を追加: APIエンドポイント総合テストモジュールを実装・文書化
- 新規: src-python/test_endpoints.py を追加。メインループ統合の総合テストモジュールを実装
  - /set/data/* の動的値を実行時に /get/data/... から取得して self.config_dict にキャッシュしてから選択する方式を導入
  - main_instance の start()/controller.init() 呼び出しと、Watchdog 用の no-op コールバック設定を追加
  - main.mapping のすべての status を True に設定してテスト対象を列挙
  - /set/enable /set/disable /set/data /run /delete/data の個別テスト実装(single/all/random/specific パターン)
  - LLM/API 関連(plamo/gemini/openai/lmstudio/ollama 等)のモデルリスト取得・ランダム選択、認証キー/URL 系は期待ステータスに [200,400] を設定
  - マイク/スピーカー等の検証(閾値・タイムアウト)で不正値時に期待ステータスを [400] にするバリデーション追加
  - 実行系エンドポイント(/run/*)のテスト実装、テスト不能な操作は [401] でスキップ扱い
  - ランダムアクセステスト(全体/ON-OFF/特定セット)を実装
  - 翻訳の総当たりテスト機能と結果を translation_test_results.json に出力
  - テスト結果を収集する record_test_result と generate_summary によるサマリー出力を実装
  - 実行中のデバッグログ出力やスキップ/エラー時の詳細ログを追加

- 新規: src-python/docs/test_endpoints.md を追加。上記モジュールの目的・使用方法・取得/キャッシュ戦略・対象エンドポイント一覧などを文書化

目的: API エンドポイントの包括的な自動テスト基盤を整備し、動的値取得による安定化・LLM/API の接続挙動検査・ランダム負荷試験を容易にする
2025-10-30 22:03:37 +09:00

4.9 KiB
Raw Blame History

test_endpoints.py - APIエンドポイントテストモジュール

概要

VRCTアプリケーションのAPIエンドポイントを包括的にテストするためのモジュールです。メインループの各種機能をランダムアクセスでテストし、システムの安定性と堅牢性を検証します。

2025-10 更新点commit a54538e 反映)

動的値が必要な /set/data/* エンドポイントに対し、事前に対応する /get/data/... エンドポイントを呼び出して最新値を取得し、self.config_dict にキャッシュしてからランダム選択する方式に変更しました。これにより以下が改善されています:

  • 翻訳/転写エンジン選択時の存在しないキー送信防止
  • 計算デバイス / 重みタイプ選択の安定化(リスト更新後に選択)
  • マイク/スピーカー関連タイムアウト値の正常範囲チェック(取得した最新値を基準にバリデーション)
  • Whisper / CTranslate2 重みタイプ辞書のキー集合変化への追従

例: "/set/data/selected_translation_engines" 試験前に "/get/data/translation_engines" を呼び、取得したリストから random.choice()。従来の初期キャッシュ依存から、実行時取得へ移行。

主要機能

Color クラス

  • ANSIエスケープシーケンスを使用したコンソール出力色彩管理
  • テスト結果の視覚的表示(成功・失敗・スキップ等)

TestMainloop クラス

  • APIエンドポイントの包括的テスト実行
  • ランダムアクセステスト
  • テスト結果の記録・分析
  • VRCTメインループとの統合テスト

主要メソッド

テスト実行メソッド

  • test_endpoints_on_off_all(): ON/OFF系エンドポイントの全テスト
  • test_set_data_endpoints_all(): データ設定系エンドポイントの全テスト
  • test_run_endpoints_all(): 実行系エンドポイントの全テスト
  • test_endpoints_all_random(): 全エンドポイントのランダムアクセステスト

特定機能テスト

  • test_translate_all_language_pairs(): 全言語ペアでの翻訳テスト
  • test_endpoints_on_off_continuous(): ON/OFF連続切り替えテスト
  • test_endpoints_specific_random(): 特定エンドポイントのランダムテスト

結果分析

  • generate_summary(): テスト結果のサマリー生成
  • record_test_result(): テスト結果の記録

使用方法

基本的な使い方

# テストインスタンスを作成
test = TestMainloop()

# 各種テストを実行
test.test_endpoints_on_off_all()
test.test_set_data_endpoints_all()
test.test_run_endpoints_all()

# テスト結果のサマリー表示
test.generate_summary()

ランダムテストの実行

# 全エンドポイントのランダムアクセステスト
test.test_endpoints_all_random()

# 特定エンドポイントのランダムテスト
test.test_endpoints_specific_random()

依存関係

  • mainloop: VRCTメインループモジュール
  • random: ランダムテストデータ生成
  • time: テスト間隔制御

テスト対象エンドポイント

制御系

  • /set/enable/*: 機能有効化
  • /set/disable/*: 機能無効化

データ設定系

  • /set/data/*: 各種設定データの更新

動的取得対象(代表例):

  • selected_translation_engines/get/data/translation_engines
  • selected_transcription_engine/get/data/transcription_engines
  • selected_translation_compute_device/get/data/translation_compute_device_list
  • ctranslate2_weight_type/get/data/selectable_ctranslate2_weight_type_dict
  • whisper_weight_type/get/data/selectable_whisper_weight_type_dict
  • selected_mic_host / selected_mic_device/get/data/mic_host_list / /get/data/mic_device_list
  • selected_speaker_device/get/data/speaker_device_list

実行系

  • /run/*: 各種機能の実行

データ削除系

  • /delete/data/*: データの削除

注意事項

  • テスト実行前にconfig.jsonを削除して初期化
  • 重いAIモデルを使用するテストは実行時間に注意
  • ランダムテストは指定回数デフォルト1000-10000回実行される
  • テスト終了時は自動的にすべての機能を無効化する

エラーハンドリング

  • 各テストは独立して実行され、一つの失敗が全体に影響しない
  • 期待されるステータスコードと実際の結果を比較
  • VRAM不足等のリソースエラーも適切にハンドリング

テスト結果の分類

  • PASS: 期待されるステータスコードと一致
  • ERROR: 期待されるステータスコードと不一致
  • SKIP: テスト実行不可401ステータス
  • Invalid: 無効なエンドポイント404ステータス