Documentação completa sobre como executar os testes de resiliência e performance do cluster.
cd pytest
# Criar ambiente virtual
python3 -m venv .venv
source .venv/bin/activate # No Windows: .venv\Scripts\activate
# Instalar dependências
pip install -r requirements.txtMede o tempo que o cluster leva para recuperar de uma falha completa do nó primário.
# Via script helper
./scripts/test/run-crash-up.sh
# Ou diretamente com pytest
pytest pytest/tests/resilience/test_rto_primary_failure.py::TestRTOPrimaryFailure::test_primary_node_complete_failure -v -sMede o tempo de recuperação durante uma troca planejada de líder.
pytest pytest/tests/resilience/test_rto_planned_switchover.py -v -sAvalia a perda de dados durante uma falha do primário.
pytest pytest/tests/resilience/test_rpo_primary_failure.py -v -sResultados: Os resultados são salvos em pytest/outputs/resilience/ no formato JSONL.
Testes de performance em um único nó PostgreSQL sem cluster.
SELECT-only workload:
pytest pytest/tests/performance/test_baseline_single_node.py::TestPerformanceBaseline::test_baseline_select_only -v -sSimple-update workload:
pytest pytest/tests/performance/test_baseline_single_node.py::TestPerformanceBaseline::test_baseline_simple_update -v -sTPC-B-like workload:
pytest pytest/tests/performance/test_baseline_single_node.py::TestPerformanceBaseline::test_baseline_tpcb_like -v -sTestes de performance no cluster com balanceamento de carga pelo PgPool.
SELECT-only com balanceamento:
pytest pytest/tests/performance/test_cluster_with_pgpool.py::TestPerformanceCluster::test_cluster_select_only -v -sSimple-update workload:
pytest pytest/tests/performance/test_cluster_with_pgpool.py::TestPerformanceCluster::test_cluster_simple_update -v -sTPC-B-like workload:
pytest pytest/tests/performance/test_cluster_with_pgpool.py::TestPerformanceCluster::test_cluster_tpcb_like -v -sResultados: Os resultados são salvos em pytest/outputs/performance/ no formato JSONL.
Para resultados mais consistentes, os scripts podem limpar o cache do sistema entre execuções.
Baseline com múltiplas execuções:
sudo ./scripts/test/run-benchmark-baseline.shCluster com múltiplas execuções:
sudo ./scripts/test/run-benchmark-cluster.shpytest/outputs/
├── resilience/
│ ├── rto_primary_failure_YYYYMMDD_HHMMSS.jsonl
│ ├── rto_planned_switchover_YYYYMMDD_HHMMSS.jsonl
│ └── rpo_primary_failure_YYYYMMDD_HHMMSS.jsonl
│
└── performance/
├── baseline_select_only_YYYYMMDD_HHMMSS.jsonl
├── baseline_simple_update_YYYYMMDD_HHMMSS.jsonl
├── cluster_select_only_YYYYMMDD_HHMMSS.jsonl
└── cluster_simple_update_YYYYMMDD_HHMMSS.jsonl
- RTO: Tempo total de recuperação (em segundos)
- RPO: Número de transações perdidas
- Timestamps de cada fase do processo
- Status de saúde do cluster durante a recuperação
- TPS (Transactions Per Second): Taxa de transações por segundo
- Latência média: Tempo médio de resposta (ms)
- Latência p95/p99: Percentis de latência
- Estatísticas do pgbench
- Métricas de recursos (CPU, memória, I/O) via Docker Stats
Em breve será disponibilizado um guia completo de análise e visualização dos resultados dos testes.
- Verifique se o cluster está funcionando:
./scripts/health_checks/check_cluster_status.sh - Verifique os logs dos containers:
docker compose logs -f - Certifique-se de que as dependências Python estão instaladas
- Execute os testes com cache frio usando os scripts de automação
- Aumente o número de execuções nos scripts para melhor média
- Verifique recursos do sistema (CPU, memória, disco)
- Framework de Testes: Arquitetura e design dos testes
- Arquitetura: Estrutura do código de testes
- Casos de Uso: Exemplos práticos de cenários de teste