Skip to content

Conversation

@TkymHrt
Copy link
Member

@TkymHrt TkymHrt commented Jul 21, 2025

対応Issue

  • resolve #0

概要

BINGOアプリケーション用のArtillery負荷試験ツールを追加しました。HTTPとWebSocketの統合負荷試験が可能です。

ファイル統合・整理済み: 冗長なファイルを削除し、3ファイル構成でシンプル化されています。

実装詳細

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

統合前(5ファイル)→ 統合後(3ファイル)

削除されたファイル

  • integrated-load-test.yml - 基本版(最適化版で機能包含)
  • artillery-processor.js - 基本プロセッサー(最適化版で機能包含)

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

  • 🔄 optimized-user-scenarios.ymlload-test.yml - メイン設定ファイル
  • 🔄 optimized-processor.jsprocessor.js - メインプロセッサー

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

  • load-test.yml: Artillery負荷試験設定(最適化版ベース)
  • processor.js: カスタムプロセッサー(最適化版ベース)
  • dynamic-config.js: 動的設定生成スクリプト

主な機能

Artillery統合負荷試験

  • HTTP APIとWebSocketの統合テスト
  • 動的設定生成(最大ユーザー数に基づくスケーリング)
  • より現実的なユーザー行動パターン
  • カスタムメトリクスによる詳細な性能測定

負荷パターン

  1. ウォームアップ: 軽負荷での接続確認
  2. 通常負荷: 実際のユーザー数をシミュレート
  3. ピーク負荷: イベント開始時の同時アクセス
  4. ストレステスト: システム限界のテスト
  5. クールダウン: 負荷の段階的減少

テストシナリオ

ユーザー閲覧シナリオ (70%)

  • ユーザーページへのアクセス
  • ビンゴ番号データの取得 (GraphQL)
  • 景品情報の取得 (GraphQL)

WebSocket購読シナリオ (30%)

  • リアルタイム番号更新のサブスクリプション
  • リアルタイム景品状態のサブスクリプション
  • WebSocket接続の維持・切断管理

技術的な改善点

動的設定生成

  • dynamic-config.jsによる最大ユーザー数対応
  • 実行時の負荷レベル自動調整
  • 環境別設定の柔軟な対応

カスタムメトリクス

  • ページロード時間測定
  • API応答時間の詳細分析
  • WebSocket接続時間監視
  • エラー率の細かい分類

プロセッサー機能

  • ランダムユーザーID生成
  • GraphQLレスポンス検証
  • WebSocketメッセージ処理
  • パフォーマンス測定の自動化

使用方法

# 基本実行
./run-tests.sh artillery

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

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

出力ファイル

  • JSON結果ファイル: results/artillery_YYYYMMDD_HHMMSS.json
  • HTMLレポート: results/artillery_report_YYYYMMDD_HHMMSS.html
  • 動的設定: results/artillery_dynamic_config_YYYYMMDD_HHMMSS.yml

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

コマンドライン実行のため、スクリーンショットはありません。Artillery実行時には詳細な進行状況とメトリクスが表示されます。

テスト項目

  • Artillery統合負荷試験が正常に実行される
  • 動的設定生成が最大ユーザー数に応じて適切に動作する
  • WebSocketサブスクリプションが正常に動作する
  • HTTPとWebSocketの統合テストが実行される
  • HTMLレポートが正常に生成される
  • JSON結果ファイルが適切に出力される
  • カスタムメトリクスが正確に記録される
  • 環境変数(local/production)の切り替えが動作する
  • 負荷パターンが設計通りに実行される
  • プロセッサーのカスタム機能が正常に動作する

備考

ファイル統合の効果

  • 保守性向上: 5ファイル → 3ファイルでシンプル化
  • 冗長性排除: 基本版と最適化版の重複を解消
  • 命名の明確化: より直感的なファイル名に変更
  • 機能の集約: 最適化版の機能をベースに統一

注意事項

  • このブランチはArtillery専用です(K6ファイルは含まれていません)
  • 実行には Node.js と npm が必要です
  • Artillery は自動インストールされます
  • 統合により、1つのメインテストタイプのみ提供

Artillery の特徴

  • YAML設定によるシナリオ定義
  • JavaScript プロセッサーによる拡張
  • HTMLレポートの自動生成
  • リアルタイムメトリクス表示

パフォーマンス目標

  • HTTP平均レスポンス時間: < 500ms
  • HTTP 95%ileレスポンス時間: < 1000ms
  • WebSocket接続時間: < 1000ms
  • エラー率: < 1%
  • 同時WebSocket接続: 500+

ブランチ構成

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

@hikahana hikahana changed the base branch from develop to feat/yama/server-testing July 25, 2025 06:12
@hikahana hikahana changed the base branch from feat/yama/server-testing to develop July 25, 2025 06:14
@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:22
- K6ファイルを削除してArtillery専用に簡素化
- run-tests.shをArtillery専用に書き換え
- package.jsonをArtillery専用に修正
- Artillery専用のREADMEを作成
- test-functionality.shからK6部分を削除
- 削除: integrated-load-test.yml (基本版、最適化版で代替)
- 削除: artillery-processor.js (基本版、最適化版で代替)
- リネーム: optimized-user-scenarios.yml → load-test.yml
- リネーム: optimized-processor.js → processor.js
- 更新: run-tests.sh を統合構成に対応(1つのメインテストタイプ)
- 更新: README.md を統合後の内容に対応

結果: 3ファイル構成(load-test.yml, processor.js, dynamic-config.js)でシンプル化
@TkymHrt TkymHrt force-pushed the feat/yama/artillery-load-testing branch from 63cb8e8 to 0b52ba3 Compare July 25, 2025 09:23
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