rest api testing with cucumber using bdd approach
このチュートリアルでは、BDDアプローチを使用したキュウリを使用したRESTAPIテストについて説明します。ソフトウェアのインストール、プロジェクトのセットアップ、TestScriptの実行、およびレポートについて説明します。
この記事では、Cucumberフレームワークを使用してBDDスタイルでRESTAPIテストを開始する方法を説明します。
トピックを深く掘り下げる前に、それに関連する重要な概念を理解しましょう。
はじめましょう!!
学習内容:
RESTAPIの重要な概念
残り
これはソフトウェアアーキテクチャスタイルです。の完全な形式 RESTはRepresentationalStateTransferです 。これは、Webサービスの作成に使用される一連の制約を定義します。 RESTアーキテクチャスタイルに準拠するWebサービスは、RESTfulWebサービスと呼ばれます。
RESTAPIテスト
REST APIテストは、POST、GET、PUT、DELETEの4つの主要なメソッドを使用してAPIをテストしています。
RESTテンプレート
RestTemplateは、HTTPメソッドにオーバーロードされたメソッドを提供することにより、HTTPベースのRESTfulWebサービスをテストする便利な方法を提供するオープンソースのSpringFrameworkクラスです。
基本的なテクニカルサポートの面接の質問と回答
注意 :REST APIテストの概念について詳しくは、以前のチュートリアル「 SpringRestTemplateとTestNGを使用したRESTAPIテスト ’では、JSONの概念とともにRESTAPIテストを手動で実行する方法について説明しました。
BDD
BDDは、ビヘイビア駆動開発アプローチです。これは、テスト駆動開発、つまりTDDスタイルから生まれたソフトウェア開発手法の1つです。
BDDテストの原則は、テストケースがプログラマー以外の人も簡単に読める自然言語で書かれていることです。
きゅうり
Cucumberは、ビヘイビア駆動開発をサポートするツールです。
きゅうりはどのように機能しますか?
きゅうりのしくみを見てみましょう。
Cucumberは、機能ファイル、ステップ定義ファイル、およびRunnerクラスで構成されています。
機能ファイル
機能ファイルは、ビジネスアナリストまたはスポンサーによって作成されます。これらは、仕様が記述された自然言語形式で記述されており、アプリケーションが仕様に従って機能することを検証します。
これらの仕様には、複数のシナリオまたは例が記載されています。各シナリオは、Cucumberが実行する特定の手順のリストです。
ユーザーがシステムにログインしたいシナリオを考えてみましょう。
これが仕様どおりに機能しているかどうかを確認するには、このシナリオを説明する必要があります。ここでは、仕様に従って実行する手順と目的の結果を示します。
アイデアを得るために、サンプルシナリオは次のようになります。
Scenario: Login to the system Given User launches Login screen When User enters username, password and submit Then Login Successful message appears
ご覧のとおり、各シナリオは、Cucumberが実行する手順の一種のリストです。 Cucumberがシナリオを理解するには、次のような基本的な構文規則に従う必要があります。 ガーキン 。
ステップ定義ファイル
ステップ定義ファイルは、機能ファイルに記載されている各Gherkinステップを実装コードにマップします。これにより、Cucumberはステップで実行する必要のあるアクションを実行できます。
Cucumberフレームワークは、Java、.net、Rubyなどのステップ定義を作成するための多くのプログラミング言語をサポートしています。
注意 :記事「 SpringRestTemplateとTestNGを使用したRESTAPIテスト ’、Springテンプレートを使用してTestNGテストプロジェクトを開発しました。
ここで、同じRESTサービスとRestTemplateのテストフレームワークを開発しますが、動作駆動型の開発テストスタイルにCucumberを使用します。
Cucumberを使用した自動化テストフレームワークのセットアップを始めましょう。
Windowsでのキュウリテストフレームワークのセットアップ
#1)インストール
(私) ステップ定義の開発にはJavaを使用します。したがって、最初にWindows用のJDKインストーラーをからダウンロードします。 オラクル マシンにJavaをインストールします。
(ii)IDE(統合開発環境) :Automation TestSuite開発のIDEとしてEclipseを使用しました。あなたはそれをからダウンロードすることができます Eclipse
(iii)Cucumber用のEclipseプラグインを入手します。
Eclipseで次の手順に従います。
- メニューオプションから(ヘルプ)-> (新しいソフトウェアのインストール)を選択します。
- 入る 「キュウリエクリプス」 検索テキストボックスに入力します。
- クリックしてください インストール ボタン。
EclipseでのCucumberプラグインのインストール
- に到達するまで(次へ)ボタンをクリックし続けます ライセンスの確認 画面。
最後に、チェックボックスをクリックして使用許諾契約に同意し、 終了 ボタン。これでインストールは完了です。ここで、EclipseIDEを再起動します。これは、プラグインのインストールを有効にするために必要です。
(iv)春の瓶: Springフレームワークに属するRestTemplateクラスを使用するため、Springフレームワークjarが必要です。あなたはから春の瓶をダウンロードすることができます SpringFramework ローカルフォルダに保存します。 例えば、 C:/ projectJar
(v)JSON-シンプルジャー: JSON解析を実行する必要があります。したがって、軽量のJSON-simpleAPIを使用します。したがって、JSON-simple-1.1.jarをダウンロードして、 C:/ projectJar
(vi)キュウリの瓶:
Cucumberプロジェクトを実行するには、次のCucumberjarが必要です。
- きゅうりの芯
- cucumber-java
- キュウリ-JUnit
- キュウリ-JVM-deps
- きゅうり報告
- ガーキン
- JUnit
- mockito-すべて
- カバレッジ
- cucumber-HTML (htmlのレポート用)
これらのファイルは、pom.xmlファイルを使用してダウンロードできます。ただし、最も簡単な方法は、これらのjarファイルをからダウンロードすることです。 中央リポジトリ それらのjarファイルをローカルフォルダに保存します。 例えば、 C:/ projectJar
アンドロイドのための最高のmp3ダウンローダー
これで、必要なすべてのインストールが完了しました。それでは、BDDテスト自動化プロジェクトを作成しましょう。
#2)プロジェクトの設定
- ファイルの作成->新規-> Javaプロジェクト->「」という名前を付けます CRUD_Cucumber ’。
- 次に、新しいJavaパッケージを作成します デモ。
- プロジェクトのBuildPathを構成します。
- 前のセクションで見たように、Cucumberプラグインをインストールし、Springをダウンロードし、JSON-simplejarをインストールしました。それで、それらを消費するためにプロジェクトにビルドパスを追加する時が来ました。そのために、 lib のフォルダ CRUD_Cucumberのフォルダー そして今、C:/ projectJarからすべてのjarファイルをコピーします lib /キュウリ、lib /春 フォルダ。
- ‘を右クリック CRUD_Cucumber ’ ->ビルドパス->ビルドパスの構成。
- クリックしてください ライブラリ タブ。
- クリック jarファイルを追加します ボタン->からすべてのjarファイルを選択します lib /キュウリ フォルダと lib / Spring フォルダ。これにより、すべてのキュウリjar、スプリングjar、およびJSON-simplejarがプロジェクトビルドパスに追加されます。
プロジェクト構造は、Eclipseパッケージエクスプローラーに次のように表示されます。
テストプロジェクトのパッケージ構造
#3)機能ファイル
それでは、機能ファイルを作成しましょう DemoFeature.feature 従業員サービスでCRUD操作を実行する機能を備えています。
この例では、ダミーのhttp://dummy.restapiexample.com/apiサンプルRESTサービスを1つ使用しました。
この機能ファイルは、CRUD操作を実行するシナリオ、つまりCRUD(Create-Read-Update-Delete)をカバーするシナリオについて説明しています。
- 最初に機能を定義しましょう。この場合は、CRUDメソッドのテストです。これは次のように説明できます。
Feature: Test CRUD methods in Sample Employee REST API testing
- 現在、これには、従業員レコードの作成、更新、読み取り、削除などのさまざまなシナリオがあります。したがって、POSTシナリオを見てください。
Scenario: Add Employee record
- 従業員サービスのURLを設定するテストの前提条件を説明してください。
Given I Set POST employee service api endpoint
- POSTリクエストを送信する実際のテストステップを指定します。
When I Set request HEADER And Send a POST HTTP request
- 次に、応答本文の検証について説明します。
Then I receive valid Response
したがって、機能ファイルでは、シナリオは次のようになります。
Scenario: Add Employee record Given I Set POST employee service api endpoint When I Set request HEADER And Send a POST HTTP request Then I receive valid Response
同様に、残りのシナリオは次のように記述できます。
DemoFeature.feature
#4)ステップ定義の実装
上記のシナリオで使用される機能ステップでは、プログラムによる実装を作成する必要があります。この場合はJavaです。
ステップ定義は、式を持つJavaで記述されたメソッドです。メソッドを1つまたは複数のステップにリンクします。したがって、Cucumberが機能ファイルのシナリオで説明されている手順を実行すると、最初に一致するものが検索されます。 ステップ定義 実行します。
例えば、 POSTを使用して従業員を追加するためのステップ定義は次のように記述できます。
与えられたステップの場合、実装は次のように記述されます。
@Given('^I Set POST employee service api endpoint$') public void setPostEndpoint(){ addURI = 'http://dummy.restapiexample.com/api/v1/create'; System.out.println('Add URL :'+addURI); }
同様に、Whenステップの場合、定義方法は次のとおりです。
@When ('^Send a POST HTTP request$') public void sendPostRequest(){ doublename_id = Math.random(); emp_name = 'zozo_'+name_id;//Just to avoid Duplicate Name entry String jsonBody'{'name':''+emp_name+'','salary':'123','age':'23'}'; System.out.println('
' + jsonBody); HttpEntityentity = new HttpEntity(jsonBody, headers); //POST Method to Add New Employee restTemplate = newRestTemplate (); response = restTemplate.postForEntity(addURI, entity, String.class); }
ここで、検証ステップの部分、つまり、Thenステップの実装を示します。
@Then ('^I receive valid Response$') Public void verifyPostResponse(){ responseBodyPOST = response.getBody(); // Write response to file responseBody = response.getBody().toString(); System.out.println('responseBody --->' + responseBody); // Get ID from the Response object employeeId = getEmpIdFromResponse(responseBody); System.out.println('empId is :' + employeeId); // Check if the added Employee is present in the response body. Assert.hasText(responseBody,employeeId); // Check if the status code is 201 Assert.isTrue(response.getStatusCode()==HttpStatus.OK); System.out.println('Employee is Added successfully employeeId:'+employeeId); }
注意: ここでは、リクエストの送信にRestTemplateメソッドを使用しています。これは、 ‘で使用されている方法と同じです。 SpringRestTemplateとTestNGを使用したRESTAPIテスト ' 。 Rest Templateメソッドの詳細については、チュートリアルを参照してください。
したがって、ステップ定義は次のようになります。
StepDefinition.java
残りのシナリオである従業員の更新、読み取り、および削除のステップ定義を同じ方法で実装できます。
#5)テストの実行
これで、シナリオとステップスクリプトの開発タスクが完了したので、テストを実行してみましょう。このために、JUnitランナークラスを作成する必要があります。
publicclassRunner { }
ここでは、クラス名の上に次のアノテーションを追加する必要があります。
@RunWith(Cucumber.class): Cucumberのテストランナークラスとして実行します。
@CucumberOptions: ここでは、実行中に調べるCucumberフレームワークの機能ファイルの場所とステップ定義ファイルの場所を指定します。
features='' glue=''
プラグイン: これは、出力として生成されるレポートのさまざまなフォーマットオプションを指定するために使用されます。
したがって、ランナークラスは次のようになります。
TestRunner.java
右クリックするだけ TestRunner.java オプション ‘を選択します JUnitテストとして実行 。テストの実行結果は次のように表示されます。
JUnitタブ出力
どんな種類のメールがありますか
コンソールに次のメッセージが表示されます。
コンソール出力
#6)レポート
コンソールで結果を確認しました。ただし、Cucumberは、利害関係者と共有できる、より見栄えの良いHTML形式でテスト結果を提供します。
開いた 目標 -> きゅうりレポート ブラウザで。
注意 :JUnitランナークラスCucucmberOptionsを覚えていますか?
@CucumberOptions (features='Features',glue={'demo'},plugin={'pretty', 'html:target/cucumber-reports'})
ここでプラグインは、フォルダとともにHTML形式のレポートに指定するオプションです。
target/cucumber-reports
次に、target cucumber-reports index.htmlページを開きます。レポートページは、正常に実行されたシナリオを含む機能名を確認できるHTMLページです。
したがって、レポートは次のようになります。
HTML形式のCucumberTest結果
結論
このチュートリアルを終了するために、これまでに学んだことを要約しましょう。
BDD Cucumber RESTAPIテスト自動化フレームワークをセットアップするための最初からすべてのステップを見てきました。
この過程で、私たちは次のことを学びました。
- テスト自動化では、プログラミング言語としてJavaを選択しました。
- ビヘイビア駆動開発のテスト方法でテストスイートを作成するためのテストフレームワークとして、Cucumberを選択しました。
- 実際のHTTPリクエストをサーバーに送信するために、SpringフレームワークのRestTemplateクラスを使用しました。
- これらのAPIを使用するために、Cucumberプラグインのインストールを行い、Cucumber依存関係jarファイル、Spring jar、およびパーサーAPI用のJSON-simplejarをダウンロードしました。
- シナリオを平易な英語で説明するための機能ファイル、ステップをマップするためのステップ定義ファイル、および機能ファイルを実行するためのJUnitRunnerクラスを作成しました。
- 最後に、Test Runnerクラスを実行し、より見やすく読みやすいHTML形式で結果をコンソールに表示しました。
要するに、この記事では、Cucumberを使用したRESTAPIテスト自動化の開始方法について説明しました。すべての重要なソフトウェアのインストール、プロジェクトセットアップ、TestScript開発からテストの実行、生成されたレポートの表示まで、テスト自動化フレームワークのセットアップについて説明しました。
これは、自動化QAがテスト自動化フレームワークを開始するのに十分です。しかし、誰かがキュウリが内部でどのように機能するのか、ガーキン言語がどのように機能するのかを詳細に理解したい場合は、それを調べることができます きゅうり。
キュウリを使用したBDDスタイルのRESTAPIのテストを開始する準備ができていることを願っています!!