Pular para o conteúdo principal

📊 Relatórios e Cobertura

📋 Visão Geral

O projeto Selenium implementa um sistema abrangente de relatórios e monitoramento que fornece insights detalhados sobre a execução dos testes, cobertura de código, logs de execução e métricas de performance.

📈 Relatórios de Cobertura de Código

🎯 Configuração

O projeto utiliza JaCoCo (Java Code Coverage) para gerar relatórios detalhados de cobertura de código durante a execução dos testes.

📊 Tipos de Relatórios

  • HTML: Relatório visual interativo com navegação por arquivos
  • XML: Formato estruturado para integração com ferramentas CI/CD
  • CSV: Dados tabulares para análise em planilhas

🚀 Geração de Relatórios

# Via Makefile
make coverage

# Via Gradle
./gradlew jacocoTestReport

# Executar testes e gerar cobertura
./gradlew test jacocoTestReport

📁 Estrutura dos Relatórios

build/reports/
├── jacoco/ # Relatórios de cobertura
│ ├── test/ # Relatórios de teste
│ │ ├── html/ # Relatório HTML interativo
│ │ │ ├── index.html # Dashboard principal
│ │ │ ├── jacoco-resources/ # Assets estáticos
│ │ │ └── [pacotes].html # Cobertura por pacote
│ │ ├── jacocoTestReport.xml # Dados XML para CI/CD
│ │ └── jacocoTestReport.csv # Dados CSV
│ └── jacocoTestReport.xml # Relatório consolidado
└── tests/ # Relatórios de execução
├── test/ # Relatórios de teste
│ ├── index.html # Dashboard de testes
│ ├── classes/ # Resultados por classe
│ └── packages/ # Resultados por pacote
└── test-results/ # Resultados JUnit XML
└── TEST-*.xml # Arquivos XML individuais

📊 Relatórios de Execução

🎯 Configuração Automática

  • Localização: ./build/reports/tests/test/
  • Formato: HTML com navegação interativa
  • Trigger: Gerado automaticamente a cada execução de testes

📋 Características dos Relatórios

  • Dashboard Principal: Visão geral de todos os testes
  • Detalhamento por Classe: Resultados específicos de cada classe de teste
  • Detalhamento por Pacote: Agrupamento por pacotes Java
  • Timeline de Execução: Visualização temporal dos testes
  • Métricas de Performance: Tempo de execução por teste

🔧 Configuração Avançada

// build.gradle
test {
reports {
html.required = true // Relatório HTML
junitXml.required = true // Relatório JUnit XML
junitXml.outputPerTestCase = true // XML por teste
}

testLogging {
events 'passed', 'skipped', 'failed'
exceptionFormat = 'short'
showStandardStreams = false
showStackTraces = true
showCauses = true
}
}

📝 Logs e Debugging

⚙️ Configuração de Logging

<!-- src/test/resources/logback-test.xml -->
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

<logger name="com.qa.solar" level="DEBUG"/>
<logger name="org.openqa.selenium" level="INFO"/>

<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>

📊 Níveis de Log

  • DEBUG: Informações detalhadas para debugging
  • INFO: Informações gerais de execução
  • WARN: Avisos sobre situações anômalas
  • ERROR: Erros que não impedem a execução

🔍 Logs Específicos

  • Selenium: Logs de interação com o navegador
  • API Calls: Logs de requisições HTTP
  • Test Execution: Logs de execução dos testes
  • Data Generation: Logs de geração de dados

📊 Métricas e Análise

🎯 Métricas Disponíveis

  • Taxa de Sucesso: Percentual de testes que passam
  • Tempo de Execução: Duração média e total dos testes
  • Cobertura de Código: Percentual de código coberto por testes
  • Performance: Análise de tempo de resposta por teste
  • Retry Rate: Frequência de tentativas de retry

📈 Dashboard de Métricas

O relatório HTML inclui:

  • Resumo Executivo: Visão geral dos resultados
  • Gráficos de Performance: Visualização temporal
  • Análise de Cobertura: Detalhamento por classe e método
  • Análise de Falhas: Detalhamento de erros
  • Comparação Histórica: Tendências ao longo do tempo

🛠️ Configurações Avançadas

🔧 Personalização de Relatórios

// build.gradle
jacocoTestReport {
reports {
html.required = true
xml.required = true
csv.required = false
}

// Configurações de cobertura
afterEvaluate {
classDirectories.setFrom(files(classDirectories.files.collect {
fileTree(dir: it, exclude: [
'**/BaseTest.class',
'**/GenerateUsers.class',
'**/MockGenerateUsers.class'
])
}))
}
}

📊 Múltiplos Formatos

  • HTML: Relatório visual interativo
  • XML: Dados estruturados para integração
  • CSV: Dados tabulares para análise
  • Console: Output detalhado no terminal

🌐 Integração com CI/CD

# Exemplo para GitHub Actions
- name: Run Selenium tests
run: make test

- name: Generate coverage report
run: make coverage

- name: Upload test results
uses: actions/upload-artifact@v3
if: always()
with:
name: selenium-test-results
path: |
build/reports/tests/test/
build/reports/jacoco/test/html/

📋 Boas Práticas

🎯 Otimização de Relatórios

  • Exclusões: Excluir classes utilitárias da cobertura
  • Thresholds: Definir limites mínimos de cobertura
  • Cleanup: Implementar limpeza automática de relatórios antigos
  • Aggregation: Consolidar relatórios de múltiplos módulos

📊 Análise de Resultados

  • Revisar Falhas: Analisar logs e stack traces de falhas
  • Monitorar Performance: Acompanhar tendências de tempo de execução
  • Identificar Gaps: Corrigir lacunas na cobertura de código
  • Documentar Padrões: Registrar padrões de falha para melhorias

🔧 Configurações de Performance

// gradle.properties
org.gradle.parallel=true
org.gradle.caching=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m

📈 Métricas de Qualidade

  • Cobertura Mínima: 80% de cobertura de código
  • Tempo Máximo: 10 minutos para execução completa
  • Taxa de Sucesso: 95% de testes passando
  • Retry Rate: Máximo 5% de retry automático

🚀 Comandos Úteis

📊 Visualização de Relatórios

# Abrir relatório de cobertura no navegador
open build/reports/jacoco/test/html/index.html

# Abrir relatório de testes no navegador
open build/reports/tests/test/index.html

# Ver resumo no terminal
./gradlew test --console=plain

🔍 Debugging

# Executar com logs detalhados
./gradlew test --info --debug

# Executar teste específico
./gradlew test --tests "LoginTest.shouldLoginWithValidCredentials"

# Executar com relatório detalhado
./gradlew test --info --console=plain