GroovyでREST保証

1.概要

このチュートリアルでは、GroovyでREST保証のライブラリを使用する方法を見ていきます。

RESTアシュアードは内部でGroovyを使用しているので、実際には生のGroovy構文を使用してより強力なテストケースを作成する機会があります。

これが、フレームワークが現実のものとなるところです。

REST-assuredを使用するために必要な設定については、/rest-assured-tutorial[前の記事]のリンクを確認してください。

2 GroovyのコレクションAPI

Groovyの基本的な概念を簡単に見てみましょう。必要なものだけを用意するための簡単な例をいくつか紹介します。

2.1. findAll メソッド

この例では、 methods closures 、そして it 暗黙変数に注目します。まずGroovyの単語コレクションを作成しましょう。

def words =['ant', 'buffalo', 'cat', 'dinosaur']----

4文字を超える長さの単語を使って、上記から別のコレクションを作成しましょう。

[source,groovy,gutter:,true]

def wordsWithSizeGreaterThanFour = words.findAll { it.length() > 4 }

ここで、__findAll()__は__closure__がメソッドに適用されたコレクションに適用されたメソッドです。 __method__はコレクションに適用するロジックを定義し、__closure__はメソッドにロジックをカスタマイズするための述語を与えます。

Groovyにコレクションをループ処理して、長さが4を超えるすべての単語を見つけて、結果を新しいコレクションに返すように指示しています。

====  **  2.2.  __it__変数**

暗黙的変数__it__は、ループ内の現在の単語を保持します。新しいコレクション__wordsWithSizeGreaterThanFour__には、単語__buffalo__と__dinosaur__が含まれます。

[source,groovy,gutter:,true]

----['buffalo', 'dinosaur']----

__findAll()__とは別に、他にもGroovyメソッドがあります。

====  **  2.3.  __collect__イテレータ**

最後に、__collect__があります。コレクション内の各アイテムのクロージャーを呼び出し、それぞれの結果を含む新しいコレクションを返します。 __words__コレクションの各アイテムのサイズから新しいコレクションを作成しましょう。

[source,groovy,gutter:,true]

def sizes = words.collect{it.length()}

結果:

[source,groovy,gutter:,true]

----[3,7,3,8]----

名前がコレクション内のすべての要素を合計することを示唆するので、__sum__を使用します。以下のように__sizes__コレクションの項目をまとめることができます。

[source,groovy,gutter:,true]

def charCount = sizes.sum()

結果は21、つまり__words__コレクション内のすべての項目の文字数になります。

====  **  2.4.  __max/min__演算子**

__max/min__演算子は、コレクション内の最大数または最小数を見つけるために直感的に名前が付けられています。

[source,groovy,gutter:,true]

def maximum = sizes.max()

結果は明らかなはずです、8。

====  **  2.5.  __find__イテレータ**

クロージャー述部に一致するコレクション値を1つだけ検索するために__find__を使用します。

[source,groovy,gutter:,true]

def greaterThanSeven=sizes.find{it>7}

結果、8、述部を満たすコレクション項目の最初の出現。

[[Validate]]

===  **  3 Groovy ** でJSONを検証する

__http://localhost:8080/odds__にサービスがある場合、次のように、お気に入りのサッカーの試合のオッズのリストが返されます。

[source,javascript,gutter:,true]

{ "odds":[{ "price": 1.30, "status": 0, "ck": 12.2, "name": "1" }, { "price": 5.25, "status": 1, "ck": 13.1, "name": "X" }, { "price": 2.70, "status": 0, "ck": 12.2, "name": "0" }, { "price": 1.20, "status": 2, "ck": 13.1, "name": "2" }]}

また、ステータスが1より大きいオッズの価格が__1.20__と5 ____。25____であることを確認したい場合は、次のようにします。

[source,java,gutter:,true]

@Test public void givenUrl whenVerifiesOddPricesAccuratelyByStatus thenCorrect() { get("/odds").then().body("odds.findAll { it.status > 0 }.price", hasItems(5.25f, 1.20f)); }

ここで起こっているのはこれです。 Groovy構文を使用して、キー__odds__の下にJSON配列をロードします。複数のアイテムがあるので、Groovyコレクションを入手します。その後、このコレクションに対して__findAll__メソッドを呼び出します。

クロージャ述語は、statusが0より大きいJSONオブジェクトを持つ別のコレクションを作成するようにGroovyに指示します。

これまでのJSONオブジェクトのリストにあるオッズの価格のみのリストをもう1つ作成するようにgroovyに指示しています。それから__hasItems__ Hamcrestマッチャーをこのリストに適用します。

[[XML]]

===  **  4 Groovy ** でXMLを検証する

__http://localhost:8080/teachers__に、次のように教えられた__id__、__department__、および__subjects__による教師のリストを返すサービスがあるとします。

[source,xml,gutter:,true]

<teachers> <teacher department="science" id=309> <subject>math</subject> <subject>physics</subject> </teacher> <teacher department="arts" id=310> <subject>political education</subject> <subject>english</subject> </teacher> </teachers>

これで、回答で返された科学の先生が数学と物理の両方を教えていることを確認できます。

[source,java,gutter:,true]

@Test public void givenUrl whenVerifiesScienceTeacherFromXml thenCorrect() { get("/teachers").then().body( "teachers.teacher.find {[email protected]== 'science' }.subject", hasItems("math", "physics")); }

XML属性__department__によって教師のリストを取得するために、XMLパス__teachers.teacher__を使用しました。それから、このリストの__find__メソッドを呼び出します。

__find__に対するクロージャー述語は、私たちが__science__部門の教師だけで終わることを保証します。 XMLパスは__subject__タグで終わります。

複数の主題があるので、私たちは__hasItems__ Hamcrestマッチャーで検証するリストを得ます。

===  5.まとめ

この記事では、REST保証のライブラリをGroovy言語で使用する方法を説明しました。

この記事の完全なソースコードについては、https://github.com/eugenp/tutorials/tree/master/testing-modules/rest-assured[GitHubプロジェクト]をチェックしてください。