Garantia de REST com Groovy

Garantia de REST com Groovy

1. Visão geral

Neste tutorial, daremos uma olhada no uso da biblioteca REST garantida com Groovy.

Como a garantia REST usa o Groovy, nós temos a oportunidade de usar a sintaxe bruta do Groovy para criar casos de teste mais poderosos. É aqui que a estrutura realmente ganha vida.

Para a configuração necessária para usar REST garantido, verifique nossoprevious article.

2. API de coleção do Groovy

Vamos começar dando uma olhada rápida em alguns conceitos básicos do Groovy - com alguns exemplos simples para nos equipar com o que precisamos.

2.1. O métodofindAll

Neste exemplo, vamos apenas prestar atenção amethods,closurese a variável implícitait. Vamos primeiro criar uma coleção de palavras do Groovy:

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

Vamos agora criar outra coleção com as palavras acima com comprimentos que excedem quatro letras:

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

Aqui,findAll() é um método aplicado à coleção comclosure aplicado ao método. Omethod define qual lógica aplicar à coleção e oclosure fornece ao método um predicado para personalizar a lógica.

Estamos dizendo ao Groovy para percorrer a coleção e encontrar todas as palavras cujo comprimento seja maior que quatro e retornar o resultado em uma nova coleção.

2.2. A variávelit

A variável implícitait mantém a palavra atual no loop. A nova coleçãowordsWithSizeGreaterThanFour conterá as palavrasbuffaloedinosaur.

['buffalo', 'dinosaur']

Além defindAll(), existem outros métodos Groovy.

2.3. O iteradorcollect

Por fim, hácollect, ele chama o encerramento em cada item da coleção e retorna uma nova coleção com os resultados de cada um. Vamos criar uma nova coleção com os tamanhos de cada item na coleçãowords:

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

O resultado:

[3,7,3,8]

Usamossum, como o nome sugere, para somar todos os elementos da coleção. Podemos resumir os itens da coleçãosizes assim:

def charCount = sizes.sum()

e o resultado será 21, a contagem de caracteres de todos os itens da coleçãowords.

2.4. Os operadoresmax/min

Os operadoresmax/min são nomeados intuitivamente para encontrar o número máximo ou mínimo em uma coleção:

def maximum = sizes.max()

O resultado deve ser óbvio, 8.

2.5. O iteradorfind

Usamosfind para pesquisar apenas um valor de coleção que corresponda ao predicado de fechamento.

def greaterThanSeven=sizes.find{it>7}

O resultado, 8, a primeira ocorrência do item de coleção que atende ao predicado.

3. Validar JSON com Groovy

Se tivermos um serviço emhttp://localhost:8080/odds, ele retornará uma lista de probabilidades de nossas partidas de futebol favoritas, como esta:

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

E se quisermos verificar se as probabilidades com status maior que 1 têm preços1.20e 5.25, então fazemos o seguinte:

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

O que está acontecendo aqui é isso; usamos a sintaxe do Groovy para carregar a matriz JSON na chaveodds. Como possui mais de um item, obtemos uma coleção Groovy. Em seguida, invocamos o métodofindAll nesta coleção.

O predicado de fechamento informa ao Groovy para criar outra coleção com objetos JSON em que o status é maior que zero.

Terminamos nosso caminho comprice, que diz ao groovy para criar outra lista de apenas preços das probabilidades em nossa lista anterior de objetos JSON. Em seguida, aplicamos o matcher HamcresthasItems a esta lista.

4. Validar XML com Groovy

Vamos supor que temos um serviço emhttp://localhost:8080/teachers, que retorna uma lista de professores por seusid,departmentesubjects ensinados conforme abaixo:


    
        math
        physics
    
    
        political education
        english
    

Agora podemos verificar que o professor de ciências retornado na resposta ensina matemática e física:

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

Usamos o caminho XMLteachers.teacher para obter uma lista de professores pelo atributo XMLdepartment. Em seguida, chamamos o métodofind nesta lista.

Nosso predicado de fechamento parafind garante que acabaremos com apenas professores do departamentoscience. Nosso caminho XML termina na tagsubject.

Como há mais de um assunto, obteremos uma lista que validamos com o matcherhasItems Hamcrest.

5. Conclusão

Neste artigo, vimos como podemos usar a biblioteca garantida por REST com a linguagem Groovy.

Para o código-fonte completo do artigo, verifique nossoGitHub project.