Os testes de API tornaram-se uma parte crucial do desenvolvimento de software. À medida que o mundo se inclina mais para microserviços e sistemas interconectados, garantir que as APIs sejam robustas e confiáveis é fundamental. Python, com sua simplicidade e suporte extenso de bibliotecas, emergiu como uma linguagem preferida para testes de API. Neste post, exploraremos tudo o que você precisa saber sobre testes de API com Python. Além disso, mostraremos como começar com o Apidog gratuitamente.
O que é teste de API?
Antes de mergulhar nos detalhes dos testes de API em Python, vamos entender o que envolve o teste de API. Uma Interface de Programação de Aplicações (API) é um conjunto de regras e protocolos para construir e interagir com aplicações de software. O teste de API envolve verificar se essas interações ocorrem conforme o esperado. Ele inclui o envio de requisições para vários endpoints e a validação das respostas em relação aos resultados esperados.
Por que Python para testes de API?
Você pode se perguntar: "Por que Python?" Bem, Python é conhecido por sua simplicidade e legibilidade, o que o torna uma escolha fantástica para scripting de testes. Além disso, Python possui um rico ecossistema de bibliotecas e ferramentas voltadas para testes de API. Seja você um desenvolvedor experiente ou um iniciante, Python oferece uma curva de aprendizado suave e capacidades poderosas.

Começando com testes de API em Python
Pronto para mergulhar nos testes de API em Python? Vamos começar com o básico.
Configurando seu Ambiente
Primeiro, você precisará configurar seu ambiente Python. Se ainda não o fez, baixe e instale o Python no site oficial. Uma vez instalado, verifique a instalação executando:
python --version
Você também precisará instalar algumas bibliotecas essenciais. Abra seu terminal e execute:
pip install requests pytest
Compreendendo Métodos HTTP
As APIs se comunicam via métodos HTTP. Os mais comuns incluem:
- GET: Recuperar dados do servidor.
- POST: Enviar dados para o servidor para criar um recurso.
- PUT: Atualizar um recurso existente no servidor.
- DELETE: Remover um recurso do servidor.
Compreender esses métodos é crucial para testes de API eficazes.
Seu primeiro teste de API com Python
Vamos escrever nosso primeiro teste de API usando a biblioteca requests
.
import requests
def test_get_request():
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
assert response.status_code == 200
assert response.json()['id'] == 1
if __name__ == '__main__':
test_get_request()
print("Teste Aprovado!")
Este script simples envia uma requisição GET para uma API de amostra e verifica se o status da resposta é 200 e se o ID do post retornado é 1.
Testes de API Avançados com Pytest
Embora scripts simples sejam ótimos para começar, aplicações do mundo real requerem frameworks de teste mais robustos. É aqui que o pytest
entra. pytest
é um poderoso framework de teste que facilita a escrita de suítes de testes escaláveis.
Instalando e Configurando o Pytest
Instale o pytest
usando pip:
pip install pytest
Escrevendo Seu Primeiro Teste com Pytest
Aqui está como você pode integrar o pytest
em seus testes de API:
import requests
import pytest
def test_get_request():
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
assert response.status_code == 200
assert response.json()['id'] == 1
if __name__ == '__main__':
pytest.main()
Para rodar seus testes, basta executar:
pytest
Organizando Testes com Fixtures
Fixtures no pytest
são uma maneira de configurar algum contexto antes de executar testes. Elas ajudam a evitar código repetitivo e tornam os testes mais limpos.
import requests
import pytest
@pytest.fixture
def base_url():
return 'https://jsonplaceholder.typicode.com'
def test_get_request(base_url):
response = requests.get(f'{base_url}/posts/1')
assert response.status_code == 200
assert response.json()['id'] == 1
Testando Diferentes Métodos HTTP
Vamos aprofundar nos testes de vários métodos HTTP. Testar diferentes métodos garante que sua API lida corretamente com vários tipos de requisições.
Testando Requisições POST
Uma requisição POST é usada para criar um novo recurso. Veja como você pode testá-la:
def test_post_request(base_url):
payload = {
"title": "foo",
"body": "bar",
"userId": 1
}
response = requests.post(f'{base_url}/posts', json=payload)
assert response.status_code == 201
assert response.json()['title'] == "foo"
Testando Requisições PUT
Uma requisição PUT atualiza um recurso existente. Vamos ver um exemplo:
def test_put_request(base_url):
payload = {
"id": 1,
"title": "foo atualizado",
"body": "bar atualizado",
"userId": 1
}
response = requests.put(f'{base_url}/posts/1', json=payload)
assert response.status_code == 200
assert response.json()['title'] == "foo atualizado"
Testando Requisições DELETE
Finalmente, uma requisição DELETE remove um recurso:
def test_delete_request(base_url):
response = requests.delete(f'{base_url}/posts/1')
assert response.status_code == 200
Tratamento de Autenticação em Testes de API
Muitas APIs requerem autenticação. Esta seção abordará como lidar com diferentes métodos de autenticação.
Autenticação Básica
A autenticação básica requer um nome de usuário e uma senha codificados no cabeçalho da requisição.
def test_basic_auth():
response = requests.get('https://api.example.com/secure-endpoint', auth=('user', 'pass'))
assert response.status_code == 200
Autenticação Baseada em Token
A autenticação baseada em token usa um token, tipicamente no cabeçalho, para autenticar requisições.
def test_token_auth():
token = 'seu_token_aqui'
headers = {'Authorization': f'Bearer {token}'}
response = requests.get('https://api.example.com/secure-endpoint', headers=headers)
assert response.status_code == 200
Tratamento de Erros em Testes de API
Tratar erros de forma elegante é crucial em testes de API. Isso garante que sua API responda corretamente a requisições inválidas.
Testando por Erros 404
Um erro 404 indica que o recurso solicitado não foi encontrado.
def test_404_error(base_url):
response = requests.get(f'{base_url}/posts/999999')
assert response.status_code == 404
Testando por Erros 400
Um erro 400 indica uma requisição ruim, muitas vezes devido a dados de entrada inválidos.
def test_400_error(base_url):
response = requests.post(f'{base_url}/posts', json={})
assert response.status_code == 400
Automatizando Testes de API
Automatizar seus testes de API pode economizar tempo e garantir consistência. Você pode configurar pipelines de Integração Contínua (CI) para rodar seus testes automaticamente.
Usando GitHub Actions para CI
GitHub Actions é uma poderosa ferramenta de CI/CD. Aqui está uma configuração simples para rodar seus testes pytest
:
Crie um arquivo .github/workflows/python-app.yml
com o seguinte conteúdo:
name: Aplicação Python
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Configurar Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Instalar dependências
run: |
python -m pip install --upgrade pip
pip install pytest requests
- name: Rodar testes
run: |
pytest
Esta configuração irá rodar seus testes toda vez que você fizer um push de código para seu repositório.
Ferramentas e Bibliotecas para Testes de API
Várias ferramentas e bibliotecas podem tornar seu processo de teste de API mais eficiente. Aqui estão algumas populares:
Apidog
Apidog é uma ferramenta abrangente para desenvolvimento e teste de APIs que fornece uma plataforma colaborativa para documentação de API, testes e depuração. Ele se integra perfeitamente com várias etapas do ciclo de vida da API, tornando-se uma ferramenta inestimável para desenvolvedores.
Postman
Postman é uma poderosa ferramenta de teste de API com uma interface amigável. Você pode criar, gerenciar e automatizar testes usando o Postman.
Requests
A biblioteca requests
em Python é perfeita para fazer requisições HTTP e lidar com respostas.
Pytest
pytest
é um robusto framework de teste que simplifica a escrita e execução de testes.
Responses
A biblioteca responses
permite que você simule respostas de API para fins de teste.
Locust
Locust é uma ferramenta de teste de desempenho que ajuda a identificar problemas de desempenho em suas APIs.
Integrando Apidog para Testes de API sem costura
Lembre-se da nossa menção ao Apidog no início? Vamos dar uma olhada mais de perto em como essa ferramenta pode simplificar seu processo de teste de API.
Por que Apidog?
Apidog é uma plataforma de API tudo-em-um que fornece ferramentas para projetar, testar e documentar APIs. É projetado para agilizar todo o ciclo de desenvolvimento de API, facilitando para os desenvolvedores criar APIs confiáveis e bem documentadas.
Recursos Principais do Apidog
- Design de API: Crie e gerencie suas especificações de API com uma interface intuitiva.
- Teste de API: Crie e execute facilmente testes automatizados para suas APIs.
- Documentação de API: Gere e mantenha documentação abrangente de API.
- Colaboração: Trabalhe de forma colaborativa com sua equipe em projetos de API.
Como enviar uma requisição de API em Python usando Apidog
- Abra o Apidog e clique no botão "Nova Requisição" para criar uma nova requisição.

2. Selecione "GET" como o método da requisição.

3. Digite a URL do endpoint da API

Então clique no botão “Enviar” para enviar a requisição para a API.

Como você pode ver, o Apidog mostra a URL, parâmetros, cabeçalhos e corpo da requisição, e o status, cabeçalhos e corpo da resposta. Você também pode ver o tempo de resposta, tamanho e formato da requisição e resposta, e compará-los com diferentes APIs da web.
Como fazer testes de automação em Python usando Apidog
Aqui está um guia passo a passo sobre como automatizar testes de API usando Apidog:
Abra seu Projeto Apidog e mude para a interface de teste

Projete Seus Cenários de Teste: Você pode projetar seus cenários de teste no Apidog.

Execute Seus Testes: Você pode executar seus testes no Apidog.

Analise os Resultados dos Testes e Otimize: Após executar seus testes, você pode analisar os resultados dos testes e otimizar seus testes de acordo.

Lembre-se, o Apidog é um kit de ferramentas tudo-em-um para desenvolvimento de API. Toda a equipe pode trabalhar nisso junta para produzir APIs de maneira eficiente e conveniente. Cada papel na equipe pode usá-lo para resolver seus próprios problemas.
Melhores Práticas para Testes de API
Para concluir, aqui estão algumas melhores práticas para testes de API:
Use Nomes de Teste Claros e Descritivos
Seus nomes de teste devem descrever claramente o que estão testando. Isso torna mais fácil entender o que deu errado quando um teste falha.
Teste Cenários Positivos e Negativos
Certifique-se de testar tanto entradas válidas quanto inválidas para cobrir todos os cenários possíveis.
Simule Serviços Externos
Ao testar APIs que dependem de serviços externos, utilize simulações para simular essas dependências. Isso garante que seus testes sejam confiáveis e não falhem devido a problemas com serviços externos.
Mantenha Código Limpo e Organizado
Mantenha seu código de teste limpo e organizado. Use fixtures, funções auxiliares e uma estrutura adequada para manter a legibilidade e a gerenciabilidade.
Conclusão
Testar APIs com Python é poderoso e direto. Com ferramentas como requests
e pytest
, você pode escrever testes abrangentes que garantem que suas APIs sejam robustas e confiáveis. Ao seguir as melhores práticas e utilizar a automação, você pode agilizar seu processo de testes e entregar software de alta qualidade.
Boas validações!