GroovyでREST保証

GroovyでRESTを保証

1. 概要

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

RESTが保証されているのは内部でGroovyを使用しているため、実際には未加工のGroovy構文を使用してより強力なテストケースを作成する機会があります。 これは、フレームワークが実際に実現する場所です。

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

2. GroovyのコレクションAPI

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

2.1. findAllメソッド

この例では、methodsclosures、および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変数

暗黙の変数itは、ループ内の現在の単語を保持します。 新しいコレクションwordsWithSizeGreaterThanFourには、単語buffaloおよびdinosaurが含まれます。

['buffalo', 'dinosaur']

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

2.3. collectイテレータ

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

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

結果:

[3,7,3,8]

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

def charCount = sizes.sum()

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

2.4. max/min演算子

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にサービスがあり、以下のように教えられたiddepartment、およびsubjectsごとに教師のリストを返すと仮定します。


    
        math
        physics
    
    
        political education
        english
    

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

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

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

findへのクロージャ述語により、最終的にscience部門の教師のみが存在するようになります。 XMLパスはsubjectタグで終了します。

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

5. 結論

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

記事の完全なソースコードについては、GitHub projectを確認してください。