Skip to content

Conversation

@TkymHrt
Copy link
Member

@TkymHrt TkymHrt commented Jul 21, 2025

対応Issue

  • resolve #0

概要

BINGOアプリケーション用のK6高性能負荷試験ツールを追加しました。WebSocketとHTTP APIの分離型負荷試験が可能です。

ファイル統合・整理済み: 不正確・冗長なファイルを削除し、4ファイル構成で最適化されています。

実装詳細

ファイル統合・整理の実施

統合前(6ファイル)→ 統合後(4ファイル)

削除されたファイル

  • http-api-load-test.js - HTTP API専用(取得処理が不正確)
  • websocket-load-test.js - 基本WebSocket版(最適化版で代替)

統合・リネームされたファイル

  • 🔄 optimized-user-load-test.jsunified-load-test.js - 統合HTTP負荷テスト
  • 🔄 optimized-websocket-test.jswebsocket-load-test.js - WebSocket負荷テスト

最終ファイル構成(4ファイル)

  • unified-load-test.js: 統合HTTP負荷テスト(ユーザー行動シミュレーション)
  • websocket-load-test.js: WebSocket専用負荷テスト
  • debug-websocket-test.js: WebSocketデバッグ用(本番環境)
  • debug-local-websocket-test.js: WebSocketデバッグ用(ローカル環境)

主な機能

1. 統合HTTP負荷試験(ユーザー行動シミュレーション)

  • 現実的なユーザー行動パターンの再現
  • HTTP APIの集中的な負荷テスト
  • ページ遷移とAPI呼び出しの組み合わせ
  • JSONレスポンス検証
  • エラーレート監視
  • レスポンス時間の詳細計測

2. WebSocket専用負荷試験

  • WebSocket接続の大量テスト
  • リアルタイムデータ受信テスト
  • 接続維持・切断パターンのテスト
  • メッセージ受信の詳細分析
  • サブスクリプション成功率測定

3. デバッグ用テスト

  • 軽負荷での動作確認
  • 環境別の接続テスト
  • スクリプトの検証・デバッグ機能

テスト対象

統合HTTP負荷試験

  • ユーザー詳細取得 (GraphQL)
  • ビンゴ番号データ取得 (GraphQL)
  • 景品情報取得 (GraphQL)
  • エラーハンドリング検証

WebSocket負荷試験

  • リアルタイム番号更新
  • リアルタイム景品状態更新
  • 接続断・再接続処理
  • 大量同時接続テスト

負荷パターン

  1. 段階的負荷増加: 10 → 50 → 100 → 200ユーザー
  2. 一定負荷維持: 各段階30秒間維持
  3. ピーク負荷テスト: 最大負荷での性能確認
  4. 段階的負荷減少: 負荷の段階的解放

K6の技術的特徴

高性能JavaScript実行

  • 軽量なリソース消費
  • 高速なスクリプト実行
  • 詳細なメトリクス出力
  • JSON形式での結果保存

カスタムメトリクス

  • http_response_time: HTTP応答時間
  • websocket_connection_time: WebSocket接続時間
  • websocket_message_latency: メッセージ遅延
  • page_load_time: ページロード時間

チェック機能

  • レスポンス状態の検証
  • データ形式の妥当性確認
  • エラー率の自動計算
  • 成功率の詳細分析

使用方法

# 統合HTTP負荷試験(ユーザー行動シミュレーション)
./run-tests.sh unified

# WebSocket専用負荷試験
./run-tests.sh websocket

# デバッグ用テスト
./run-tests.sh debug-websocket

# 最大ユーザー数指定
./run-tests.sh -u 1000 unified

# ローカル環境でのテスト
./run-tests.sh -e local -u 100 websocket

出力ファイル

  • JSON結果ファイル: results/k6_[test_type]_YYYYMMDD_HHMMSS.json
  • サマリーファイル: results/k6_[test_type]_summary_YYYYMMDD_HHMMSS.json

画面スクリーンショット等

コマンドライン実行のため、スクリーンショットはありません。K6実行時にはリアルタイムのメトリクス表示があります。

テスト項目

  • 統合HTTP負荷試験が正常に実行される
  • WebSocket負荷試験が正常に実行される
  • デバッグ用スクリプトが正常に動作する(本番・ローカル)
  • JSON結果ファイルが正常に生成される
  • サマリーファイルが適切に出力される
  • 環境変数(local/production)の切り替えが動作する
  • 負荷パターンが設計通りに動作する
  • カスタムメトリクスが正確に記録される
  • WebSocketサブスクリプションが正常に動作する
  • HTTPとWebSocketの分離テストが適切に実行される
  • エラーハンドリングが正常に動作する

備考

ファイル統合の効果

  • 精度向上: 不正確なHTTP API実装を削除
  • 保守性向上: 6ファイル → 4ファイルでシンプル化
  • 冗長性排除: 基本版と最適化版の重複を解消
  • 命名の明確化: より直感的なファイル名に変更

注意事項

  • このブランチはK6専用です(Artilleryファイルは含まれていません)
  • 実行にはK6バイナリが必要です(自動インストールされます)
  • JavaScriptベースの高性能負荷試験です
  • 統合により、2つのメインテストタイプ + デバッグ用を提供

K6の特徴

  • 高性能なJavaScript実行エンジン
  • 軽量な実行リソース
  • 詳細なメトリクス出力
  • JSON形式での結果保存
  • WebSocketとHTTPの分離テストサポート

パフォーマンス目標

  • HTTP平均レスポンス時間: < 300ms
  • HTTP 95%ileレスポンス時間: < 800ms
  • WebSocket接続時間: < 500ms
  • エラー率: < 0.5%
  • 同時WebSocket接続: 200+
  • ページロード時間: < 2000ms(95%ile < 3000ms)

統合後のテスト構成

  1. unified-load-test.js: メイン統合テスト(HTTP + ユーザー行動)
  2. websocket-load-test.js: WebSocket専用テスト(リアルタイム通信)
  3. debug-websocket-test.js: 本番環境デバッグ
  4. debug-local-websocket-test.js: ローカル環境デバッグ

ブランチ構成

このプロジェクトは3ブランチに分離されています:

@TkymHrt TkymHrt changed the base branch from develop to feat/yama/server-testing July 25, 2025 09:19
TkymHrt added 2 commits July 25, 2025 18:24
- Artilleryファイルを削除してK6専用に簡素化
- run-tests.shをK6専用に書き換え
- package.jsonをK6専用に修正(依存関係からartilleryを削除)
- K6専用のREADMEを作成
- test-functionality.shをK6専用に修正
- 削除: http-api-load-test.js (取得処理が不正確)
- 削除: websocket-load-test.js (冗長)
- リネーム: optimized-user-load-test.js → unified-load-test.js
- リネーム: optimized-websocket-test.js → websocket-load-test.js
- 更新: run-tests.sh を新しいファイル構成に対応
- 更新: README.md を新しいテスト種類に対応

結果: 4ファイル構成(debug除いて2つのメインファイル)でより分かりやすく
@TkymHrt TkymHrt force-pushed the feat/yama/k6-load-testing branch from eb12eb6 to c6b1857 Compare July 25, 2025 09:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants