PR

AIが作ったローカルAIアプリをAIにテストさせた結果|Playwright E2Eテスト 7シナリオ・79チェックの中身

(研究者向け)ローカルAI構築キット
記事内に広告が含まれています。

AIに作らせたツールを社内に配るとき、いちばん怖いのは「動いているように見えるだけ」の状態です。

この記事では、ローカルAI構築キットに同梱したE2Eテスト自動化プロンプトが実際に出力したレポートをもとに、7シナリオ・79件の検証チェックが何を確かめ、どんな証跡(フルHD動画・赤枠スクリーンショット・SQLite直接照合)を残すのかを解説します。

1. 「動いているように見える」を終わらせたい

Claude Codeのようなコーディングエージェントにアプリを作らせると、驚くほど短時間で「それらしいもの」が出てきます。問題はその後です。社内や研究室に配るなら、誰かが全機能を触って確認しなければなりません。人がやると抜けるし、UIを直すたびにやり直しです。

そこでキットでは、テストもAIに書かせ、失敗したらAIに直させ、証跡付きのレポートまで出させるプロンプトを同梱しました。この記事は、そのプロンプトが実際に出力したテストレポートの中身を紹介するものです。

2. テスト対象:ローカルAIワークステーションの7つの機能

テスト対象は、キットのプロンプト1本目で構築されるStreamlit製アプリです。Ollama、ChromaDB、faster-whisperを使い、資料検索(RAG)、Word/Excel/PowerPoint/BibTeX出力、音声議事録をすべてPC内で処理します。

テストシナリオはプロンプト側で7つ指定しています。

Noテストチェック数
1アプリ起動とセキュリティ確認10
2プロジェクト作成・管理14
3多形式資料のアップロードとRAG絞り込み14
4プロンプト管理(CRUD)12
5チャット対話と出典表示11
6高付加価値エクスポート8
7音声議事録タブ10

合計79件。すべてPASSでした。使用モデルは gemma3:4b、画面解像度は1920×1080、対象はサンドボックスDBで起動した localhost:8501 です。

3. レポートの冒頭だけで分かる全体像

生成されたレポートは、冒頭に総合評価(PASS / FAIL)、総テスト数、成功数、自動修正されたバグ数を置き、その直下に7行のサマリー表が来る構成です。管理職や発注側がレポートの1画面目だけ見て判断できるように、プロンプトでこの構成を指定しています。

今回の結果は「総合評価 PASS、7 / 7 シナリオ成功、検証チェック 79 / 79、自動修正されたバグ 6件」でした。6件のバグの中身は次の記事で扱います。

4. 証跡の設計:動画・赤枠スクショ・DB直接照合

主張ではなく証跡を出す、がこのプロンプトの方針です。レポートには3種類の証跡が付きます。

操作動画(.webm、1920×1080) テスト全体を1本の動画として録画します。人が目で追える速さになるよう、各入力・クリックの間に1〜1.8秒の待機を入れ、テキストは1文字ずつ打つ演出にしています。

赤枠付きスクリーンショット(PNG / JPG 両形式) 操作対象の要素に outline: 3px solid #FF0000 を一時的に付けてから撮影し、撮影後に外します。今回のレポートでは37枚、起動確認からチャットタブへの復帰まで連番で並びます。

SQLiteへの直接照合 画面の見た目だけでなく、プロジェクト作成・プロンプト追加・削除のたびに app_data.db を直接SELECTして「DBに本当に入ったか・消えたか」を確認しています。見た目は更新されているのにDBは古いまま、という典型的なバグをこれで捕まえます。

5. 本番データを汚さないサンドボックス実行

テストランナーは、アプリ一式を一時フォルダへコピーし、空のDBで別ポートに起動してから操作します。普段使っている app_data.db と chroma_db/ には触れません。

テストで読み込ませる資料も、ランナー自身が生成する架空データです。今回は「架空_都市交通シミュレーション論文.pdf」「架空_量子センサー実験レポート.txt」「架空_海洋微生物サンプル一覧.csv」「架空_研究室ミーティングノート.md」の4形式と、架空のゼミ録音(wav)でした。

実在の論文や人物は一切使っていないので、スクリーンショットをそのまま社内資料やブログに載せられます。

6. 特に重要なテスト1:セキュリティ確認の10項目

ローカルAIを名乗る以上、ここが一番大事です。テスト1は次の10項目を確認しています。

  • localhost:8501 で正常に表示される
  • ヘルスチェック /_stcore/health が200を返す
  • Deployボタンが非表示(DOM上0件)
  • 標準メニューが非表示(DOM上0件)
  • ツールバーが非表示(DOM上0件)
  • ヘッダーが非表示(表示0件)
  • 「Deploy」の文字が画面に出ない
  • ダークモード背景色 #0E1117 が適用されている
  • LAN側IPからは接続できない(127.0.0.1限定バインド)
  • 画面に例外・エラー表示がない

LAN側IPの項目は、テストランナーが自分のLANアドレスを調べ、そのIPの8501番へ実際に接続を試みて「失敗すること」を確認しています。設定ファイルを読んで安心するのではなく、外から叩いて閉まっていることを確かめる、という考え方です。

7. プロンプトはどこまで指定しているか

テスト自動化プロンプトは、ざっくり次のことを指示しています。

  • 既存の製品コードとテスト専用コードを分離し、テストランナーは別ファイルで作ること
  • 例外、UI要素の未検出、StreamlitのTraceback表示を検知したら、該当コードを修正して全テストが通るまで再実行すること(自動バグ修正ループ)
  • 出力フォルダ構成(screenshots / video / test_data / レポート.md)と、レポートの見出し構成
  • 動画の解像度、待機時間、タイピング演出、赤枠の付け方といった証跡の品質要件
  • 7つのテストシナリオと、そこで必ず確認する項目(全選択・全解除でチェックボックスが実際に切り替わるか、など)

逆に、どのセレクタを使うか、どう待機するかといった実装は指定していません。そこはClaude Codeに任せ、人は「何を確かめるか」だけを書く分担です。

8. 自分の環境で同じレポートを出すには

キットには、このプロンプトで生成されたテストランナー本体も参照用コードとして入っています。参照用コードの環境にPlaywrightとPillowを追加してOllamaを起動し、次を実行するだけです。

.venv\Scripts\python.exe test_automation_runner.py
.venv\Scripts\python.exe test_automation_runner.py --headed --model gemma3:4b

テスト結果_日時/ フォルダに、レポート・動画・スクリーンショット・テストデータが揃います。自分で作り変えたアプリに対しては、プロンプトの「検証すべきテストシナリオ」を書き換えてClaude Codeに再生成させてください。

9. まとめと次の記事

  • 7シナリオ・79チェックを全自動で実行し、動画・赤枠スクショ・DB照合の証跡が残る
  • セキュリティ確認は設定の確認ではなく、LANから実際に接続を試みて閉まっていることを検証している
  • 本番データは触らない。読み込む資料は架空データ

次の記事では、このテストが自動修正した6件のバグを1つずつ見ていきます。Streamlitでツールを作る人なら、同じ罠を踏んでいる可能性が高い内容です。

コメント

タイトルとURLをコピーしました