É uma linha tênue entre escolher uma interface de programação de aplicativo (API) e decidir se você pode trabalhar com ela ou não. A maioria das APIs REST tem uma arquitetura genérica e encadeia um caminho de solicitação comum. Mas algumas APIs divergem do padrão. Conseqüentemente, eles se tornam difíceis de usar.
Portanto, antes de construir todo o seu software em uma API, você precisa realizar verificações de qualidade e garantir que está funcionando bem. Então, o que é teste de API e como você pode testar uma API?
O que é teste de API?
O teste de API envolve a avaliação inicial da funcionalidade, segurança, escalabilidade, velocidade de uma API e muito mais para ver se ela é ideal para o programa que deseja usá-la. Mas, superficialmente, pode envolver testes para ver se ele envia as respostas apropriadas quando você faz solicitações por meio de seus vários terminais.
Dependendo de sua estrutura, ao testar uma API, você fará solicitações (Get, Post, Update ou Delete) para seus endpoints relevantes. Existem muitas métricas para verificar durante o teste de API. Mas, em um nível iniciante, você deseja validar a integridade de uma API a partir de seu código de status e garantir que ela busque e aceite os dados corretos.
Para esse fim, como qualquer solicitação da web, uma API pode retornar o código de status 200, 400 ou 500 ou até mesmo outros.
A maioria das APIs usa respostas JSON para servir suas cargas úteis. Dependendo do objetivo, outros podem aceitar e responder com cargas úteis XML, multipartes ou HTML.
Como testar uma API usando Python e JavaScript
Embora existam muitas ferramentas de teste de API de interface gráfica do usuário (GUI) na Internet, você pode avaliar uma API de forma mais crítica com scripts escritos.
Uma API informa em sua documentação o tipo de solicitações que permite e fornece pontos de extremidade relevantes a elas. Portanto, você pode capturá-los e testá-los usando os métodos de solicitação apropriados.
Relacionado: O que é REST API e como você pode obter dados para seu aplicativo ou site?
Ao contrário da fase de produção real, o teste de API é bruto. Portanto, você não precisa de tanta especificidade quanto precisaria ao executar a API para produção. Embora existam diferentes tipos de teste de API, vamos nos concentrar mais nos testes de validação de resposta neste artigo.
Testaremos uma API de loja falsa neste tutorial usando a busca do JavaScript e a biblioteca de solicitações do Python . Enquanto fazemos isso, testaremos os endpoints para obter, postar, atualizar e excluir dados.
Como testar um endpoint Get API com JavaScript
Como você usaria na produção, você pode testar uma API em JavaScript usando Axios ou o método fetch .
Para obter o status de resposta da API usando fetch :
fetch('https://fakestoreapi.com/products', ).then(res =>{ console.log(res) })
A solicitação acima retorna um status 200 se for uma resposta válida. Depois de fazer uma solicitação bem-sucedida, você pode solicitar dados em tempo real da API.
Vamos obter os dados desta API:
fetch('https://fakestoreapi.com/products', ).then(res =>{ if (res.ok){ return res.json() } }).then(response=>{ console.log(response) }).catch(err => console.log(err))
A resposta ao código de busca acima é assim:
Para obter o preço de todos os produtos, por exemplo, você pode usar a função de mapa :
fetch('https://fakestoreapi.com/products', ).then(res =>{ if (res.ok){ return res.json() } }).then(response=>{ response.map(data =>{ console.log(data.price) }) // console.log(response) }).catch(err => console.log(err))
O acima registra a seguinte saída:
Testando um ponto de extremidade Get com Python
Conforme mencionado anteriormente, Python também usa a biblioteca de solicitações para acessar os dados de uma API.
Para verificar o status da resposta neste caso:
import requests data = requests.get('https://fakestoreapi.com/products') print(data.status_code)
O registro de dados como fizemos acima retorna um status correspondente. No entanto, são 200 neste caso.
Agora vamos obter os mesmos dados com Python que obtivemos ao usar JavaScript:
import requests data = requests.get('https://fakestoreapi.com/products') myData = data.json() print(myData)
O resultado do acima é parecido com este:
Você pode obter dados específicos usando o loop for .
Para obter preços de produtos, por exemplo:
import requests data = requests.get('https://fakestoreapi.com/products') myData = data.json() indexes = 0 for i in myData: goods = myData[indexes] indexes +=1 print(goods["price"])
Esta é a aparência da saída:
Testando um Post Endpoint com JavaScript
Depois de testar e ver se a solicitação Get funciona, dependendo do seu objetivo e do que a API oferece, você pode querer verificar se pode inserir dados nela também.
Ao contrário de como você faz uma solicitação Get , uma solicitação Post aceita uma carga útil. Além disso, você precisará especificar que é uma solicitação de postagem:
// Specify the payload let payload = { title: 'new product', price: 13.5, description: 'test description', image: '', category: 'electronic' } fetch('https://fakestoreapi.com/products', { method: "Post", headers:{ 'Content-Type': 'application/json' }, body: JSON.stringify(payload) //convert the payload to JSON } ).then(res =>{ if (res.ok){ console.log(res.status) return res.json() } }).then(response => { console.log(response) }).catch(err => console.log(err))
O código acima registra o código de status de resposta e as novas informações inseridas quando você o executa. Isso informa se sua solicitação foi concluída ou não. Normalmente, se o código de status for 200, sua API possui um endpoint válido que retorna a resposta apropriada.
Teste de pós-solicitação com Python
Você também pode testar um endpoint cargo de uma API usando Python requests.post . Como você fez ao usar a busca do JavaScript , você também precisa especificar a carga útil aqui:
import requests payload = { 'title': 'new product', 'price': 13.5, 'description': 'test description', 'image': '', 'category': 'electronic' } Posted = requests.post('https://fakestoreapi.com/products', data = payload ) print(Posted.status_code) print(Posted.json())
Como o JavaScript, o código Python acima também registra o código de status de resposta e os novos dados especificados na carga útil .
Testando os pontos de extremidade Put
Atualizar os dados da API exige o mesmo processo de postar e obtê-los nos dois idiomas.
Para fazer isso usando a busca de JavaScript , você só precisa substituir Post por Put :
// Specify the payload let payload = { title: 'new product', price: 13.5, description: 'test description', image: '', category: 'electronic' } fetch('https://fakestoreapi.com/products/19', { method: "Put", headers:{ 'Content-Type': 'application/json' }, body: JSON.stringify(payload) //convert the payload into JSON } ).then(res =>{ if (res.ok){ console.log(res.status) return res.json() } }).then(response => { console.log(response) }).catch(err => console.log(err))
Se você prestar atenção ao endpoint da API, verá que desta vez inclui o ID do produto. É assim que a API sabe quais dados você deseja atualizar neste caso.
No entanto, algumas APIs podem usar outros métodos para criar seus terminais. Portanto, esse não é um padrão.
Para testar a atualização de dados da API usando Python, você usa requests.put em vez disso:
import requests payload = { 'title': 'new product', 'price': 13.5, 'description': 'test description', 'image': '', 'category': 'electronic' } Posted = requests.put('https://fakestoreapi.com/products/19', data = payload ) print(Posted.status_code) print(Posted.json())
Os exemplos acima, se bem-sucedidos, inserem os novos dados na posição 19, conforme indicado pelo terminal API.
Testando a solicitação de exclusão
Excluir dados de uma API é tão fácil quanto fazer uma solicitação Get. Isso porque, ao contrário de Post e Put, você não precisa especificar nenhuma carga útil. Tudo que você precisa é excluir o endpoint.
Nossa API escolhida aqui usa o ID do produto para rastrear seus dados. Portanto, excluir um produto é fácil:
fetch('https://fakestoreapi.com/products/19', { method: "Delete", headers:{ 'Content-Type': 'application/json' } } ).then(res =>{ if (res.ok){ console.log(res.status) return res.json() } }).then(response => { console.log(response) }).catch(err => console.log(err))
Você só precisa de algumas linhas de código para conseguir o mesmo usando Python:
import requests Posted = requests.delete('https://fakestoreapi.com/products/19', ) print(Posted.status_code) print(Posted.json())
Ambos os exemplos acima registram o código de status de resposta e os dados pertencentes ao id consultado (19 neste caso).
Esses métodos de teste são genéricos?
Embora estejamos nos concentrando apenas em uma única API neste artigo, os métodos usados para testar os endpoints CRUD não são diferentes ao lidar com outras APIs. A única diferença, é claro, pode estar nas regras em torno de cada estrutura de API e nas diretrizes para solicitar dados. Depois de decifrá-los para uma API escolhida, você pode usar o método apropriado, conforme descrito aqui, para testar seus pontos de extremidade correspondentes.
Portanto, como toda API tem regras para se conectar a ela, durante o teste, algumas podem fornecer parâmetros adicionais para você incluir nos cabeçalhos de solicitação. Esses parâmetros geralmente incluem um token de acesso ou outros, conforme fornecido na documentação.