APIのテスト設計。どんなAPIテストをするべきか?

テスト技法

APIテストとは何か?

APIとはApplication Programming Interfaceの頭文字の略、

一般的に開発者は開発中のAPIの基本機能のみぐらいはテストしますが、

QA専門のテスターはAPIテストをする場合、APIの機能、信頼性、パフォーマンス、セキュリティなどもふまえてテストし、

すべてのコンポーネントがエンドツーエンドでどのように連携するかをテストする必要があります。

APIテストは主にビジネスロジック層に重点を置いており、UIレベルで行われる機能テストでは見逃されがちな

ビジネスロジックの欠陥や、未処理の例外処理などのような脆弱性を見つめるのを手助けしてくれます。

APIテストのテスト設計、テスト観点

ざっくりAPIテストではどのようなテスト観点でテストするのかをまとめると、以下のようなものです。

  • HTTPステータスコードが正しいか?
  • リクエストとレスポンスのペイロードが正しいか?
  • コンテンツタイプとペイロードの容量制限が正しいか?
  • 基本的なパフォーマンスを出しているか?
  • セキュリティチェック (インジェクション、データ改ざん、セッション管理)
  • リクエスト/レスポンス ペイロード必須パラメーターが正しいか確認をUI確認も含めておこなう
  • さまざまなメソッド、クエリ/パスパラメータ値を変更して、APIのエンドポイントを検証

もう少し具体的にどのようにテストするか?

  • 機能テスト:
    • ビジネスロジックに従ってAPIの機能を検証
    • APIエンドポイントの検証とコンテンツタイプの検証
    • ヘッダーの検証
      • ヘッダーの有無にかかわらず、ヘッダーの値を操作することによってどのように動作するかを確認する必要があります。APIへリクエストを送り、レスポンスのヘッダーが正しいヘッダーで返ってきているかアサーションします。
    • CRUDによるエンドポイントの検証
    • 様々なネットワーク速度でAPIの機能を検証
  • 様々な入力を仕様したリクエスト / レスポンスの検証
    • 各パラメータの検証—データ型の改ざん、無効なデータ型の受け渡し、文字長、null値の受け渡しなど
    • 例外処理の検証
    • リクエスト/レスポンスの必須パラメータとUIを比較し検証
  • ユーザービリティテスティング
    • APIが別のプラットフォームとうまく結合されているか確認
  • セキュリティテスティング
    • 必要な認証が求められるか
    • 機密データがHTTP(s)で暗号化されているか
    • ペネトレーションテスト
      • ブラックリストに登録されたネットワークからAPIにアクセスして確認
    • ファズテスト
      • レート制限とリクエストペイロードサイズ制限を超えたデータで確認
  • パフォーマンステスティング
    • さまざまな状況下でAPIの平均応答時間が制限内にあることを確認
    • ページがデータとともに読み込まれる速度をUIレベルから検証する
  • API設計テスト
    • APIがRESTの原則に則って設計されているか確認
    • ステートレス
      • アプリケーションサーバーをステートフリーに保ち、簡単かつ簡単にスケーリングできるようにしているか
    • バージョニング
      • 古いエンドポイントは削除しているか

以上、APIテストをする際の参考にしていただけると幸いです。

参考文献