API はソフトウェア開発において重要な役割を担っており、システムやアプリケーション間のデータの接続と転送を仲介します。API をテストすることでテスト戦略全体の効率が大幅に向上し、これまでよりも迅速にソフトウェアを提供できるようになります。
API (アプリケーション プログラミング インターフェイス) は、異なるシステムやアプリケーション レイヤーを接続します。アプリケーションには多くの場合、データ、サービス (API)、プレゼンテーション (UI) の 3 つのレイヤーがあります。API レイヤーには、アプリケーションのビジネス ロジック、つまりユーザーがどのようにアプリケーションのサービス、データ、または機能と対話するかについてのルールが含まれています。API (サービス レイヤー) は、データ レイヤーとプレゼンテーション レイヤーの両方と直接やり取りするため、QA チームと開発チームにとって継続的テストが必要な部分となります。従来のテストは UI に焦点を当てていましたが、最近は API テストの利点が評価されています。
さまざまな API テストがありますが、一般的には単一の、場合によっては複数の API エンドポイントにリクエストを送り、通信、パフォーマンス、セキュリティ、機能の正当性、あるいは単なるステータス チェックなど、レスポンスを検証します。UI テストは、Web インターフェイスのルック & フィールの検証や、特定の支払いボタンが機能することに重点を置いているのに対し、API テストはビジネス ロジック、データ レスポンス、セキュリティ、パフォーマンス ボトルネックのテストに重点を置いています。
API テストの利点
開発プロセスの早期に検証可能
API テストでは、ロジックを設計したら、レスポンスとデータの正当性を検証するテストを構築できます。テスト ケースは分離されているので、さまざまなチームの作業やアプリケーションの開発が完了するのを待たずに、すぐに構築可能です。
テストの保守が容易
UI は、ブラウザー、デバイス、画面の向きなど、アクセス方法に応じて常に変化し、動くため、本番環境の実際のコードに対応するように絶えずテストを書き直さなければなりません。API の変更はより制御されており、頻繁に行われるものではありません。多くの場合、OpenAPI 仕様などの API 定義ファイルを使用することで、テストのリファクタリングの労力を最小限に抑えることができます。
解決までの時間を短縮
API テストが失敗した場合、問題が発生した正確な場所を知ることができます。これは、ビルド、統合、さらには異なるチームメンバー間でバグを分類する時間を短縮するのに役立ちます。小さく、分離された API テストは、DevOps チームにとって重要な KPI である MTTR を短縮するのに役立ちます。
スピードとカバレッジ
300 の UI テストの実行には 30 時間かかるかもしれませんが、300 の API テストは 3 分で実行できるかもしれません。つまり、より短時間でより多くのバグを見つけ、しかもすぐに修正できます。
例:
以下は、UI レベルで実行される単純で一般的な機能テストの例です。Web サイトにアクセスし、フォームに入力して送信し、次の画面に進むことを確認します。
UI レベルでは、この単純なテストはいくつかの課題が生じる可能性があります。まず、ブラウザーとネットワーク接続の物理的な制限により、このテストを実行するたびにブラウザーをロードする必要があります。次に、これらの要素は画面上で変更される可能性があり、その場合テストは失敗します。「猫」エントリが「犬」エントリの下に隠れている場合、クリックすることができず、テストは失敗します。
これらの課題は面倒です。このフォームを使用して 10,000 の異なる名前と組み合わせを実行し、ビルド時間が短縮されることを確認してみてください。
API テストは、このテスト シナリオ全体を 1 つのステップに要約できるので、そうすべきです。
API テストの種類
単体テスト
API の「単体テスト」とは、簡単に言うと、単一または一連のレスポンスを得るため、単一のリクエストで単一のエンドポイントをテストすることです。多くの場合、このテストは、コマンドラインや URL コマンドなどを使用して手動で行うことも、SoapUI などのツールを使用して行うこともできます。
コントラクト テスト
コントラクト テストは、2 つの個別のシステム (2 つのマイクロサービスなど) が通信できることを検証する手法です。各サービス間のインタラクションはキャプチャされ、コントラクトに保存され、両方のシステムが共通の合意に準拠していることを検証するために使用されます。コントラクト テストは、Pactflow を使用することで簡単に実行できます。
統合テスト
API は内部サービスまたはサードパーティ サービス間のほとんどの統合の中心にあるため、統合テストは最もよく使用される API テストです。
エンドツーエンド (E2E) テスト
エンドツーエンド (E2E) テストは、いくつかの異なる API 接続間のデータと情報の流れを検証するのに役立ちます。
パフォーマンス (負荷) テスト
SmartBear は、パフォーマンス (負荷) テストがすべてのコミットで実施されるようパラダイムを変更しようとしています。以前は、パフォーマンス テストは少数の担当者の手に委ねられていて、CI/CD 環境で実行するのは困難でした。ReadyAPI は、RESTful、SOAP、およびその他の Web サービスに対応したパフォーマンス テスト ツールで、ほぼすべてのチーム メンバーがパフォーマンス テストを CI/CD パイプラインに組み込めるようにします。
API テストに SmartBear を使用する理由
テストの作成が容易
SmartBear には、テスト プロセス全体をカバーする Pactflow と ReadyAPI の 2 つの API テスト ツールがあり、開発者とテスターに自動化ツールとフレームワークを提供することで、UI、API、データベース間の通信と結果の検証を支援しています。
CI/CD での自動化
各テスト自動化ツールには、Jenkins などの一般的な CI サーバー用のプラグインと、CLI が用意されています。
コスト削減
購入前に評価して実装できる使いやすいツールで、すぐに費用対効果とコスト削減を実感できます。
優れたテスト カバレッジ
コードをコミットする前にコントラクト テストを実施することで、統合エラーを早期に発見できます。また、仮想インフラストラクチャ、実際のブラウザー、または生成された負荷で、実際のデータを使用して大規模なテストの実行が可能です。
幅広い言語のサポート
独自の言語の学習に時間を費やす必要はありません。SmartBear のツールは、Python、JavaScript などのお気に入りの言語ですぐに使用できます。
迅速なデバッグ
継続的なパイプラインで自動テストを実行し、チームに迅速にフィードバックを提供し、デバッグ時間と解決までの時間を短縮できます。
ReadyAPI は、エンドツーエンドのテスト ワークフローを自動化するために設計された、機能、セキュリティ、パフォーマンス、および仮想化ツールのフルスタックを提供します。
ReadyAPI 製品に関する詳細、無料評価版は、こちら。
Pactflow は、ソフトウェア開発ライフサイクルの早期の段階で、開発者とテスターに API 統合に関する即時フィードバックを提供する完全なコントラクト テスト ソリューションです。
Pactflow 製品に関するお問い合わせは、こちら。
この資料は、SmartBear の Web サイトで公開されている「What is API Testing?」の日本語参考訳です。