Pular para o conteĆŗdo principal

šŸ“‚ Projeto

šŸ”§ Configuração e Execução​

šŸ“‹ PrĆ©-requisitos​

āš ļø Importante: Certifique-se de que as dependĆŖncias foram instaladas no projeto raiz "qa-solar" e que o comando yarn dev foi executado antes de iniciar os testes.

Requisitos do Sistema:

  • Java 17+: JDK necessĆ”rio para execução
  • Gradle 8.8: Sistema de build (incluĆ­do no wrapper)
  • Chrome/Chromium: Navegador para execução dos testes

šŸš€ Comandos DisponĆ­veis​

Configuração Inicial​

# Tornar gradlew executƔvel (Linux/Mac)
chmod +x gradlew

# Verificar instalação do Java
java -version

Execução de Testes​

Via Makefile (Recomendado)

# Executar todos os testes
make test

# Buildar o projeto
make build

# Gerar relatório de cobertura
make coverage

# Limpar o projeto
make clean

# Ver ajuda
make help

Via Gradle Wrapper

# Executar todos os testes
./gradlew test

# Executar testes com relatório HTML
./gradlew test --info

# Gerar relatório de cobertura
./gradlew jacocoTestReport

# Limpar build
./gradlew clean

# Build completo
./gradlew build

šŸ“‚ Estrutura do Projeto​

tests/selenium/
ā”œā”€ā”€ src/
│ ā”œā”€ā”€ main/java/com/qa/solar/ # Classes utilitĆ”rias
│ │ ā”œā”€ā”€ BaseTest.java # Classe base para testes
│ │ ā”œā”€ā”€ Login.java # UtilitĆ”rio de login via API
│ │ ā”œā”€ā”€ GenerateValidCPF.java # Gerador de CPF vĆ”lido
│ │ ā”œā”€ā”€ GenerateUsers.java # Geração de usuĆ”rios
│ │ └── MockGenerateUsers.java # Mock de criação de usuĆ”rios
│ └── test/java/com/qa/solar/ # Classes de teste
│ ā”œā”€ā”€ LoginTest.java # Testes de autenticação
│ ā”œā”€ā”€ RegisterTest.java # Testes de cadastro
│ ā”œā”€ā”€ Profile.java # Testes de perfil
│ ā”œā”€ā”€ ListUsers.java # Testes de listagem
│ └── RecoverPassword.java # Testes de recuperação
ā”œā”€ā”€ src/test/resources/ # Recursos de teste
│ ā”œā”€ā”€ logback.xml # Configuração de logging
│ └── logback-test.xml # Configuração de logging para testes
ā”œā”€ā”€ build.gradle # Configuração do Gradle
ā”œā”€ā”€ gradle.properties # Propriedades do Gradle
ā”œā”€ā”€ settings.gradle # Configuração do projeto
ā”œā”€ā”€ gradlew # Gradle wrapper (Unix)
ā”œā”€ā”€ gradlew.bat # Gradle wrapper (Windows)
ā”œā”€ā”€ Makefile # Comandos simplificados
ā”œā”€ā”€ package.json # Metadados do projeto
└── .env # VariĆ”veis de ambiente (criar)

āš™ļø ConfiguraƧƵes AvanƧadas​

šŸ”§ Configuração do Gradle​

O projeto utiliza configuraƧƵes otimizadas para performance e confiabilidade:

// Principais configuraƧƵes
plugins {
id 'java'
id 'jacoco' // Relatórios de cobertura
}

// DependĆŖncias principais
dependencies {
implementation "org.seleniumhq.selenium:selenium-java:4.35.0"
implementation "io.github.bonigarcia:webdrivermanager:5.7.0"
implementation "org.junit.jupiter:junit-jupiter-api:5.10.2"
implementation "com.github.javafaker:javafaker:1.0.2"
implementation "io.github.cdimascio:dotenv-java:3.2.0"
implementation "com.google.code.gson:gson:2.10.1"
}

// Configuração de testes
test {
maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1
forkEvery = 0

reports {
html.required = true
junitXml.required = true
}

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

🌐 VariĆ”veis de Ambiente​

Crie um arquivo .env na raiz do projeto:

# URLs de configuração
SELENIUM_BASE_URL=http://localhost:8181 # URL da aplicação frontend
SELENIUM_API_BASE_URL=http://localhost:3001 # URL da API backend

# ConfiguraƧƵes do navegador
HEADLESS=false # Executar em modo headless

šŸ”§ Configuração do BaseTest​

A classe base fornece funcionalidades comuns:

public abstract class BaseTest {
protected WebDriver driver;

// Configuração do driver
protected WebDriver setUp() {
WebDriverManager.chromedriver().setup();
ChromeOptions options = new ChromeOptions();

boolean headless = Boolean.parseBoolean(dotenv.get("HEADLESS", "false"));
if (headless) {
options.addArguments("--headless=new");
options.addArguments("--window-size=1920,1080");
}

options.addArguments("--no-sandbox");
options.addArguments("--disable-dev-shm-usage");

driver = new ChromeDriver(options);
return driver;
}

// Navegação
protected void navigateTo(String url) {
// Implementação de navegação com base URL
}

// Esperas explĆ­citas
protected WebElement waitForElementLocated(By locator, int duration) {
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(duration));
return wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
}
}

šŸ“š Classes UtilitĆ”rias​

šŸ” Login via API​

public class Login {
public void login(WebDriver driver, String email, String password) {
// Faz requisição HTTP para API de login
// Armazena token no localStorage do navegador
// Navega para a aplicação
}
}

šŸŽ² Geração de Dados​

public class GenerateValidCPF {
public String generateValidCPF() {
// Gera CPF vƔlido seguindo algoritmo oficial
// Retorna CPF formatado (XXX.XXX.XXX-XX)
}
}

public class GenerateUsers {
public void generateUsers(int quantity) {
// Gera usuƔrios via requisiƧƵes HTTP
// Utiliza JavaFaker para dados realistas
}
}

🧪 PadrĆ£o de Testes​

@DisplayName("Testes de Login")
public class LoginTest extends BaseTest {

@BeforeEach
public void setUpTest() {
driver = setUp();
navigateTo("/");
}

@AfterEach
public void tearDownTest() {
tearDown();
}

@Test
@DisplayName("Deveria ser possƭvel fazer login com credenciais vƔlidas")
public void shouldLoginWithValidCredentials() {
// Implementação do teste
}
}

šŸ› ļø DependĆŖncias Principais​

Produção​

  • Selenium WebDriver: 4.35.0 - Automação de navegadores
  • WebDriverManager: 5.7.0 - Gerenciamento automĆ”tico de drivers
  • JavaFaker: 1.0.2 - Geração de dados fictĆ­cios
  • Dotenv Java: 3.2.0 - Gerenciamento de variĆ”veis de ambiente
  • Gson: 2.10.1 - Serialização/deserialização JSON

Desenvolvimento​

  • JUnit 5: 5.10.2 - Framework de testes
  • AssertJ: 3.25.3 - Assertions fluentes
  • JaCoCo: Plugin para relatórios de cobertura
  • Logback: 1.4.14 - Sistema de logging
  • Apache Commons Lang3: 3.14.0 - UtilitĆ”rios Java

šŸš€ OtimizaƧƵes de Performance​

⚔ ConfiguraƧƵes do Gradle​

  • Paralelização: maxParallelForks configurado para metade dos cores disponĆ­veis
  • Cache: Habilitado para builds incrementais
  • Daemon: Reutilização de JVM para builds mais rĆ”pidos
  • Memory: Configuração otimizada de heap (2GB)

šŸ”§ ConfiguraƧƵes do Selenium​

  • Headless Mode: Suporte para execução sem interface grĆ”fica
  • Chrome Options: ConfiguraƧƵes otimizadas para CI/CD
  • WebDriverManager: Download automĆ”tico e cache de drivers
  • Explicit Waits: Esperas inteligentes para elementos