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 .