Concrete Logo
Hamburger button

Testes de contrato de API

  • Blog
  • 14 de Fevereiro de 2018
Share

A crescente busca em garantir a qualidade da aplicação que está sendo desenvolvida, faz com que tenhamos a necessidade de aplicar diferentes tipos de testes em nossa aplicação e implementar cada teste em sua respectiva camada. E para poder identificar qual a camada que melhor se aplica ao teste, podemos utilizar a conhecida pirâmide de testes.

Neste post, iremos tratar de um tipo de teste voltado à aplicações com arquiteturas baseadas em serviços e microsserviços. Vamos falar de Teste de Contrato de API, mas fique tranquilo, não vem “textão” por aí, afinal, nosso objetivo é hands-on.

Apenas para contextualizar vou passar brevemente sobre a parte teórica antes de cairmos com a mão na massa.

API

  • API é um conjunto de rotinas e padrões de programação para acesso a um aplicativo de software ou plataforma baseado na Web;
  • A sigla API refere-se ao termo em inglês “Application Programming Interface”, que significa em tradução para o português “Interface de Programação de Aplicativos”.

TESTE DE API

  • Estão entre a camada de testes de UI e Unitários;
  • Podem ser automatizados em paralelo com o desenvolvimento da API;
  • Facilitam a validação de múltiplos cenários;
  • Garantem que a estrutura do JSON de retorno esteja correta.

PAYLOAD

  • É todo o conteúdo enviado por um meio de transporte; é o corpo da informação; é o que é útil de tudo o que está sendo transmitido;
  • Não possui um formato obrigatório. O fato de ser JSON é apenas circunstancial.

RESPONSE

  • É todo o conteúdo recebido por um meio de transporte; é o corpo da informação de retorno;

CONTRATO DE API

  • Tem como objetivo garantir que o conteúdo fornecido não tenha sido modificado, podemos dizer que tem a finalidade de validar se o contrato acordado foi ou não quebrado; deve validar se o schema permanece o mesmo garantindo assim a integridade dos dados na comunicação entre client/server;
  • É possível validar se os dados continuam do mesmo tipo, como os valores limites, a restrinção de valores recebidos, se a estrutura foi ou não modificada etc.

Como falei no início que seria mão na massa… bora codar!

Vamos utilizar o amado e odiado JavaScript, mas para isso temos que preparar o nosso ambiente. Vou me restringir ao ambiente macOS, caso esteja utilizando um sistema operacional diferente, dá uma “googlada” e veja como instalar as dependências em seu SO.

Agora, para dar aquele confere, veja se o Node foi instalado corretamente. No meu caso estou utilizando a versão 7.x.

Como a repetição é a melhor forma de aprender, não copie e cole os códigos abaixo, deixe a preguiça e escreva você mesmo o código.

Criamos um mock que consiste em informações sobre um filme, que vai retornar o seguinte objeto:

Basicamente precisamos criar dois arquivos, um chamado request.js e outro chamado schema.js.

request.js

schema.js

Conforme o código acima, temos as seguintes validações:

  • Joi.string().required() – String e Obrigatório;
  • Joi.number().integer().positive().required() – Inteiro, Positivo e Obrigatório;
  • Joi.string().valid(‘English’).required() – String, onde só vamos aceitar o valor ‘English’ e esse campo vai ser obrigatóio;
  • Joi.string().valid([‘movie’, ‘series’, ‘cartoon’]).required() – Essa opção é semelhante à mostrada acima, porém ao invés de apenas uma opção no valor, vamos informar uma lista de possíveis valores;
  • Joi.string().optional().allow(”, null) – Informamos que a propriedade é opcional e é permitido vazio;
  • Response: Joi.boolean().required() – Por fim, temos a opção boolean, na qual só vamos asceitar valores true ou false.

Agora que escrevemos os cenários e os contratos, vamos rodar…

Se tudo estiver certo, o resultado vai ser como esse abaixo:

E assim concluímos uma implementação inicial de testes de contrato de API. Fique à vontade para manipular o contrato e validar as opções não demonstradas neste post.

REFERÊNCIAS

Trabalha com QA e quer fazer parte do nosso time? Envie seu currículo para trabalheconosco@concrete.com.br.