TT Lab
はじめる
学ぶ 学習パス コース

本番バックエンドAPIキャップストーン

関数ではなく稼働中のHTTP境界を試せ

TT Labで続きを見る

一言でいうと

APIは、呼び出せるPythonの関数ではなく、ネットワーク上でメソッド、パス、ヘッダー、JSON、ステータスコード、レスポンス本文で約束するプロトコルです。テストは、サーバーを実際のポートで起動して、この境界を通過する必要があります。

なぜ純粋な関数のテストだけでは足りないのか

create_order()が正しい辞書を返しても、ルーターがPOSTのパスに接続されていなかったり、認証ヘッダーを読まなかったり、例外がすべて500に変換されたりすることがあります。本文の長さとJSONのデコード、コンテンツタイプ、大文字と小文字を区別しないヘッダーの処理も、関数呼び出しでは見えません。そのため、独立した採点ツールは、任意のループバックポートを確保してapp.py --host 127.0.0.1 --port ...を起動し、実際のHTTPリクエストを送ります。

作成の成功は201、同じコマンドの再生は200、認証なしは401、身元はあるが権限がなければ403、不正な金額は400と区別します。レスポンスには、作成された整数のIDと、所有者・組織・金額・状態が含まれていなければなりません。すべてのレスポンスのX-Trace-Idは、リクエストをログと結びつける取っ手です。ステータスコードだけを合わせて空の本文を返す実装も、常に同じ静的なJSONを返す偽のサーバーも、後続のリクエストで露呈します。

現場で作るリグレッションの証拠

テストは、サーバーの準備を/healthzで待ち、制限時間内に準備ができなければ失敗します。作成した後、同じキーと異なる金額でリトライして、元のIDと金額が維持されるかを確認します。作成したリソースを所有者が読んでキャンセルできるか、同じ組織の別のユーザーや、別の組織の管理者が拒否されるかも、実際のパスで呼び出します。プロセスの終了後、stdoutとstderrから、認証の値が漏れていないかを検査します。

実務での判断基準

モックは、外部の欠陥を分離するときには有用ですが、プロトコルの契約の唯一の証拠にはなれません。高速なポリシーの単体テストと、実際のHTTPの動作テストを一緒に置きます。次のレッスンでは、この境界が、誰がどのリソースに対して何ができるかを判断できるように、認証と認可を分離します。