REST-assuré avec Groovy

REST-assuré avec Groovy

1. Vue d'ensemble

Dans ce didacticiel, nous allons examiner l’utilisation de la bibliothèque assurée par REST avec Groovy.

Étant donné que REST-assuré utilise Groovy sous le capot, nous avons la possibilité d'utiliser la syntaxe brute Groovy pour créer des scénarios de test plus puissants. C’est là que le cadre prend vraiment vie.

Pour la configuration nécessaire pour utiliser REST-assuré, consultez nosprevious article.

2. API Groovy’s Collection

Commençons par jeter un rapide coup d'œil à quelques concepts de base de Groovy - avec quelques exemples simples pour nous équiper de ce dont nous avons besoin.

2.1. La méthodefindAll

Dans cet exemple, nous allons simplement prêter attention àmethods,closures et à la variable impliciteit. Commençons par créer une collection de mots Groovy:

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

Créons maintenant une autre collection à partir de ce qui précède avec des mots dont la longueur dépasse quatre lettres:

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

Ici,findAll() est une méthode appliquée à la collection avec unclosure appliqué à la méthode. Lemethod définit la logique à appliquer à la collection et leclosure donne à la méthode un prédicat pour personnaliser la logique.

Nous demandons à Groovy de parcourir la collection et de trouver tous les mots dont la longueur est supérieure à quatre et de renvoyer le résultat dans une nouvelle collection.

2.2. La variableit

La variable impliciteit contient le mot courant dans la boucle. La nouvelle collectionwordsWithSizeGreaterThanFour contiendra les motsbuffalo etdinosaur.

['buffalo', 'dinosaur']

En dehors defindAll(), il existe d'autres méthodes Groovy.

2.3. L'itérateurcollect

Enfin, il y acollect, il appelle la fermeture sur chaque élément de la collection et renvoie une nouvelle collection avec les résultats de chacun. Créons une nouvelle collection à partir des tailles de chaque élément de la collectionwords:

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

Le résultat:

[3,7,3,8]

Nous utilisonssum, comme son nom l'indique, pour additionner tous les éléments de la collection. Nous pouvons résumer les éléments de la collectionsizes comme ceci:

def charCount = sizes.sum()

et le résultat sera 21, le nombre de caractères de tous les éléments de la collectionwords.

2.4. Les opérateursmax/min

Les opérateursmax/min sont nommés intuitivement pour trouver le nombre maximum ou minimum dans une collection:

def maximum = sizes.max()

Le résultat devrait être évident, 8.

2.5. L'itérateurfind

Nous utilisonsfind pour rechercher une seule valeur de collection correspondant au prédicat de fermeture.

def greaterThanSeven=sizes.find{it>7}

Le résultat, 8, est la première occurrence de l'élément de collection qui correspond au prédicat.

3. Validez JSON avec Groovy

Si nous avons un service àhttp://localhost:8080/odds, cela renvoie une liste des cotes de nos matchs de football préférés, comme ceci:

{
    "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"
    }]
}

Et si nous voulons vérifier que les cotes avec un statut supérieur à 1 ont des prix1.20 et 5.25, alors nous faisons ceci:

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

Voici ce qui se passe ici; nous utilisons la syntaxe Groovy pour charger le tableau JSON sous la cléodds. Puisqu'il a plus d'un article, nous obtenons une collection Groovy. Nous invoquons ensuite la méthodefindAll sur cette collection.

Le prédicat de fermeture indique à Groovy de créer une autre collection avec des objets JSON dont le statut est supérieur à zéro.

Nous terminons notre chemin avecprice qui dit à groovy de créer une autre liste des seuls prix des cotes dans notre précédente liste d'objets JSON. Nous appliquons ensuite le matcher Hamcrest dehasItems à cette liste.

4. Valider XML avec Groovy

Supposons que nous ayons un service àhttp://localhost:8080/teachers, qui renvoie une liste d'enseignants par leursid,department etsubjects enseignés comme ci-dessous:


    
        math
        physics
    
    
        political education
        english
    

Nous pouvons maintenant vérifier que le professeur de sciences renvoyé dans la réponse enseigne les mathématiques et la physique:

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

Nous avons utilisé le chemin XMLteachers.teacher pour obtenir une liste d'enseignants par l'attribut XML,department. Nous appelons ensuite la méthodefind sur cette liste.

Notre prédicat de fermeture àfind garantit que nous nous retrouvons avec uniquement des enseignants du départementscience. Notre chemin XML se termine à la balisesubject.

Puisqu'il y a plus d'un sujet, nous obtiendrons une liste que nous validons avec le matcher HamcresthasItems.

5. Conclusion

Dans cet article, nous avons vu comment nous pouvons utiliser la bibliothèque assurée par REST avec le langage Groovy.

Pour le code source complet de l'article, consultez nosGitHub project.