As APIs (ou Interface de Programação de Aplicativos) são como pontes integradoras de softwares, representando um acordo entre duas partes interessadas, onde cada parte só pode se comunicar se seguir as regras deste acordo e enviar uma solicitação estruturada para a outra parte.

As APIs são responsáveis por desempenhar papel fundamental na comunicação entre as mais diferentes aplicações e, apesar de estarem tão presentes nos softwares, elas são invisíveis aos usuários.

Além de possibilitar a comunicação entre dois ou mais sistemas, as APIs têm papel essencial na criação de apps e facilitam a integração e extração de dados de outras aplicações.

Agora que sabemos o que são API’s, começamos a entender a importância delas junto às nossas aplicações, não é mesmo?

Por isso, podemos dizer que os testes de API são tão importantes como qualquer outro tipo de teste de aplicativos, pois, com estes testes conseguimos mapear as dependências das nossas aplicações com serviços terceiros e também nos certificar das trocas e comunicações entre os aplicativos, sistemas, banco de dados, etc.

Com os testes de APIs conseguimos também ter um retorno rápido sobre a funcionalidade do nosso software, permitindo respostas ágeis que auxiliam na correção e tomada de decisões.

Quando testamos a API, os testes criados por nós servem de documentação para quando precisarmos fazer futuras validações, além de que não é necessário esperar a parte visual do software ficar pronta para começarmos a validar as funcionalidades presentes naquele sistema.

Com isso, conseguimos ter um retorno rápido sobre os problemas encontrados, o que possibilita uma rápida correção ou implementação de melhorias — agilizando, inclusive lançamentos de novas versões do produto.

Além disso, como realizamos os testes antes, já nos certificamos que estes erros não chegarão aos clientes, fazendo com que o custo para correção de problemas e erros pontuais seja bem mais baixo do que quando o próprio cliente detecta o problema.

Os testes de APIs viabilizam agilidade no lançamento de novas versões e reduzem muito o custo de correção de problemas.

Testes de API: passo a passo

Entendendo a linguagem

Primeiramente, para testarmos uma API, o ideal é entendermos a sua linguagem, ou seja, entender como a comunicação funciona entre a API e um software. É aqui que entra a parte do acordo e contrato, onde cada parte precisa enviar as requisições de maneira estruturada.

Esta comunicação se baseia em “métodos” e “requisições”, onde os métodos indicam a ação a ser realizada no recurso ou função especificada. Já as requisições são de fato a solicitação que o cliente fará para ter acesso a determinado recurso ou função.

Aqui abaixo podemos ver os principais métodos e sua aplicação:

Na prática funciona da seguinte forma, por exemplo: eu tenho um sistema para venda de produtos e eu preciso cadastrar esses produtos no meu sistema.

Vamos imaginar que a URL do meu sistema seja https://meusistema.com e da minha API seja https://api.meusistema.com.

Nesse caso, para cadastrar um produto, eu preciso informar o método POST, passar as informações do produto no BODY, como descrição, valor e quantidade e realizar esta requisição na API para informar ao meu sistema de que quero cadastrar um novo produto, e assim por diante.

BODY

Se tudo ocorrer bem, a requisição retornará o código 201 Created informando que meu produto foi cadastrado corretamente e os dados serão exibidos para mim, da seguinte forma:

201 Created

Feito isso, agora eu quero consultar meu sistema e ver quais produtos eu já tenho adicionados. Para isso eu preciso informar o método GET e enviar a requisição para o meu sistema. Neste caso não é necessário preenchermos o BODY. Após o processamento da requisição, todos os produtos serão retornados para mim via API.

BODY { }

Se tudo ocorrer bem, a requisição retornará o código 200 OK e todos os produtos cadastrados serão exibidos.

Agora eu quero visualizar o produto que cadastrei recentemente. Aqui passaremos o método GET novamente, porém agora acrescentaremos o código do meu produto após o GET, para que somente este produto seja retornado.

GET na URL https://api.meusistema.com/produtos/{codigo_produto}

Nesse caso, a variável {codigo_produto} será substituída por 1, que é o código do produto que eu cadastrei. Ficando assim:

BODY { }

Se tudo ocorrer bem, a requisição retornará o código 200 OK e somente o produto de código 1 será exibido.

Depois que eu consultei meu produto, vi que acabei informando o valor errado, então, para corrigir este valor, eu usarei o método PATCH informando o código do meu produto e passando a informação que eu quero alterar, que neste caso é o valor.

PATCH na URL https://api.meusistema.com/produtos/{codigo_produto}.

Lembrando que o código do meu produto é 1, então trocarei {codigo_produto} por 1.

Com isso, minha requisição ficará assim:

BODY

Se tudo ocorrer bem, a requisição retornará o código 200 OK e o valor do produto de código 1 será atualizado de 1200 para 1300.

Ou, caso eu precise alterar mais de uma informação, como o valor e a quantidade do produto, devo utilizar o método PUT informando o código do meu produto e passando no BODY os campos que desejo alterar. Assim a requisição deverá ser enviada passando o novo valor e a nova quantidade do meu produto.

PUT na URL https://api.meusistema.com/produtos/{codigo_produto}

Lembrando que preciso alterar a variável {codigo_produto} por 1, que é o produto que desejo alterar. Desta forma, minha requisição ficará da seguinte forma:

BODY

Se tudo ocorrer bem, a requisição retornará o código 200 OK e o valor do produto de código 1 será atualizado de 1300 para 1500 e a quantidade será atualizada de 10 para 15 unidades.

Em outro caso, eu gostaria de excluir este produto porque vi que ele já havia sido adicionado em outro momento. Logo, precisarei usar o método DELETE e informar o código do produto, não sendo necessário preencher o BODY, sendo feito dessa forma:

DELETE na URL https://api.meusistema.com/produtos/{codigo_produto}

Novamente, irei substituir a variável {codigo_produto} por 1, que é o produto que quero deletar.

Ficando assim:

BODY { }

Se atentando à documentação

Após entendermos os métodos e as requisições, devemos nos atentar à documentação da API.

É ideal que sigamos uma documentação sobre todas as chamadas e funções implementadas na API a ser testada. A maioria das APIs possuem documentação e isso nos ajuda muito a seguir o trabalho de forma independente.

Existem algumas ferramentas para documentar uma API, como Swagger, Postman, API BluePrint, Apiary e Readme.

Escolhendo a ferramenta para os testes

O terceiro passo é a escolha da ferramenta para testar a API. Aqui usaremos a ferramenta para realizar nossas requisições e testes com base nos dados enviados (requisição) e dados recebidos (resposta).

Após cada requisição enviada, um código é retornado e, por mais simples que seja, ele pode nos dizer muita coisa, nos orientar no entendimento do resultado da requisição e avaliar se o teste falhou ou passou.

Estes códigos também fazem parte do contrato entre as duas aplicações e cada um deles tem um significado.

O padrão deve ser seguido e os códigos iniciam em 2, 3, 4 ou 5, como podemos ver abaixo:

Aqui abaixo podemos ver os códigos de retorno e respostas de requisição mais comuns:

Ainda falando sobre as ferramentas, aqui temos alguns exemplos delas: Postman, SoapUI, Karate DSL, REST Assured, Apache JMeter, Katalon e Assertible.

Cada pessoa tem preferência por uma ou outra ferramenta para os testes. Eu, por exemplo, gosto muito de usar o Postman quando preciso testar uma API pela facilidade de uso e também pela quantidade de funcionalidades que otimizam meus testes, como a execução de todos os testes de uma só vez ou importação de coleções.

Independentemente da ferramenta, posso afirmar que os testes de API são fundamentais para entendermos como nossas aplicações se comportam quando são integradas a outras.

Além disso, quando buscamos por tendências de testes de software, os testes de API compõem a lista de prioridades, dado que a maioria dos softwares e apps consomem APIs de parceiros ou terceiros, como é o caso dos apps da Uber e 99 (que consomem a API do Google Maps) ou a maioria dos e-commerces (que realizam a busca e cálculo do CEP fazendo uso da API Busca CEP dos Correios).

Por isso, acredito ser essencial dedicarmos mais esforços também a este tipo de teste que vem ganhando cada vez mais espaço e visibilidade. Conforme a evolução dos produtos digitais e o uso crescente das APIs, a necessidade de que elas sejam estáveis é cada vez maior.