REST-гарантировано с Groovy

ОТДЫХ-уверен с Groovy

1. обзор

В этом руководстве мы рассмотрим использование библиотеки с гарантированным REST в Groovy.

Так как REST-гарантированный использует Groovy внутри, у нас фактически есть возможность использовать сырой синтаксис Groovy для создания более мощных тестовых случаев. Это где рамки действительно оживают.

Для настройки, необходимой для использования REST-гарантированного, ознакомьтесь с нашимprevious article.

2. Groovy’s Collection API

Давайте начнем с краткого обзора некоторых основных концепций Groovy - с нескольких простых примеров, которые помогут нам получить именно то, что нам нужно.

2.1. МетодfindAll

В этом примере мы просто обратим внимание наmethods,closures и неявную переменнуюit. Давайте сначала создадим Groovy-набор слов:

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

Давайте теперь создадим другую коллекцию из вышеперечисленных слов, длина которых превышает четыре буквы:

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

ЗдесьfindAll() - это метод, применяемый к коллекции с применениемclosure к методу. method определяет, какую логику применять к коллекции, аclosure дает методу предикат для настройки логики.

Мы говорим Groovy перебрать коллекцию в цикле, найти все слова, длина которых больше четырех, и вернуть результат в новую коллекцию.

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 для поиска только одного значения коллекции, соответствующего предикату закрытия.

def greaterThanSeven=sizes.find{it>7}

Результат 8 - первое вхождение элемента коллекции, который соответствует предикату.

3. Проверить JSON с помощью Groovy

Если у нас есть служба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 для загрузки массива JSON под ключомodds. Поскольку в нем более одного элемента, мы получаем коллекцию Groovy. Затем мы вызываем методfindAll для этой коллекции.

Предикат закрытия сообщает Groovy о создании еще одной коллекции с объектами JSON, состояние которых больше нуля.

Мы заканчиваем наш путьprice, который сообщает Groovy создать еще один список только цен коэффициентов в нашем предыдущем списке объектов JSON. Затем мы применяем к этому списку сопоставитель HamcresthasItems.

4. Проверка XML с помощью Groovy

Предположим, у нас есть служба вhttp://localhost:8080/teachers, которая возвращает список учителей с разбивкой поid,department и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.

Поскольку существует более одной темы, мы получим список, который мы проверим с помощью сопоставителяhasItems Hamcrest.

5. Заключение

В этой статье мы увидели, как мы можем использовать библиотеку с гарантированным REST с языком Groovy.

Полный исходный код статьи можно найти вGitHub project.