HTTP中心のテスト体制

NaifyはユニットテストやPHPUnitを否定しません。
そのうえでNaify自体の品質運用では、Webアプリの確認にHTTP経由のテストも組み合わせています。

原則:テストはHTTP経由で実行する

Webアプリケーションの確認は、まずWebサーバー上でHTTPを通して行います。ブラウザからアクセスできるテストは、人間にも機械にも扱いやすいです。

CLIテストだけでは確認しにくい挙動があるため、HTTP経由の確認も基準にしています。

PHPUnitとHTTPテストの位置づけ

PHPUnitやPestなどのCLIテストは有用であり、採用するかどうかはアプリ側で決められます。Naify自体の運用では、それに加えてHTTP経由の確認も行っています。

CLIのテストが通っていても、Webサーバーやネットワーク機器を通したときの挙動は、HTTP経由で別に確かめる必要があります。

CLIテストでは再現しにくく、HTTP経由で確認しやすいもの:

  • WAF(Web Application Firewall)がリクエストをブロック
  • mod_securityがPOSTボディを検閲
  • リバースプロキシがヘッダーを書き換え
  • セッション / Cookieの挙動がCLIと異なる
  • CORS / CSP /認証ミドルウェア
  • php.iniがCLIとFPMで別設定

CLIテストとHTTPテストの役割比較

観点CLIテストHTTPテスト
実行環境CLI(php vendor/bin/phpunit)Webサーバー(HTTP経由)
確認方法CLI出力やCIのレポートブラウザやcurlで確認
WAF /ミドルウェア通常は対象に含まれない経路上にあれば対象に含まれる
セッション / Cookieモックなどで再現する実際の往復を確認できる
自動化CIに組み込みやすいcurl + JSONで自動判定できる(CI連携にはサーバー起動などの準備が必要)
実行コスト軽いサーバー起動が必要
追加ツールComposer +テストフレームワークサーバー + HTTPクライアント
ブラウザでの確認対象外(自動化にはSelenium等が別途必要)テストURLをブラウザで開いて手動確認できる(JavaScriptの自動テストには別途ツールが必要)
CLIテストが得意なもの
純粋なロジック
型や戻り値の整合
失敗箇所の切り分け
実行の速さ
HTTPテストで確認しやすいもの
Cookieの往復
セッション維持
Header / Redirect / Content-Type
Webサーバー越しの挙動
GitHub ActionsなどのCIでも、構成によってはHTTPの往復まで確認していない場合があります。

HTTPテストのメリットとトレードオフ

HTTPテストは、アプリ全体をHTTP経由で確認する統合テストに近いです。

項目メリットデメリット /注意点
実動作本番に近い条件で確認できるサーバー起動が前提になる
セッション / Cookieログイン状態やCookie往復まで確認できる単体テストよりセットアップが重い
CI連携JSONエンドポイントを使えば自動判定できるCLIだけで閉じる方式ではない
障害調査ブラウザでそのまま再現確認できる失敗時の原因切り分けはCLIテストより粗くなりやすい

Naifyが重視しているのはCLIを捨てることではありません。Webアプリの確認に、HTTP経由の動作も含めることを重視しています。PHPUnitを含む単体テストやCLIテストは、必要に応じてアプリ側で併用できます。

テストで確認する内容

実際のHTTPリクエストを使い、応答内容とステータスコード、Cookie、セッション、リダイレクトを確認します。DB操作では、読み書きの結果やエラー時の動作も検証します。

確認結果は自動集計し、変更前後の差分や失敗した項目をレビューに利用します。

継続的な検証

変更時のテストと定期的な確認を組み合わせ、既存機能への影響を確認します。未検証の条件や不具合が見つかった場合は、再発を確認できるテストを追加します。

AIは調査やレビューを補助し、変更内容とテスト結果の最終確認は人間が行います。

テスト結果の信頼性を保つ

仕様変更がある場合は、その理由とテストへの影響を確認します。失敗を解消するためだけに期待値を変更せず、不具合と仕様変更を区別して扱います。