OpenClaw QA E2E自動化ガイド:テスト環境構築から実運用まで
開発中に「テストコードは通るのに、実際の環境だと挙動が怪しい」という経験はありませんか?ユニットテストだけではカバーしきれない複雑なやり取りや、外部サービスとの連携における予期せぬトラブルは、多くの開発者を悩ませる共通の課題です。
OpenClaw QA E2E Automationは、こうした現場の課題を解決するために設計された、より現実的で実践的なテスト環境を提供します。
QA E2E Automation
Section titled “QA E2E Automation”プライベートなQAスタックは、単一のユニットテストよりも現実的で、実際のチャンネルに近い形でOpenClawを検証するために用意されています。
現在の構成要素は以下の通りです。
extensions/qa-channel: DM、チャンネル、スレッド、リアクション、編集、削除などの操作をシミュレートする合成メッセージチャンネル。extensions/qa-lab: トランスクリプトの監視、受信メッセージの注入、Markdownレポートの出力を行うデバッガーUIおよびQAバス。qa/: キックオフタスクとベースラインQAシナリオのための、リポジトリ管理されたシードアセット。
現在のQAオペレーターフローは、2ペイン構成のQAサイトになっています。
- 左側: エージェントを備えたGatewayダッシュボード(制御UI)。
- 右側: Slackのようなトランスクリプトとシナリオプランを表示するQA Lab。
以下のコマンドで実行します。
pnpm qa:lab:upこれによりQAサイトがビルドされ、DockerベースのGatewayレーンが起動します。QA Labページが公開されるため、オペレーターや自動化ループからエージェントにQAミッションを与え、実際のチャンネルの挙動を観察し、成功・失敗・ブロック状態を記録できます。
Dockerイメージを毎回リビルドせずにQA Lab UIを素早くイテレーションするには、バインドマウントされたQA Labバンドルを使用してスタックを起動してください。
pnpm openclaw qa docker-build-imagepnpm qa:lab:buildpnpm qa:lab:up:fastpnpm qa:lab:watchqa:lab:up:fastはDockerサービスをビルド済みのイメージで維持し、extensions/qa-lab/web/distをqa-labコンテナにバインドマウントします。qa:lab:watchは変更時にバンドルを再ビルドし、QA Labのアセットハッシュが変更されるとブラウザが自動的にリロードされます。
Matrixの実際のトランスポートによるスモークテストを行うには、以下を実行します。
pnpm openclaw qa matrixこのレーンはDocker内に使い捨てのTuwunelホームサーバーをプロビジョニングし、一時的なドライバー、SUT、オブザーバーユーザーを登録してプライベートルームを1つ作成します。その後、QA Gatewayの子プロセス内で実際のMatrixプラグインを実行します。ライブトランスポートレーンは、子プロセスの設定をテスト対象のトランスポートに限定するため、Matrixは子設定にqa-channelを含めずに実行されます。構造化されたレポートアーティファクトと、結合されたstdout/stderrログが指定されたMatrix QA出力ディレクトリに書き込まれます。外側のscripts/run-node.mjsのビルド/ランチャー出力もキャプチャするには、OPENCLAW_RUN_NODE_OUTPUT_LOG=<path>をリポジトリローカルのログファイルに設定してください。
Telegramの実際のトランスポートによるスモークテストを行うには、以下を実行します。
pnpm openclaw qa telegramこのレーンは使い捨てサーバーをプロビジョニングする代わりに、1つの実際のプライベートTelegramグループをターゲットにします。これにはOPENCLAW_QA_TELEGRAM_GROUP_ID、OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN、OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKENに加え、同じプライベートグループ内に2つの異なるボットが必要です。SUTボットにはTelegramのユーザー名が必要であり、ボット間の観測は、両方のボットで@BotFatherのBot-to-Bot Communication Modeが有効になっている場合に最も効果的です。
ライブトランスポートレーンは、それぞれが独自のシナリオリストの形式を発明するのではなく、1つの小さな共通コントラクトを共有するようになりました。
qa-channelは広範な合成製品動作スイートとして残り、ライブトランスポートカバレッジマトリックスの一部ではありません。
| Lane | Canary | Mention gating | Allowlist block | Top-level reply | Restart resume | Thread follow-up | Thread isolation | Reaction observation | Help command |
|---|---|---|---|---|---|---|---|---|---|
| Matrix | x | x | x | x | x | x | x | x | |
| Telegram | x | x |
これにより、qa-channelは広範な製品動作スイートとして維持され、Matrix、Telegram、および将来のライブトランスポートは1つの明示的なトランスポートコントラクトチェックリストを共有します。
DockerをQAパスに持ち込まずに使い捨てのLinux VMレーンを使用するには、以下を実行します。
pnpm openclaw qa suite --runner multipass --scenario channel-chat-baselineこれは新しいMultipassゲストを起動し、依存関係をインストールし、ゲスト内でOpenClawをビルドしてqa suiteを実行し、通常のQAレポートとサマリーをホスト上の.artifacts/qa-e2e/...にコピーします。
これはホスト上のqa suiteと同じシナリオ選択動作を再利用します。ホストおよびMultipassスイートの実行は、デフォルトで分離されたGatewayワーカーを使用して、最大64ワーカーまたは選択されたシナリオ数まで並列でシナリオを実行します。ワーカー数を調整するには--concurrency <count>を使用し、シリアル実行には--concurrency 1を使用してください。
ライブ実行は、ゲストにとって実用的なサポートされているQA認証入力を転送します(環境ベースのプロバイダーキー、QAライブプロバイダー設定パス、および存在する場合はCODEX_HOME)。ゲストがマウントされたワークスペースを通じて書き戻せるように、--output-dirはリポジトリルートの下に維持してください。
Repo-backed seeds
Section titled “Repo-backed seeds”シードアセットはqa/内に配置されています。
qa/scenarios/index.mdqa/scenarios/*.md
これらは意図的にgitで管理されており、QAプランが人間とエージェントの両方から見えるようになっています。
qa-labは汎用的なMarkdownランナーとして維持されるべきです。各シナリオのMarkdownファイルは1回のテスト実行における信頼できる唯一の情報源であり、以下を定義する必要があります。
- シナリオメタデータ
- ドキュメントとコードの参照
- オプションのプラグイン要件
- オプションのGateway設定パッチ
- 実行可能な
qa-flow
qa-flowを支える再利用可能なランタイムサーフェスは、汎用的かつ横断的なままであることが許可されています。例えば、Markdownシナリオは、特別なケースのランナーを追加することなく、Gatewayのbrowser.requestシームを通じて埋め込み制御UIを駆動するブラウザ側のヘルパーと、トランスポート側のヘルパーを組み合わせることができます。
ベースラインリストは、以下をカバーするのに十分な広さを維持する必要があります。
- DMおよびチャンネルチャット
- スレッドの動作
- メッセージアクションのライフサイクル
- cronコールバック
- メモリの想起
- モデルの切り替え
- サブエージェントの引き継ぎ
- リポジトリの読み取りとドキュメントの読み取り
- Lobster Invadersのような小さなビルドタスク
Transport adapters
Section titled “Transport adapters”qa-labはMarkdown QAシナリオのための汎用的なトランスポートシームを所有しています。
qa-channelはそのシームにおける最初のアダプターですが、設計ターゲットはより広範です。将来の実際のチャンネルや合成チャンネルは、トランスポート固有のQAランナーを追加するのではなく、同じスイートランナーにプラグインされるべきです。
アーキテクチャレベルでは、以下のように分割されています。
qa-labは、汎用的なシナリオ実行、ワーカーの並行性、アーティファクトの書き込み、レポート作成を所有します。- トランスポートアダプターは、Gateway設定、準備状況、インバウンドおよびアウトバウンドの観測、トランスポートアクション、正規化されたトランスポート状態を所有します。
qa/scenarios/配下のMarkdownシナリオファイルがテスト実行を定義し、qa-labがそれらを実行する再利用可能なランタイムサーフェスを提供します。
新しいチャンネルアダプターの採用に関するメンテナー向けガイダンスは、Testingに記載されています。
Reporting
Section titled “Reporting”qa-labは、観測されたバスのタイムラインからMarkdownプロトコルレポートをエクスポートします。
レポートは以下に答える必要があります。
- 何が機能したか
- 何が失敗したか
- 何がブロックされたままか
- どのようなフォローアップシナリオを追加する価値があるか
キャラクターやスタイルのチェックを行うには、複数のライブモデル参照で同じシナリオを実行し、評価済みのMarkdownレポートを作成します。
pnpm openclaw qa character-eval \ --model openai/gpt-5.4,thinking=xhigh \ --model openai/gpt-5.2,thinking=xhigh \ --model openai/gpt-5,thinking=xhigh \ --model anthropic/claude-opus-4-6,thinking=high \ --model anthropic/claude-sonnet-4-6,thinking=high \ --model zai/glm-5.1,thinking=high \ --model moonshot/kimi-k2.5,thinking=high \ --model google/gemini-3.1-pro-preview,thinking=high \ --judge-model openai/gpt-5.4,thinking=xhigh,fast \ --judge-model anthropic/claude-opus-4-6,thinking=high \ --blind-judge-models \ --concurrency 16 \ --judge-concurrency 16このコマンドはDockerではなく、ローカルのQA Gateway子プロセスを実行します。キャラクター評価シナリオはSOUL.mdを通じてペルソナを設定し、チャット、ワークスペースヘルプ、小さなファイルタスクなどの通常のユーザーターンを実行する必要があります。候補モデルには、評価されていることは伝えられません。このコマンドは各トランスクリプト全体を保持し、基本的な実行統計を記録した後、xhighの推論を備えたファストモードのジャッジモデルに、自然さ、雰囲気、ユーモアに基づいて実行結果をランク付けするよう依頼します。
プロバイダーを比較する場合は--blind-judge-modelsを使用してください。ジャッジプロンプトにはすべてのトランスクリプトと実行ステータスが渡されますが、候補参照はcandidate-01のような中立的なラベルに置き換えられます。レポートは解析後にランキングを実際の参照にマッピングします。
候補の実行はデフォルトでhighの推論を使用し、それをサポートするOpenAIモデルにはxhighが使用されます。特定の候補をインラインでオーバーライドするには--model provider/model,thinking=<level>を使用してください。--thinking <level>は依然としてグローバルなフォールバックを設定し、古い--model-thinking <provider/model=level>形式は互換性のために保持されています。
OpenAIの候補参照はデフォルトでファストモードになり、プロバイダーがサポートしている場合は優先処理が使用されます。単一の候補またはジャッジでオーバーライドが必要な場合は、インラインで,fast、,no-fast、または,fast=falseを追加してください。すべての候補モデルでファストモードを強制したい場合にのみ--fastを渡します。候補とジャッジの実行時間はベンチマーク分析のためにレポートに記録されますが、ジャッジプロンプトでは速度に基づいてランク付けしないよう明示的に指示されています。
候補とジャッジモデルの実行は、どちらもデフォルトで並行性16です。プロバイダーの制限やローカルのGatewayへの負荷によって実行が不安定になる場合は、--concurrencyまたは--judge-concurrencyを下げてください。
候補の--modelが渡されない場合、キャラクター評価はデフォルトでopenai/gpt-5.4、openai/gpt-5.2、openai/gpt-5、anthropic/claude-opus-4-6、anthropic/claude-sonnet-4-6、zai/glm-5.1、moonshot/kimi-k2.5、およびgoogle/gemini-3.1-pro-previewを使用します。
ジャッジの--judge-modelが渡されない場合、ジャッジはデフォルトでopenai/gpt-5.4,thinking=xhigh,fastおよびanthropic/claude-opus-4-6,thinking=highを使用します。
Related docs
Section titled “Related docs”セットアップやテストの自動化についてさらに詳しく知りたい場合は、AI Setup Assistantをご活用ください。
OpenClaw Expert
まだ解決しませんか?
このページで解決しない場合は、OpenClaw Expertに直接質問してください。