13. Teste de bancos de dados SQL e NoSQL


Teste de Bancos de Dados SQL e NoSQL: Garantindo a Integridade e a Coerência dos Dados

O banco de dados é o coração de muitas aplicações, armazenando e gerenciando as informações críticas que sustentam os negócios. Para o profissional de QA, testar a integração da aplicação com o banco de dados e assegurar integridade, consistência e correção dos dados é essencial.

Neste módulo, vamos aprofundar técnicas para testar bancos de dados relacionais (SQL) e não relacionais (NoSQL), explorando operações CRUD, consultas, operadores e boas práticas.


Teste de Bancos de Dados SQL: O Mundo Relacional

Bancos SQL, como MySQL, PostgreSQL, SQL Server, Oracle, trabalham com tabelas, linhas e colunas seguindo um esquema rígido.

Os testes nesse contexto focam em:

  • Validação de Dados: conferir se dados gravados e recuperados estão corretos.
  • Integridade: verificar chaves primárias, estrangeiras, unicidade e não nulidade.
  • Performance de Consultas: avaliar tempo de resposta sob diferentes cargas.
  • Conformidade de Esquema: garantir que tabelas, colunas e tipos de dados seguem o modelo.
  • Transações ACID: validar atomicidade, consistência, isolamento e durabilidade.
  • Testes Diretos vs. UI: enquanto a UI testa indiretamente, o teste direto do banco assegura maior granularidade.

Operações e Consultas Importantes

O QA deve dominar SQL para validar diferentes operações:

  • CRUD:
    • INSERT → inserir registros válidos e inválidos.
    • SELECT → verificar filtros, joins e integridade de dados.
    • UPDATE → confirmar alterações refletidas corretamente.
    • DELETE → garantir exclusão adequada de registros.
  • Operadores: comparação (=, !=, >, <), lógicos (AND, OR, NOT) e outros (IN, BETWEEN, LIKE).
  • Junções (JOINs): INNER, LEFT, RIGHT, FULL.
  • Wildcards: _ (um caractere), % (múltiplos caracteres).
  • Agregações: COUNT(), SUM(), AVG(), MAX(), MIN().
  • Stored Procedures e Triggers: validar regras de negócio encapsuladas no banco.

Teste de Bancos de Dados NoSQL: O Mundo Flexível

Bancos NoSQL (MongoDB, Cassandra, Redis, DynamoDB) são projetados para alta escala e flexibilidade de esquema.

Pontos-chave de teste incluem:

  • Flexibilidade de Estrutura: validar diferentes formatos de documentos na mesma coleção.
  • Consistência Eventual: checar impactos de modelos de consistência na leitura.
  • Particionamento e Sharding: garantir distribuição correta de dados.
  • Performance em Escala: medir desempenho sob grandes volumes.
  • APIs Específicas: cada NoSQL tem sua própria linguagem de consulta.

Trabalhando com JSON e Consultas

Muitos bancos NoSQL usam JSON ou BSON. Testes incluem:

  • Estrutura: checar campos, tipos de dados e hierarquias.
  • Conteúdo: validar valores, arrays e objetos aninhados.
  • Consultas:
    • MongoDB (MQL): operadores $eq, $gt, $lt, $in, $regex, $or.
    • Cassandra (CQL): queries baseadas em chaves de partição e clustering.
    • Redis (Chave-Valor): comandos GET, SET, HGETALL, LPUSH.
  • Índices: verificar otimização de consultas por índices criados.

Ferramentas e Abordagens

  • Gerenciamento: DBeaver, DataGrip, pgAdmin, MongoDB Compass, SQL Developer.
  • APIs Automatizadas: validar persistência após operações (ex.: POST cria usuário → SELECT confirma inserção).
  • Testes de Integração: usar drivers (psycopg2, mongoose) para executar comandos diretos.
  • Data Masking/Geração: usar dados realistas sem expor informações sensíveis.
  • Testcontainers: rodar bancos em containers descartáveis para testes isolados e consistentes.

Atividades Práticas

  1. SQL:
    • Inserir, atualizar e excluir registros.
    • Criar consultas com JOINs, operadores e wildcards.
    • Validar integridade após cada operação.
  2. NoSQL:
    • Inserir e consultar documentos JSON.
    • Usar operadores específicos (ex.: $in, $gt no MongoDB).
    • Validar estrutura e conteúdo retornado.
  3. Relatório:
    • Documentar queries, resultados esperados vs. obtidos.
    • Registrar inconsistências ou bugs encontrados.
    • Integrar testes de API com consultas diretas ao banco.

💡 Reflexão final:
Qual o maior desafio de testar bancos de dados NoSQL em comparação com os SQL tradicionais?