Перейти к основному содержимому

Гарантия REST с Groovy

· 4 мин. чтения

1. Обзор

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

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

Чтобы узнать о настройке, необходимой для использования REST-assured, ознакомьтесь с нашей предыдущей статьей .

2. API коллекции Groovy

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

2.1. Метод findAll _

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

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

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

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

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

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

2.2. переменная it _

Неявная переменная содержит текущее слово в цикле. Новая коллекция wordsWithSizeGreaterThanFour будет содержать слова buffalo и динозавр .

['buffalo', 'dinosaur']

Помимо findAll() , существуют и другие методы Groovy.

2.3. Итератор сбора _

Наконец, есть collect , он вызывает замыкание для каждого элемента в коллекции и возвращает новую коллекцию с результатами каждого. Давайте создадим новую коллекцию из размеров каждого элемента в коллекции слов :

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

Результат:

[3,7,3,8]

Мы используем sum , как следует из названия, чтобы сложить все элементы в коллекции. Мы можем суммировать элементы в коллекции размеров следующим образом:

def charCount = sizes.sum()

и результатом будет 21, количество символов во всех элементах в коллекции слов .

2.4. Максимальные /минимальные операторы

Операторы max/min интуитивно названы так, чтобы найти максимальное или минимальное число в коллекции:

def maximum = sizes.max()

Результат должен быть очевиден, 8.

2.5. Итератор поиска _

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

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

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

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

Предположим, у нас есть служба по адресу http://localhost:8080/teachers , которая возвращает список учителей по их идентификатору , отделу и предметам , которые преподаются, как показано ниже:

<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- преподавателей.teacher , чтобы получить список учителей по XML-атрибуту, отделу . Затем мы вызываем метод find в этом списке.

Наш предикат закрытия, чтобы найти , гарантирует, что в конечном итоге мы получим только учителей с научного факультета. Наш XML-путь заканчивается на теге subject .

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

5. Вывод

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

Полный исходный код статьи можно найти в нашем проекте на GitHub .