1. 概要

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

REST-assuredは内部でGroovyを使用するため、実際には、生のGroovy構文を使用してより強力なテストケースを作成する機会があります。 ここで、フレームワークが実際に実現します。

REST-assuredを使用するために必要なセットアップについては、前の記事を確認してください。

2. GroovyのコレクションAPI

まず、Groovyの基本的な概念をいくつか見ていきましょう。必要なものだけを身に付けるために、いくつかの簡単な例を示します。

2.1. findAllメソッド

この例では、メソッドクロージャ、およびit暗黙変数に注目します。 まず、Groovyの単語コレクションを作成しましょう。

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

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

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

ここで、 findAll()は、closureがメソッドに適用されたコレクションに適用されるメソッドです。 method は、コレクションに適用するロジックを定義し、closure は、ロジックをカスタマイズするための述語をメソッドに提供します。

Groovyに、コレクションをループして、長さが4より大きいすべての単語を検索し、その結果を新しいコレクションに返すように指示しています。

2.2. それ変数

暗黙の変数itは、ループ内の現在の単語を保持します。 新しいコレクションwordsWithSizeGreaterThanFourには、バッファロー恐竜という単語が含まれます。

['buffalo', 'dinosaur']

findAll()とは別に、他のGroovyメソッドがあります。

2.3. 収集イテレータ

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

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

結果:

[3,7,3,8]

コレクション内のすべての要素を合計する名前が示すように、sumを使用します。 sizeコレクションのアイテムは次のようにまとめることができます。

def charCount = sizes.sum()

結果は21になり、wordsコレクション内のすべてのアイテムの文字数になります。

2.4. 最大/最小演算子

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

def maximum = sizes.max()

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

2.5. findイテレータ

find を使用して、クロージャー述語に一致する1つのコレクション値のみを検索します。

def greaterThanSeven=sizes.find{it>7}

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

3. GroovyでJSONを検証する

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

{
    "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 であることを確認する場合は、次のようにします。

@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メソッドを呼び出します。

クロージャ述語は、ステータスがゼロより大きいJSONオブジェクトを使用して別のコレクションを作成するようにGroovyに指示します。

パスをpriceで終了します。これは、以前のJSONオブジェクトのリストにあるオッズの価格のみの別のリストを作成するようにgroovyに指示します。 次に、 hasItemsHamcrestマッチャーをこのリストに適用します。

4. GroovyでXMLを検証する

http:// localhost:8080 / Teachers に、 id 部門ごとに教師のリストを返すサービスがあるとします。科目は以下のように教えられます:

<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>

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

@Test
public void givenUrl_whenVerifiesScienceTeacherFromXml_thenCorrect() {
    get("/teachers").then().body(
      "teachers.teacher.find { it.@department == 'science' }.subject",
        hasItems("math", "physics"));
}

XMLパスteachers.teacherを使用して、XML属性departmentごとに教師のリストを取得しました。 次に、このリストのfindメソッドを呼び出します。

find へのクロージャ述語は、science部門の教師だけで終わることを保証します。 XMLパスは、subjectタグで終了します。

複数のサブジェクトがあるため、 hasItemsHamcrestマッチャーで検証するリストを取得します。

5. 結論

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

記事の完全なソースコードについては、GitHubプロジェクトをご覧ください。