REST Assured APIテストチュートリアル

⚡ スマートサマリー

REST Assuredは JavaREST APIの自動テストを効率化するオープンソースライブラリです。このフレームワークは、品質エンジニアが複雑なJSONレスポンス、ヘッダー、ステータスコード、応答時間を、クリーンなBDDスタイルの構文とシームレスなMaven統合を使用して検証することを可能にします。

  • ⚙️ Foundation セットアップ: 構成 Java, Eclipse最初の REST Assured テスト スクリプトを作成する前に、Maven の依存関係を確認してください。
  • 📐 構文の習得: Given-When-Thenパターンを適用して、APIリクエストを読みやすく、ビジネスに適した形式で表現します。
  • 🔍 詳細な検証: Extracレスポンスボディ、ステータスコード、ヘッダー、コンテンツタイプ、タイミングを流暢なチェーンで処理します。
  • 🧩 経路ナビゲーション: XPath と同様のドット表記を使用してネストされた JSON 値を走査します。 Selenium 正確な主張のために。
  • 🛡️ CI/CD の統合: REST Assuredと TestNG or JUnit APIチェックを自動ビルドパイプラインに直接組み込む。

REST Assuredチュートリアル

安心とは何ですか?

安心してください Java ライブラリを使用して REST API をテストし、Maven と適切に統合できます。非常に効率的なマッチング技術を備えているため、期待される結果のアサートも非常に簡単です。Rest Assured には、JSON 構造がいかに複雑であっても、リクエストとレスポンスのほぼすべての部分からデータを取得するメソッドがあります。

テスト コミュニティにとって、API 自動テストはまだ新しく、ニッチな分野です。JSON の複雑さにより、API テストは未開拓のままです。しかし、テスト プロセスでの重要性が下がるわけではありません。Rest Assured.io フレームワークは、コア Java の基礎を使用してテストを非常にシンプルにしており、学習する価値のあるものとなっています。

Rest-Assured が必要な理由は何ですか?

Googleマップを開いて行きたい場所を検索する場面を想像してみてください。すぐに近くのレストランや主要旅行会社の交通手段、その他多くの選択肢が表示されます。これらはGoogle製品ではないことは誰もが知っていますが、Googleはどのようにしてこれらを表示しているのでしょうか?それは、これらのプロバイダーが公開しているAPIを利用しているからです。UIが構築される前、あるいは開発中であっても、このような設定をテストするように求められた場合、APIのテストは非常に重要になります。さまざまなデータの組み合わせで繰り返しテストを行うことは、自動化に非常に適したケースと言えるでしょう。

以前は、チームは次のような動的言語を使用していました。 Groovy そして、これを実現するためにRubyが必要だったが、それは困難だった。そのため、APIテストは機能テスターに​​よって広く活用されることはなかった。

しかし、Rest Assured を使用すると、API の自動テストや、ユーザーフレンドリーなカスタマイズを施したシンプルな HTTPS リクエストの送信が、基本的な知識があれば簡単に行えます。 JavaAPIテストと統合テストの理解に役立ちます。Rest Assuredはバックエンドに対する高い信頼性を提供し、フロントエンドテスターはUIとクライアントサイドの操作に集中できます。Rest Assuredはオープンソースであり、メソッドとライブラリが継続的に追加されているため、API自動化に最適な選択肢となっています。

REST Assured 対 Postman: 主な違い

REST Assured と Postman REST APIを検証するツールは数多くありますが、それぞれテストライフサイクルの異なる段階に適しています。適切なツールを選択するには、チームのスキル、プロジェクトの範囲、および統合ニーズを考慮する必要があります。

側面 安心してください Postman
タイプ Java コードベースの自動化のためのライブラリ スクリプトをサポートするGUIベースのAPIクライアント
最適な使用例 継続的インテグレーションパイプラインと回帰テストスイート 手動による調査と迅速なAPIチェック
スキル要件 ペース: Java 必要な知識 最小限のコーディング。 Javaスクリプトの抜粋
レポート作成 と統合 TestNG, JUnit、そしてアリュール Newman CLI を介した組み込みの実行サマリー

多くのチームが Postman 初期プロトタイプ向けping API が完成したら、自動回帰テストのために REST Assured に切り替えます。tractが安定する。

Rest Assured.io をセットアップする方法 Eclipse

REST Assured の設定には、次の 3 つの主要な依存関係があります。 JavaIDEとMavenが必要です。後々のビルドエラーを避けるため、以下の手順に従ってください。

ステップ1)インストール Java。こちらを参照してください ガイド

ステップ 2) IDE をダウンロードして開始します。 日食

ステップ3) MavenをインストールしてEclipseをセットアップします。 こちら.

セットアップも安心

  1. IDEでMavenプロジェクトを作成してください。ここではIntelliJを使用していますが、どのIDEを使用しても同様の構造になります。
  2. POM.xmlファイルを開いてください。

REST Assured Mavenセットアップのプロジェクト構造

REST Assured Mavenワークスペースのプロジェクト構造

Rest Assured.ioの場合: Java バージョン < 9 ユーザー:

以下の依存関係を POM.xml に追加します。

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-path</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>xml-path</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

Rest Assured.ioの場合: Java バージョン9以降のユーザー:

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured-all</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

トラブルシューティング:

エラーが表示され、依存関係が正しくダウンロードされたかどうか不明な場合は、以下の手順に従ってください。

  1. すべての依存関係をインポートするには、Mavenビルドを実行してください。Mavenセットアップに関するヘルプは、こちらをご覧ください。 Guru99.
  2. エラーが解消されない場合は、Maven cleanを実行してからMaven installを実行してください。ビルドはエラーなく完了するはずです。
  3. 以下のインポートを Java クラスを開き、コンパイルエラーがないことを確認してください。
import io.restassured.RestAssured.*;
import io.restassured.matcher.RestAssuredMatchers.*;
import org.hamcrest.Matchers.*;

最初の単純な Rest Assured スクリプト

依存関係が整ったので、最初のスクリプトを作成できます。このフレームワークは、ほぼ英語のように読みやすいビヘイビア駆動開発(BDD)スタイルを採用しています。

構文:

Rest Assured.ioの構文は、BDDに非常に似ていて理解しやすいため、フレームワークの中で最も読みやすい部分です。

Given().
        param("x", "y").
        header("z", "w").
when().
Method().
Then().
        statusCode(XXX).
        body("x", "y", equalTo("z"));

説明:

Code 説明
与えられた() 「Given」キーワードを使用すると、背景を設定できます。ここでは、リクエストヘッダー、クエリとパスのパラメータ、本文、およびCookieを渡します。これらの項目がリクエストに必要ない場合は、この設定は省略可能です。
いつ() 「when」キーワードは、シナリオの前提条件を示します。例えば、「when」で何かを取得/投稿/配置したら、別の行動をとる、といった具合です。
方法() これをCRUD操作(get/post/put/delete)のいずれかに置き換えてください。
それから() ここにアサート条件とマッチング条件を記述します。

セットアップと構文に関する基本的な知識が得られたので、最初の簡単なテストを作成してみましょう。構造が初めてのように感じられるかもしれませんが、コーディングを進め、各行を解釈していくうちに、すぐに慣れるでしょう。

何を取ってきますか?

ブラウザを開いて – を押します。 https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1。 以下のように表示されることを確認してください。

サンプル Rest Assured スクリプト API レスポンス

REST Assuredによって取得されたサンプルAPIレスポンス

リクエストに対する応答を取得しようとした際にブラウザでエラーが発生した場合:

  1. HTTPSとHTTPのどちらを使用したか確認してください。お使いのブラウザには、安全でないウェブサイトをブロックする設定がある場合があります。
  2. プロキシやファイアウォールがブラウザによるウェブサイトのアクセスをブロックしていないか確認してください。

*お願い ここではヘッダーもボディもクッキーも使用していません。URLのみを使用しており、既存のコンテンツを投稿または更新するのではなく、APIからコンテンツを取得しています。つまり、これはGETリクエストです。最初のテストをよりよく理解するために、この点を覚えておいてください。

テストの目的:

スクリプトの目的は、Rest Assured を通じてブラウザで受信した出力と同じ出力を IDE コンソールに出力することです。

以下の手順でこれをコード化してみましょう。

レスポンス本文の取得

ステップ1) 「myFirstRestAssuredClass」という名前のクラスを作成します。

ステップ2) 「getResponseBody」という名前のメソッドを作成してください。

ステップ3) 以前に学習した given、when、then の構造と同様に、以下のコードを入力してください。

与えられた()。 -> ヘッダーもクエリもパスパラメータも必要ありません。

when(). -> 特定の条件が設定されていません。

得る('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). -> URLのみを指定する必要があります。

then(). -> 特定のアサーションは必要ありません。

log().all() -> すべてのレスポンスが取得されたら、レスポンス、ヘッダー、およびリクエストが返す基本的にすべてのものをログに記録します。

public static void getResponseBody(){
   given().when().get("https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1").then().log()
  .all();

}

ここで、使用されているURLが長く、読みにくいことに気づくでしょう。よく見ると、3つのクエリパラメータが使用されていることがわかります。

  1. 顧客ID
  2. パスワード
  3. アカウントなし

Rest Assured を使用すると、クエリ、パス、ヘッダーパラメータなど、すべての要素を個別に渡すことができるため、コードの可読性と保守性が向上します。また、必要に応じて外部ファイルからデータをパラメータ化することも可能です。

クエリ パラメータを使用する場合は、構文の定義に戻り、それらがすべて指定されたパラメータの一部として渡されることを確認します。

public static void getResponseBody(){

   given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log()
           .body();
}

**「all」の代わりに「body」を使用していることに注意してください。これは、trac応答の本文のみ。

出力:

レスポンスステータスコードの取得

次にスクリプト化するメソッドは、ステータスコードを取得し、それを検証するためのアサーションを挿入するものです。

ステップ1) getResponseStatus() というメソッドを作成してください。

ステップ2) 上で使用したものと同じリクエスト構造を使用します。 コピーして貼り付けます。

ステップ3) ログに記録する代わりに、'getStatus' を使用します。Code' Rest Assured に組み込まれている、ステータス コード値を取得するためのメソッド。

ステップ4) ステータスコードが200であることを表明するには、キーワード「assertThat().status」を使用します。Code(期待されるCode).

**注 – URLは簡略化のために使用される変数です。URLにはAPIリクエストのURL全体が含まれます。

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

出力:

ビジネスニーズ

自動化の基本ルールの 2 つは、必要な条件がすべて満たされた場合にのみテストが続行されるようにチェックポイントを設定する必要があるということです。 API テストにおける最も基本的な検証は、リクエストのステータス コードが XNUMXXX 形式であるかどうかを確認することです。

これまでの完全なコード:

import java.util.ArrayList;
import static io.restassured.RestAssured.*;
import static java.util.concurrent.TimeUnit.MILLISECONDS;

public class myFirstRestAssuredClass {

   final static String url="https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1";

   public static void main(String args[]) {

      getResponseBody();
     getResponseStatus();

; }

   //This will fetch the response body as is and log it. given and when are optional here
   public static void getResponseBody(){
       given().when().get(url).then().log()
      .all();

  given().queryParam("CUSTOMER_ID","68195")
               .queryParam("PASSWORD","1234!")
               .queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log().body();
   }

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

}

*注意:

  1. このシナリオでは、ステータスコード200が成功応答です。場合によっては、リクエストを失敗させる必要があるかもしれません。その場合は、4XXまたは5XXを使用してください。無効なパラメータを指定してステータスコードを変更し、確認してみてください。
  2. 条件をアサートすると、エラーがない限り、コンソールには表示されません。

応答のさまざまな部分を取得するスクリプト

REST Assured は、レスポンスボディとステータスコードに加えて、チェーン可能なエクスプロイトを通じてヘッダー、レスポンスタイム、コンテンツタイプも公開します。tractor メソッド。キーワード 'extract'はこれらの特定の部品を取得するために不可欠です。

ヘッダ

Rest Assured は非常に単純な言語であり、ヘッダーの取得も同様に簡単です。 メソッド名は headers() です。 前と同様に、同じことを行うスタンドアロン メソッドを作成します。

public static void getResponseHeaders(){
   System.out.println("The headers in the response "+
                   get(url).then().extract()
           .headers());
}

ここでは「given().when()」は省略され、コード行は「get()」から始まっていることにご注意ください。これは、リクエストを送信してレスポンスを取得する前に、事前条件や検証が行われていないためです。このような場合、これらを使用するかどうかは任意です。

出力:

ビジネスニーズ:

多くの場合、後続のリクエストには認証トークンまたはセッションクッキーを使用する必要があり、これらの詳細はほとんどの場合、レスポンスのヘッダーとして返されます。

反応時間

バックエンドまたは他のダウンストリーム システムから応答を取得するのに必要な時間を取得するために、Rest Assured は、応答を返すのにかかる時間を取得するための適切な timeUnit を備えた「timeIn」と呼ばれるメソッドを提供します。

public static void getResponseTime(){
  System.out.println("The time taken to fetch the response "+get(url)
         .timeIn(TimeUnit.MILLISECONDS) + " milliseconds");
}

出力:

ビジネスニーズ:

APIテストにおいて非常に重要な要素の一つが応答時間であり、これはアプリケーションのパフォーマンスを測定する指標となります。API呼び出しにかかる時間は、インターネット接続速度、その時点でのAPIのパフォーマンス、サーバー負荷、その他時間に影響を与える要因によって、長くなったり短くなったりします。

コンテンツタイプ

返されたレスポンスのコンテンツタイプは、「contentType()」メソッドを使用して取得できます。

public static void getResponseContentType(){
   System.out.println("The content type of response "+
           get(url).then().extract()
              .contentType());
}

出力

ビジネスニーズ:

コンテンツタイプを取得することは、クロスオリジン脅威に対するセキュリティ上の脆弱性がないことを確認し、渡されたコンテンツがAPIの標準に準拠していることを確認するために不可欠な場合があります。

個々の JSON 要素を取得する

与えられた回答から合計金額を計算するよう求められています。各金額を取得し、それらを合計する必要があります。

ステップ:

ステップ1) 金額フィールドは「statements」というキーを持つ配列の中にあり、その配列はさらに「result」というキーを持つリストの中にあります。

ステップ2) Rest Assuredは、「パス」を使用してAPI内の値にアクセスするためのメカニズムを提供します。

ステップ3) 金額にアクセスするパスは「result.statements.AMOUNT」です。XPath のように考えてください。 Selenium.

ステップ4) コレクション内のすべての金額を取得し、すべての値をループ処理して合計を計算します。

public static void getSpecificPartOfResponseBody(){

ArrayList<String> amounts = when().get(url).then().extract().path("result.statements.AMOUNT") ;
int sumOfAll=0;
for(String a:amounts){

    System.out.println("The amount value fetched is "+a);
    sumOfAll=sumOfAll+Integer.valueOf(a);
}
System.out.println("The total amount is "+sumOfAll);

}

注:金額の値は文字列型なので、合計を計算するために整数型に変換します。

出力:

REST Assuredテスト自動化のベストプラクティス

基本を理解すれば、規律あるパターンを適用することで、API の拡張に伴ってテストスイートの信頼性を維持できます。以下のプラクティスは、チームが不安定なテストやメンテナンスのオーバーヘッドを回避するのに役立ちます。

  1. ベースURLを一元化する: ベースURIと認証トークンは、単一の設定クラスまたはプロパティファイルに保存してください。これにより、重複を避け、環境切り替えが容易になります。
  2. リクエストおよびレスポンス仕様を使用する: 再利用可能な RequestSpecBuilder オブジェクトと ResponseSpecBuilder オブジェクトを作成します。これにより、多くのテストで共通のヘッダーやアサーションが使用される場合に、定型コードを削減できます。
  3. JSONスキーマを検証する: REST Assured を json-schema-validator モジュールと組み合わせて確認しますtract の整合性。スキーマチェックは、下流のコンシューマーに届く前に破壊的な変更を検出します。
  4. テストデータを外部化する: ペイロードをJSONファイルに保存するか、データプロバイダーを使用します。 TestNGハードコーディングされたデータはすぐに古くなってしまう。
  5. 独立したテストを実行する: 各テストは、それぞれ独自のデータ設定とデータ破棄を行うべきです。順序に依存するテストスイートは、並列実行のCI環境で予期せぬ失敗を起こす可能性があります。
  6. ログを選択的に取得する: 安定版スイートでは log().ifError() を、デバッグ時には log().all() を使用してください。冗長なログは CI パイプラインの速度を低下させ、実際の問題を隠蔽します。
  7. CI/CDに組み込む: Maven SurefireまたはFailsafeを介してREST Assuredスイートをトリガーします JenkinsGitHub Actions、またはGitLabを使用します。コミットごとに動作確認を行い、夜間に完全な回帰テストを実行します。

こうした習慣を早期に取り入れることで、API自動化は脆弱なボトルネックではなく、長期的な資産へと変わります。

よくあるご質問

はい。ChatGPTやGitHub Copilotなどの最新のAIアシスタントは、API仕様からREST Assuredテストのひな形を作成できます。ただし、マージする前に、エンジニアは生成されたコードについて、アサーション、データ処理、およびエッジケースを確認する必要があります。

AIを活用したツールは、応答パターンを分析し、自己修復型のロケーターやアサーションを提案します。また、スキーマのずれを検出し、リファクタリングを推奨し、テストデータを自動的に更新することで、APIが頻繁に進化する際の手動メンテナンス作業を軽減します。

REST Assuredは Java CIパイプラインにおけるコード駆動型自動化のために構築されたライブラリ。 Postman は、手動による探索と迅速なスクリプト作成のためのGUIクライアントです。チームは、テストライフサイクル全体を通して、これら両方を組み合わせて使用​​することがよくあります。

REST Assured は REST と JSON に最適化されています。SOAP 用の生の XML ペイロードを送信できますが、専用ツールでは SoapUI WSDL解析とSOAP固有のアサーションに対するより充実したサポートを提供する。

REST Assuredは、 TestNG and JUnit アサーション、ライフサイクルフック、レポート作成に利用できます。Allure、Extent Reports、Maven Surefireは、その上に視覚化機能とCI統合機能を追加します。