api testing tutorial
この詳細なAPIテストチュートリアルでは、APIテスト、Webサービス、および組織にAPIテストを導入する方法について説明します。
この入門チュートリアルから、左シフトテストとWebサービスの概念とともにAPIテストについての深い洞察を得ることができます。
このチュートリアルの例では、Web API、APIのしくみ(実際の例を使用)、Webサービスとの違いなどの概念について詳しく説明しています。
=>下へスクロール初心者向けの5つの詳細なAPIテストチュートリアルの全リストを表示するには
学習内容:
APIテストチュートリアルのリスト
チュートリアル#1: APIテストチュートリアル:初心者向けの完全ガイド
チュートリアル#2: Webサービスチュートリアル:コンポーネント、アーキテクチャ、タイプ、例
チュートリアル#3: 回答付きの上位35のASP.NetおよびWebAPIインタビューの質問
チュートリアル#4: POSTMANチュートリアル:POSTMANを使用したAPIテスト
チュートリアル#5: ApacheHTTPクライアントを使用したWebサービスのテスト
このAPIテストシリーズのチュートリアルの概要
チュートリアル# | あなたが学ぶこと | |
---|---|---|
LoadFocus | ユーザー数とプランタイプに基づく | * API負荷テストに使用できます-APIがサポートできるユーザーの数を見つけるために、いくつかのテストを実行できます。 *使いやすさ-ブラウザ内でテストを実行できます。 |
チュートリアル_#1: | APIテストチュートリアル:初心者向けの完全ガイド この詳細なAPIテストのチュートリアルでは、APIテストとWebサービスについて詳しく説明し、組織にAPIテストを導入する方法についても説明します。 | |
チュートリアル_#2: | Webサービスチュートリアル:コンポーネント、アーキテクチャ、タイプ、例 このWebサービスのチュートリアルでは、Webサービスのアーキテクチャ、タイプ、コンポーネント、重要な用語、SOAPとRESTの違いについて説明します。 | |
チュートリアル_#3: | 回答付きの上位35のASP.NetおよびWebAPIインタビューの質問 このチュートリアルでは、最も人気のあるASP.NetおよびWeb APIインタビューの質問のリストを、初心者および経験豊富な専門家向けの回答と例とともに調べることができます。 | |
チュートリアル_#4: | POSTMANチュートリアル:POSTMANを使用したAPIテスト このステップバイステップのチュートリアルでは、POSTMANを使用したAPIテストについて、POSTMANの基本、そのコンポーネント、およびサンプルの要求と応答を簡単に理解できるように簡単に説明します。 | |
チュートリアル_#5: | ApacheHTTPクライアントを使用したWebサービスのテスト このAPIチュートリアルは、WebサービスでさまざまなCRUD操作を実行し、ApacheHTTPクライアントを使用してWebサービスをテストすることについて説明しています。 |
APIテストチュートリアル
このセクションは、WebサービスとWeb APIの基本を理解するのに役立ちます。これは、このAPIテストシリーズの今後のチュートリアルの主要な概念を理解するのに役立ちます。
API(Application Programming Interface)は、オペレーティングシステムまたはプラットフォームのデータまたは機能にアクセスしてアプリケーションを作成できるようにするすべてのプロシージャと関数のセットです。このような手順のテストは、APIテストとして知られています。
左シフトテスト
APIテストインタビューで最近求められている重要なタイプのテストの1つは、左シフトテストです。このタイプのテストは、アジャイル手法に従うほとんどすべてのプロジェクトで実施されます。
Shift Left Testingが導入される前は、コーディングが完了し、コードがテスターに配信されて初めて、ソフトウェアテストが実現しました。この慣行により、締め切りに間に合わせるための土壇場での喧噪が発生し、製品の品質も大幅に低下しました。
それとは別に、開発者は設計段階とコーディング段階の両方をもう一度やり直さなければならなかったため、(生産前の最後の段階で欠陥が報告されたとき)行われた努力は膨大でした。
左シフトテスト前のソフトウェア開発ライフサイクル(SDLC)
従来のSDLCフローは、要件–>設計–>コーディング–>テストでした。
従来のテストのデメリット
- テストは右端にあります。土壇場でバグが特定されると、多くのコストが発生します。
- バグを解決し、本番環境にプロモートする前に再テストするのにかかる時間は膨大です。
したがって、新しいアイデアが浮かび上がり、テストフェーズを左にシフトし、それによって左シフトテストにつながりました。
推奨読書=> 左シフトテスト:ソフトウェア成功の秘訣
左シフトテストのフェーズ
左シフトテストにより、欠陥検出から欠陥防止への移行が成功しました。また、ソフトウェアが迅速に失敗し、すべての失敗を早期に修正するのにも役立ちました。
Web API
一般的に、Web APIは、クライアントシステムからWebサーバーに要求を受け取り、Webサーバーからクライアントマシンに応答を送り返すものとして定義できます。
APIはどのように機能しますか?
複数の航空会社からの情報を集約するオンライン旅行サービスであるwww.makemytrip.comでフライトを予約するという非常に一般的なシナリオを考えてみましょう。フライトの予約に行くときは、旅行日/帰国日、クラスなどの情報を入力し、検索をクリックします。
これにより、複数の航空会社の価格とその空室状況が表示されます。この場合、アプリケーションは複数の航空会社のAPIと相互作用し、それによって航空会社のデータへのアクセスを提供します。
別の例はwww.trivago.comで、特定の都市のさまざまなホテルの価格、空室状況などを比較して一覧表示します。このWebサイトは、複数のホテルのAPIと通信してデータベースにアクセスし、Webサイトから価格と在庫状況を一覧表示します。
したがって、Web APIは、「クライアントマシンとWebサーバー間の通信を容易にするインターフェイス」として定義できます。
ウェブサービス
Webサービスは(Web APIのように)あるマシンから別のマシンにサービスを提供するサービスです。ただし、APIとWebサービスの間に生じる主な違いは、Webサービスがネットワークを使用することです。
すべてのWebサービスはWebAPIであると言っても過言ではありませんが、すべてのWeb APIはWebサービスではありません(記事の後半で説明されています)。したがって、WebサービスはWebAPIのサブセットです。 Web APIとWebサービスの詳細については、下の図を参照してください。
WebAPIとWebサービス
WebサービスとWebAPI
Web APIとWebサービスの両方を使用して、クライアントとサーバー間の通信を容易にします。主な違いは、コミュニケーションの方法だけです。
それぞれに、特定の言語で受け入れられるリクエストボディ、安全な接続を提供する際の違い、サーバーとの通信速度とクライアントへの応答速度などが必要です。
参考までに、WebサービスとWebAPIの違いを以下に示します。
ウェブサービス
- Webサービスは通常XML(Extensible Markup Language)を使用するため、より安全です。
- WebサービスとAPIの両方がデータ転送中にSSL(Secure Socket Layer)を提供するため、Webサービスはより安全ですが、WSS(Webサービスセキュリティ)も提供します。
- WebサービスはWebAPIのサブセットです。 例えば、 Webサービスは、3つの使用スタイルのみに基づいています。 SOAP、REST、およびXML-RPC。
- Webサービスは、動作するために常にネットワークを必要とします。
- Webサービスは、「1つのコードの異なるアプリケーション」をサポートします。これは、より一般的なコードがさまざまなアプリケーション間で記述されていることを意味します。
Web API
ファイアウォールを最初から作成する方法
- Web APIは通常JSON(JavaScript Object Notation)を使用します。これは、WebAPIの方が高速であることを意味します。
- XMLとは異なり、JSONは軽量であるため、WebAPIの方が高速です。
- Web APIは、Webサービスのスーパーセットです。 例えば、 Webサービスの3つのスタイルはすべてWebAPIにも存在しますが、それとは別に、JSON –RPCなどの他のスタイルを使用します。
- Web APIは、動作するために必ずしもネットワークを必要としません。
- Web APIは、システムまたはアプリケーションの性質に応じて、相互運用性をサポートする場合とサポートしない場合があります。
組織でのAPIテストの紹介
私たちの日常生活では、APIを使用してアプリを操作することに慣れていますが、基盤となる機能を駆動するバックエンドプロセスについても考えていません。
例えば、 Amazon.comで商品を閲覧していて、本当に気に入っている商品や取引を見つけて、それをFacebookネットワークと共有したいと考えてみましょう。
ページの共有セクションにあるFacebookアイコンをクリックし、共有するFacebookアカウントの資格情報を入力すると、AmazonWebサイトをFacebookにシームレスに接続するAPIを操作していることになります。
APIテストへのフォーカスシフト
APIテストについて詳しく説明する前に、APIベースのアプリケーションが最近人気を博している理由について説明しましょう。
組織がAPIベースの製品やアプリケーションに移行する理由はいくつかあります。そして、それらのいくつかはあなたの参照のために以下に参加しています。
#1) APIベースのアプリケーションは、従来のアプリケーション/ソフトウェアと比較すると、よりスケーラブルです。コード開発の速度は速く、同じAPIは、主要なコードやインフラストラクチャの変更なしで、より多くのリクエストを処理できます。
#二) 開発チームは、機能やアプリケーションの開発に取り掛かるたびに、最初からコーディングを開始する必要はありません。 APIはほとんどの場合、既存の繰り返し可能な関数、ライブラリ、ストアドプロシージャなどを再利用するため、このプロセスによって全体的な生産性が向上します。
例えば、 eコマースWebサイトで作業している開発者で、Amazonを支払い処理業者として追加したい場合は、コードを最初から作成する必要はありません。
統合キーを使用してウェブサイトとAmazonAPIの統合を設定し、チェックアウト時に支払いを処理するためにAmazonAPIを呼び出すだけです。
#3) APIを使用すると、サポートされているスタンドアロンアプリケーションとAPIベースのソフトウェア製品の両方で他のシステムと簡単に統合できます。
Javaでオブジェクトのリストを作成する方法
例えば 、トロントからニューヨークに貨物を送りたいと考えてみましょう。オンラインに接続し、よく知られている貨物またはロジスティクスのWebサイトに移動して、必要な情報を入力します。
必須情報を提供した後、(料金を取得)ボタンをクリックすると、バックエンドで、このロジスティクスWebサイトが複数のキャリアおよびサービスプロバイダーのAPIおよびアプリケーションに接続して、出発地から目的地までの場所の組み合わせの動的料金を取得する場合があります。
APIテストの全範囲
APIのテストは、APIにリクエストを送信し、応答の正当性のみを分析することに限定されません。 APIは、脆弱性についてさまざまな負荷の下でのパフォーマンスをテストする必要があります。
これについて詳しく説明しましょう。
(i)機能テスト
GUIインターフェースがないため、機能テストは困難な作業になる可能性があります。
どのように 機能テストアプローチ APIの場合はGUIベースのアプリケーションとは異なり、その周りのいくつかの例についても説明します。
に) 最も明らかな違いは、対話するGUIがないことです。通常GUIベースの機能テストを行うテスターは、すでに慣れている人と比較して、非GUIアプリケーションテストに移行するのが少し難しいと感じています。
最初に、APIのテストを開始する前であっても、認証プロセス自体をテストおよび検証する必要があります。認証方法はAPIごとに異なり、認証に何らかのキーまたはトークンが必要になります。
APIに正常に接続できない場合、それ以上のテストを続行することはできません。このプロセスは、ログインしてアプリケーションを使用するために有効な資格情報が必要な標準アプリケーションのユーザー認証に匹敵すると見なすことができます。
b) APIのテストでは、フィールド検証または入力データ検証のテストが非常に重要です。実際のフォームベース(GUI)インターフェイスが利用可能な場合は、フィールド検証をフロントエンドまたはバックエンドに実装して、ユーザーが無効なフィールド値を入力できないようにすることができます。
例えば、 アプリケーションで日付形式をDD / MM / YYYYにする必要がある場合は、情報を収集するフォームにこの検証を適用して、アプリケーションが有効な日付を受信して処理していることを確認できます。
ただし、これはAPIアプリケーションの場合と同じではありません。 APIが適切に記述され、これらすべての検証を実施し、有効なデータと無効なデータを区別し、応答を通じてステータスコードと検証エラーメッセージをエンドユーザーに返すことができることを確認する必要があります。
c) 有効な応答と無効な応答についてAPIからの応答の正確さをテストすることは、確かに重要です。テストAPIからの応答としてステータスコード200(すべてOKを意味する)を受け取ったが、応答テキストにエラーが発生したと記載されている場合、これは欠陥です。
さらに、エラーメッセージ自体が正しくない場合、このAPIと統合しようとしているエンドカスタマーにとって非常に誤解を招く可能性があります。
以下のスクリーンショットでは、ユーザーが無効な重量を入力しました。これは、許容可能な2267Kgsを超えています。 APIは、エラーステータスコードとエラーメッセージで応答します。ただし、エラーメッセージには、重量単位がKGではなくlbsと誤って記載されています。これは、エンドカスタマーを混乱させる可能性のある欠陥です。
(ii)負荷およびパフォーマンステスト
APIは、設計上スケーラブルであることを目的としています。
これにより、Loadと 性能試験 特に、要件に応じて、設計中のシステムが1分または1時間あたり数千の要求を処理することが予想される場合は不可欠です。 APIで負荷テストとパフォーマンステストを定期的に実行すると、パフォーマンス、ピーク負荷、およびブレークポイントのベンチマークに役立ちます。
このデータは、アプリケーションのスケールアップを計画する際に役立ちます。この情報を利用できるようにすることは、特に組織がより多くの顧客を追加することを計画している場合、つまりより多くの受信要求を意味する場合に、意思決定と計画をサポートするのに役立ちます。
例えば 、提供された要件に基づいて、設計されたAPIは1時間あたり少なくとも500のリクエストを処理し、0.01秒未満の平均応答時間を維持する必要があることがわかっているとします。
負荷テストとパフォーマンステストに基づいて、APIが1時間あたり500未満のリクエストを受信する限り、平均応答時間の間SLAを維持できることがわかりました。ただし、さらに200のリクエストを受信すると、平均応答時間が長くなり、着信リクエストが1時間あたり1200を超えるとブレークポイントに到達します。
通常、初期の設計段階では、APIの機能面に重点が置かれることがよくあります。時間が経つにつれて、製品は複数のライブクライアントのサポートを開始します。つまり、APIパフォーマンスのテストと負荷テストがより日常的な方法で登場します。
(iii)セキュリティテスト
アプリケーションプログラミングインターフェイスまたはAPIは脆弱であり、データへのアクセスやアプリケーションの制御を取得したい悪意のあるハッカーにとって最も簡単なアクセスポイントです。
これにより、企業が法的な問題に直面する可能性があります。セキュリティ違反により、意図しない人や組織が由緒あるAPIを介してクライアントのデータにアクセスできるようになります。
セキュリティテスト はテストの専門部門であり、専門家が処理する必要があります。セキュリティテストのリソースは、組織内または独立したコンサルタントから入手できます。
= >>もお読みください 協定契約テストとは
組織にAPIテストを導入する方法
組織にAPIテストを導入するプロセスは、他のテストツールやフレームワークを実装または展開するために使用されるプロセスと似ています。
以下の表は、主なステップと各ステップの期待される結果をまとめたものです。
段階 | ステップ | 期待される結果 |
---|---|---|
ツールの選択 | 要件を収集し、制約を特定します | 適切なAPIテストツールの市場を調査するための要件を理解します。 例えば。 どのような種類のAPIがテストされていますか?SOAPまたはREST? この役割のためにテスターを雇う必要がありますか、それとも既存のテスターをトレーニングする必要がありますか? 実行されるテストの種類-機能テスト、パフォーマンステストなど。 実施のための予算はいくらですか? |
利用可能なツールを評価する | 利用可能なツールと、要件に最適な1つまたは2つのツールの候補リストを比較します。 | |
コンセプトの証明 | 候補リストのツールを使用して、テストのサブセットを実装します。 調査結果を利害関係者に提示します。 実装するツールを完成させます。 | |
実装 | 入門 | 選択したツールに応じて、必要なツールをPC、仮想マシン、またはサーバーにインストールする必要がなくなります。 選択したツールがサブスクリプションベースの場合は、必要なチームアカウントを作成します。 必要に応じてチームをトレーニングします。 |
進み始める | テストを作成する テストを実行する 欠陥を報告する |
一般的な課題とそれらを軽減する方法
組織にAPIテストフレームワークを実装しようとしているときにQAチームが直面する一般的な課題のいくつかについて説明しましょう。
#1)適切なツールの選択
仕事に適したツールを選択することが最も一般的な課題です。市場で入手可能なAPIテストツールがいくつかあります。
市場で入手可能な最新の最も高価なツールを実装することは非常に魅力的に思えるかもしれませんが、それが望ましい結果をもたらさない場合、そのツールは役に立ちません。
したがって、組織のニーズに基づいて、「必須」の要件に対応するツールを常に選択してください。
利用可能なAPIツールのサンプルツール評価マトリックスは次のとおりです
ツール | 価格設定 | ノート |
---|---|---|
石鹸UI | SoapUIオープンソースで利用可能な無料バージョン(機能テスト) | * REST、SOAP、その他の一般的なAPIおよびIoTプロトコル。 *無料版に含まれています SOAPおよびRESTアドホックテスト メッセージアサーション ドラッグアンドドロップテストの作成 テストログ テスト構成 録音からのテスト ユニットレポート。 *機能の完全なリストは彼らのウェブサイトで見つけることができます。 |
郵便配達員 | 利用可能な無料のPostmanアプリ | * RESTに最もよく使用されます。 *機能は彼らのウェブサイトで見つけることができます。 |
Parasoft | これは有料のツールであり、ライセンスを購入してから、ツールを使用する前にインストールする必要があります。 | *包括的なAPIテスト:機能、負荷、セキュリティテスト、テストデータ管理 |
vREST | ユーザー数に基づく | *自動化されたRESTAPIテスト。 *録音して再生します。 *モックAPIを使用してフロントエンドとバックエンドから依存関係を削除します。 *強力な応答検証。 *ローカルホスト/イントラネット/インターネットにデプロイされたテストアプリケーションで動作します。 * JIRA統合、Swagger、PostmanからのJenkins統合のインポート。 |
HttpMaster | Express Edition:無料でダウンロード プロフェッショナルバージョン:ユーザー数に基づく | *ウェブサイトのテストとAPIテストに役立ちます。 *その他の機能には、グローバルパラメータを定義する機能が含まれ、サポートする検証タイプの大規模なセットを使用して、データ応答検証のチェックを作成する機能をユーザーに提供します。 |
Runscope | ユーザー数とプランタイプに基づく | * APIの監視とテスト用。 *正しいデータが返されることを確認するためのデータ検証に使用できます。 * APIトランザクションが失敗した場合に追跡および通知する機能が含まれています(アプリケーションで支払いの検証が必要な場合は、このツールが適していることがわかります)。 |
PingAPI | 1プロジェクト無料(1,000リクエスト) | *自動化されたAPIテストとモニタリングに役立ちます。 |
#2)不足しているテスト仕様
テスターとして、アプリケーションを効果的にテストするには、期待される結果を知る必要があります。期待される結果を知るためには、明確で正確な要件が必要であるため、これは多くの場合課題ですが、そうではありません。
例えば 、以下の要件を考慮してください。
「アプリケーションは有効な出荷日のみを受け入れる必要があり、無効な要件はすべて拒否する必要があります」
これらの要件には重要な詳細が欠けており、非常にあいまいです。有効な日付をどのように定義していますか?フォーマットはどうですか?エンドユーザーなどに拒否メッセージを返しますか?
明確な要件の例:
1) アプリケーションは、有効な出荷日のみを受け入れる必要があります。
出荷日は有効であると見なされます
- 過去ではない
- 今日の日付以上
- 受け入れ可能な形式です:DD / MM / YYYY
二)
応答ステータスコード= 200
メッセージ:OK
3) 上記の基準を満たさない出荷日は無効と見なされます。顧客が無効な出荷日を送信した場合、次のエラーメッセージで応答する必要があります。
3.1
応答ステータスコードNOT200
エラー:指定された出荷日は無効です。日付がDD / MM / YYYY形式であることを確認してください
3.2
EclipseにMavenをインストールする方法
応答ステータスコードNOT200
エラー:提供された出荷日は過去です
#3)学習曲線
前述のように、APIテストのアプローチは、GUIベースのアプリケーションのテスト中に実行されるアプローチとは異なります。
APIテストのために社内またはコンサルタントのいずれかのスペシャリストを雇っている場合、APIテストアプローチまたはAPIテストツールの学習曲線は最小限である可能性があります。この場合、学習曲線は製品またはアプリケーションの知識の習得に関連します。
既存のチームメンバーがAPIテストの学習に割り当てられている場合、選択したツールに応じて、テストアプローチの変更に伴い、学習曲線が中程度から高い場合があります。製品またはアプリケーション自体の学習曲線は、このテスターがそのアプリケーションを以前にテストしたことがあるかどうかによって、中程度の場合があります。
#4)既存のスキルセット
これは、学習曲線に関する前のポイントと直接関係しています。
テスターがGUIベースのテストから移行する場合、テスターはテストアプローチを変更し、必要に応じて新しいツールまたはフレームワークを学習する必要があります。 例えば。 APIがJSON形式のリクエストを受け入れる場合、テスターはテストの作成を開始するために、JSONが何であるかを学習する必要があります。
ケーススタディ
仕事
既存のアプリケーションをスケールアップするために、ある会社は、標準のGUIアプリケーションだけでなくAPIで製品を提供したいと考えていました。 QAチームは、通常のGUIベースのテスト以外のAPIテストに対応する準備ができていることを確認するために、テストカバレッジプランを提供するように依頼されました。
課題
- 他のソフトウェア製品にはAPIベースのアーキテクチャがなかったため、このタスクに関するテストに対応するには、チームはAPIテストプロセスを最初から確立する必要があります。これは、ツールが評価され、最終候補になり、最終決定され、チームがテストのためにトレーニングされる必要があることを意味します。
- ツールの取得と実装に割り当てられた追加の予算はありませんでした。つまり、チームは無料またはオープンソースのAPIテストツールを選択する必要があり、既存のチームの誰かがこのタスクを実行するためのトレーニングを受ける必要がありました。
- APIフィールドとデータ検証の要件はありませんでした。要件は「対応するGUIアプリケーションと同じように機能する必要がある」でした。
リスクを軽減し、課題を回避するためにチームが従うアプローチ
- QAチームは、プロジェクトチームと協力して、次の要件を特定しました。
- APIタイプ(REST / SOAP): 残り
- 必要なテスト(機能、負荷、セキュリティ): 機能テストのみ
- 必要な自動テスト(はい/いいえ): 今のところオプション
- テストレポート(はい/いいえ): 必須
- QAチームは、利用可能なツールの評価を行いました APIテストツール 必須の要件に基づいています。 Postman API Toolは、無料で使いやすく、学習曲線を最小限に抑え、テストを自動化する可能性があり、優れたレポートが組み込まれているため、選択したツールとして完成しました。
- アプリケーションをテストした同じテスターは、Postmanを使用して初期テストを作成し、それによって製品知識のギャップをなくすようにトレーニングされました。
- 不足している要件に対処するために、プロジェクトチームはSwaggerを使用して高レベルのフィールドレベルのドキュメントを作成しました。ただし、これにより、許容可能なデータ形式に関していくつかのギャップが残り、これはプロジェクトチームで取り上げられ、予想される形式が合意され、文書化されました。
結論
APIベースのアプリケーションは最近人気を得ています。これらのアプリケーションは、従来のアプリケーション/ソフトウェアと比較してスケーラブルであり、他のAPIまたはアプリケーションとの統合が容易です。
このAPIテストのチュートリアルでは、APIテスト、左シフトテスト、Webサービス、およびWebAPIについて詳しく説明しました。また、例を使用してWebサービスとWebAPIの違いについても説明しました。
チュートリアルの第2部では、APIテストの全範囲、組織にAPIテストを導入する方法、およびこのプロセスにおけるいくつかの一般的な課題と、それらのソリューションについて説明しました。
例とともにWebサービスの詳細については、今後のチュートリアルを確認してください。