San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
閉じる
プライバシー設定
ウェブサイト運営に必要なCookieや類似技術を使用しています。追加のCookieは貴社の同意がある場合のみ利用されます。同意は「Agree」をクリックすることでいただけます。どのデータが収集され、どのようにパートナーと共有されているかの詳細は、Cookieポリシープライバシーポリシーをご確認ください。
Cookieは、貴社デバイスの特性や、IPアドレス、閲覧履歴、位置情報、固有識別子などの特定の個人情報を取得、解析、保存するために使用されます。これらのデータは様々な目的で利用されます。分析Cookieによりパフォーマンスを評価し、オンライン体験やキャンペーンの効果向上に役立てます。パーソナライズCookieは、利用状況に応じた情報やサポートを通じ、貴社専用の体験を提供します。広告Cookieは、第三者が貴社のデータをもとにオーディエンスリストを作成し、ソーシャルメディアやネット上でのターゲット広告に使用します。貴社は各ページ下部のリンクから、いつでも同意の許可、拒否、または撤回が可能です。
ご送信ありがとうございます。内容を受け付けました。
申し訳ありません。フォーム送信時にエラーが発生しました。
API Security

API Testing

Introduction

APIは現代の技術社会において非常に重要な役割を担っています。インターネット上のあらゆる通信は、API (Application Programming Interface)を介して行われており、技術の進歩とともにその依存度は増しています。したがって、APIテストも適切に実施し、機能要件だけでなく非機能要件にも十分な注意を払う必要があります。

API Testing

APIテスト 定義

APIテストは、単にいくつかのテストケースを実行するだけでなく、多様な側面を含みます。テストはできるだけ早い段階から開始し、製品リリースまで継続する必要があります。この記事では、架空の機能を例に、そのソフトウェア開発ライフサイクルを追って説明します。

APIテストは要求仕様という出発点から始める必要があります。要求仕様はテスターの視点で十分に確認し、境界条件やシステムを壊す可能性を探ることが求められます。要求仕様の見直しの際は、その点を考慮してください。

use api

要求仕様がすべての関係者に承認された後、テストケースの作成が始まります。この段階では、テスターがテストケースを設計し、テストスイートにまとめます。また、新たな機能のリスクや優先度に応じ、正常動作確認のチェックリストに追加する必要がある場合もあります。

features api

次に、テスト仕様書を作成します。テスト仕様書は、各テストケースの期待される結果や、テスト開始・終了の条件、すなわちエントリーおよびイグジット基準を記述する文書です。

開始・終了基準

開始基準終了基準
ドキュメントが完備している単体テストが実施された
テスト環境が利用可能新たなドキュメントが作成された
重大な不具合がなくなった
95%のテストケースが合格している

すべての文書が提供され、ソフトウェアがテスト可能な状態になると、テスト実行と報告のフェーズが始まります。テスト管理ツールを用いてレポートが作成され、各機能に対して実施されたテスト結果や、テストを中断した可能性のある問題点がまとめられます。

これらのテストに加え、十分なテスト自動化戦略を導入することも有効です。正しく実施できれば、コストを大幅に削減でき、SoapUI、JMeter、Selenium、Postmanなどのオープンソースツールで実現可能です。

api testing 2

なぜAPIテストが重要か?

APIがなぜ重要なのか疑問に思うかもしれません。開発費用が高額で直接的な投資効果がすぐに現れるわけではありませんが、適切にテストを実施しないと、テスト費用以上に欠陥対応のコストが膨らむ恐れがあります。

APIはシステムの中心に位置しており、大量のトラフィックを処理します。不具合が予期せぬ形で発生すると、サービスの停止やプロセスの不具合、さらにはアクセスしてはならないデータへのアクセスを許すことにもなりかねません。

また、APIはユーザー向け機能だけでなく、他のサービスやサードパーティとの連携も行っているため、すべてがAPIの正しいデータ連携に依存します。

例えば:

input=ReadFromQuotesApi();
ProcessData(input);

このコードは一見安全に見えますが、入力の検証が行われていないため、Quotes Apiから予期しないデータが渡されると、システムがエラーを起こすか、最悪の場合クラッシュする可能性があります。

APIテストの利点

APIテストの大きな利点の一つは、早期にテストを実施できる点です。APIはUIよりも先に開発されることが多いため、迅速なフィードバックが得やすく、API連携部分やAPI自体の改善にも役立ちます。

また、APIテストはエンドツーエンドの手動テストやUI自動テストに比べ、より詳細なコンポーネントテストを実施できるため、コストを大幅に削減できます。

これらの利点により、効果の高いAPIレベルでセキュリティテストに十分なリソースを割くことが可能となります。全レベルでのセキュリティテストは有用ですが、予算に限りがあるため、優先順位を適切に設定する必要があります。

APIを十分にテストし、文書化しておくことで、統合もスムーズになり、APIを利用する側に対して検証済みであることをしっかりと伝えることができます。

Benefits of API

APIテストの種類

APIテストの種類

テストの種類ソフトウェア開発段階
単体テストと統合テスト開発段階
パフォーマンステストと負荷テストできるだけ早く(テストに時間がかかるため)
実行時エラー検出とセキュリティテスト継続的プロセス
相互運用性テストとファズテストテスト段階
検証テストユーザー受入テスト

単体テスト

単体テストは、アプリのビルドごとに自動実行されるテストとして作成され、コードに近い位置で記述されます。必要なコードカバレッジはAPIのリスクや機能に依存し、良い単体テストは堅固な土台として後続のテストを支えるため、十分に検討する必要があります。

統合テスト

APIはシステムの独立した部品ではなく、各要素を統合する役割を担っています。そのため、正しいパラメータや制約条件でデータを受け渡すこと、さらに受信トラフィックの適切な検証も必要です。

Benefits of API testing

パフォーマンステスト

パフォーマンステストは、非機能要件の中で見落とされがちで、問題を引き起こす可能性があります。テスト環境は本番環境のデータ量の一部しか保持しないため、実際の処理には時間がかかる場合があります。トラフィックの急増や複数の重いプロセスの同時動作も考慮し、テスト環境は本番に近い状態で実施する必要があります。

負荷テスト

負荷テストはパフォーマンステストに類似しており、急激なトラフィックではなく通常の一定の流れを模倣します。これにより、長時間動作時のメモリリークなどの欠陥を防止できます。

Load testing api

実行時エラー検出

これらのテスト全体を通じて、実行時エラー検出機能を有効にしておく必要があります。この機能により、APIは稼働中に発生した欠陥を報告できます。

セキュリティテスト

セキュリティテストは非常に重要ですが、十分な予算が割かれないことも多いです。リスク分析に基づいた適切なセキュリティテストを、専門知識を持つプロにより実施する必要があります。また、各開発者もAPIに関しては一定のセキュリティ意識を持つべきです。

セキュリティテストは、ペンテスト、PENテスト、侵入テストなどとも呼ばれ、APIテストにおいてはエントリーポイント、データの流れ、そして稼働中の不要なシャドウAPIも対象となります。

相互運用性テスト

サードパーティ製のソフトウェアや旧バージョンとの連携は当然ではありません。テスト計画の中で、どのテストを実施するか明記し、過去の経験に基づいて潜在的な欠陥の重大度と優先順位を検討する必要があります。

ファズテスト

アプリの検証前の最終テストとして、APIのすべてのエンドポイントに対してファズテストを実施します。ファズテストではランダムなデータを送信し、結果を入念に確認します。予期しないトラフィックでサーバがクラッシュしたり異常な挙動を示さないか確認してください。リスク分析に応じ、ファズテストの実施方法は構造化された方法となる場合もあり、場合によっては実施しないこともあります。

検証テスト

検証テストでは、ソフトウェアがビジネス要求を満たしているか確認します。テスターは、テスト結果がテスト計画で期待される内容と一致しているかを評価し、その後、ユーザー受入テスト(UAT)で事前に作成されたシナリオを実行し、期待値との差異が報告されるよう案内します。

api testig types

テストの種類については、記事「How to hack API」で詳しく解説しています。

手法:手動テスト vs 自動テスト

自動テストを考える際、テストの作成や保守に費用がかかる点に注意する必要があります。アプリの処理フローが変わると、APIコールの順序やパラメータが適切でなくなる可能性があり、その都度自動化フレームワークの変更が求められます。しかし、毎日または各リリース毎に多数のテストを実行する場合、その投資は十分に見合うものとなります。一般的には、10回以上テストするものは自動化すべきだと考えます。

APIテスト自動化には多くの利点があります。テストシナリオを迅速に作成でき、多くの境界条件をカバーするテストケースを容易に作成できます。さらに、手動でのテスト実行が減り、ビルドパイプラインに組み込むことが可能です。ビルド時に多数のエラーが発生した場合、エラー修正前に通知を受けることができるため、有用です。

Manual Testing vs Automated

WallarmのFASTによるアプリセキュリティテストのフレームワークを試してみてください。

APIテストの始め方

  1. APIの要求仕様を定義する: 良い要求仕様の作成は難しいです。関係者全員から有益な意見を得るため、オープンなコミュニケーションが重要です。開発者、テスター、システムアーキテクト、アナリスト、プロダクトオーナーなど、各専門分野の知識を活かして要求仕様を作成してください。
  • このAPIは何に利用されるのか?
  • アプリはデータをどのように扱うのか?
  • システムは障害時にどう対応するのか?
  • システムは出力をどのように処理するのか?
  • システムは予期せぬ入力にどう対応するのか?
  • APIが送受信するフィールドの要求仕様は?
  • 他のAPIとの連携方法、使用するプロトコルなどは?
  • 開始・終了基準
  • APIや機能の合否基準
  1. 次に、本番環境に近いテスト環境を整備します。
  2. 文書のレビューも実施してください。これは、実行されない文書を確認する静的APIテストとして行います。
  3. APIの詳細なテストやスクリプト設定に入る前に、1つのAPIコールを実行してProof Of Concept(概念実証)を作成します。
  4. この段階で、ファズテストやその他未特定の機能テスト、各レベルで実施するテストの計画を立てます。
  5. 必要に応じてスタブやドライバーを開発し、完全な環境との統合を待たずにテストを開始できるようにします。
  6. APIを完全な環境と統合し、エンドツーエンドのテストシナリオを実行します。
  7. テスト結果が要求仕様に合致しているか確認します。テストケースの失敗が必ずしも機能全体の本番リリースを否とするわけではありません。根本原因分析後に慎重なリスク評価を行ってください。
  8. 必要な修正を実施し、失敗した機能を再テストします。
  9. すべての要求が満たされたら、ユーザー受入テスト(UAT)を開始します。
  10. 必要に応じて修正を実施し、再度失敗した機能をテストします。
  11. すべての文書が提供され、要求が満たされたら、機能を承認して本番リリースを進めます。
  12. 本番リリース前に簡易確認を行い、問題がないかチェックします。
  13. リリース後は、ログやサービスデスクの報告などでフォローアップを実施します。
test automation pyramid

例えば、ユーザーがログインできる機能について、どのようなテストが必要か見てみましょう。

必要なテスト内容

テスト内容テストレベル
パスワードが間違っていればログインできない単体テスト、手動確認
3時間の間に30件のリクエストを送り、すべてが合格するか確認する自動テスト
エンドツーエンドのシナリオでログインできるか確認する手動テスト
APIがログサーバとデータを交換し、ログイン失敗を記録する統合テスト
ログを確認し、ログイン失敗が記録されていることを確認するセキュリティテスト

APIテストのベストプラクティス

  • テストケースを機能ごとに整理することで、保守性が向上し、アプリの状態を把握しやすくなります。
  • APIのワークフロー、アプリ内での位置付け、境界条件を要求仕様に盛り込み、すべての関係者を巻き込んで作成してください。
  • 本番環境に近いテスト環境でAPIリクエストをテストしてください。スタブやドライバーでのテストは初期開発に有用ですが、エンドツーエンドのテストはサンドボックス環境で実施する必要があります。
  • テストトライアングルに従い、単体テストや統合テストでカバーできない部分は自動化してください。自動化はコスト削減に大きく、早期の問題検出にも役立ちます。
Best Practices of API Testing

FAQ

Open
APIのテストとは?
Open
APIテストに使うツールは?
Open
APIテストのベストプラクティスは?
Open
APIテストのメリットは何ですか?
Open
Postmanを使って効果的なAPIテストを書く方法は?

参考資料

Testing APIs - Google

API testing - Github

最新情報を購読

更新日:
February 25, 2025
学習目標
最新情報を購読
購読
関連トピック