š 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