š 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:
- Python 3.8+: Interpretador Python necessƔrio
- Virtual Environment: Ambiente virtual isolado (recomendado)
- Chrome/Chromium: Navegador para execução dos testes
š Comandos DisponĆveisā
Configuração Inicialā
# Criar ambiente virtual
python -m venv venv
# Ativar ambiente virtual
# Linux/Mac:
source venv/bin/activate
# Windows:
venv\Scripts\activate
# Instalar dependĆŖncias
pip install -r requirements.txt
# Instalar browsers do Playwright
rfbrowser init
Execução de Testesā
Via Makefile (Recomendado)
# Executar todos os testes
make test-all
# Executar testes com tag especĆfica
make test-scenario TAG=login
# Executar arquivo especĆfico
make test-file FILE_PATH=tests/specs/login.robot
# Executar testes em paralelo
make parallel
# Limpar relatórios
make clean
# Verificar qualidade do código
make lint
# Formatar arquivos
make tidy
# Ver ajuda
make help
Via Robot Framework
# Executar todos os testes
robot --outputdir results/reports tests/specs
# Executar com tag especĆfica
robot --outputdir results/reports --include login tests/specs
# Executar em paralelo
pabot --processes 4 --outputdir results/reports tests/specs
# Executar com argumentos
robot --outputdir results/reports -A args.robotargs tests/specs
š Estrutura do Projetoā
tests/robot/
āāā tests/
ā āāā specs/ # Arquivos de teste (.robot)
ā ā āāā login.robot # Testes de autenticação
ā ā āāā register.robot # Testes de cadastro
ā ā āāā profile.robot # Testes de perfil
ā ā āāā listUsers.robot # Testes de listagem
ā ā āāā recoverPassword.robot # Testes de recuperação
ā āāā resources/ # Keywords e recursos
ā ā āāā keywords.resource # Keywords principais
ā ā āāā loginKeywords.resource # Keywords de login
ā ā āāā registerKeywords.resource # Keywords de cadastro
ā ā āāā profileKeywords.resource # Keywords de perfil
ā ā āāā listUsersKeywords.resource # Keywords de listagem
ā ā āāā recoverKeywords.resource # Keywords de recuperação
ā āāā library/ # Bibliotecas Python
ā ā āāā CustomDataLibrary.py # Geração de dados
ā ā āāā CustomLibrary.py # UtilitĆ”rios gerais
ā ā āāā GenerateCPFLibrary.py # Geração de CPF
ā āāā data/ # Dados e variĆ”veis
ā āāā variables.py # VariĆ”veis globais
āāā results/ # Relatórios e logs
ā āāā reports/ # Relatórios HTML
ā āāā logs/ # Logs de execução
ā āāā screenshots/ # Screenshots de falhas
āāā requirements.txt # DependĆŖncias Python
āāā Makefile # Comandos simplificados
āāā package.json # Metadados do projeto
āāā args.robotargs # Argumentos do Robot
āāā CHANGELOG.md # Histórico de mudanƧas
āļø ConfiguraƧƵes AvanƧadasā
š§ Configuração do Robot Frameworkā
O projeto utiliza configuraƧƵes otimizadas para performance e legibilidade:
*** Settings ***
Documentation Suite de testes para validar funcionalidades.
Resource ../resources/keywords.resource
Resource ../resources/loginKeywords.resource
Test Setup Preparar Teste ${BASE_URL}
Test Teardown Fechar O Navegador
*** Test Cases ***
CenĆ”rio 1: Deveria Ser PossĆvel Fazer Login
[Documentation] Testa login com credenciais vƔlidas.
Digitar O Email Do Usuario generic@example.com
Digitar O Password Do Usuario 123456
Clicar No Botão De Entrar Na Conta
Verificar O Feedback Do Usuario Login realizado com sucesso!
š VariĆ”veis de Ambienteā
# tests/data/variables.py
API_URL = "http://localhost:3001"
BASE_URL = "http://localhost:8181/"
# Credenciais
EMAIL = "generic@example.com"
PASSWORD = "123456"
# Mensagens
TOAST_MESSAGE = "Por favor, corrija os erros no formulƔrio."
INPUT_NAMES = ["fullname", "cpfcnpj", "email", "password", "password-confirmation"]
INPUT_ERRORS = ["O Nome Completo é obrigatório.", "O CPF/CNPJ é obrigatório.", ...]
š§ Configuração do Makefileā
# Diretórios e arquivos
TESTS_DIR = tests/specs
OUTPUT_DIR = results/reports
OUTPUT_DIR_BROWSER = results
PROCESSES = 4
# Comandos principais
test-all: clean
@echo "Executando todos os testes com Robot Framework..."
BROWSER_OUTPUTDIR=$(OUTPUT_DIR_BROWSER)/screenshots robot --outputdir $(OUTPUT_DIR) $(TESTS_DIR)
parallel: clean
@echo "Executando testes em paralelo com Pabot..."
BROWSER_OUTPUTDIR=$(OUTPUT_DIR_BROWSER)/screenshots pabot --processes $(PROCESSES) --outputdir $(OUTPUT_DIR) $(TESTS_DIR)
lint:
@echo "Verificando a qualidade do código com Robocop..."
robocop -ft .robot,.resource $(TESTS_DIR)
š Keywords e Recursosā
š Keywords de Autenticaçãoā
*** Keywords ***
Preparar Teste Com API
[Arguments] ${BASE_URL} ${route}=
Abrir O Navegador ${BASE_URL}
Login Via API
Navegar Para A Rota ${route}
Login Via API
${payload}= Evaluate {"email": "${EMAIL}", "password": "${PASSWORD}"} json
${response}= POST ${API_URL}/auth/login json=${payload}
Should Be Equal As Numbers ${response.status_code} 200
${responseJson}= Evaluate ${response.text} json
${token}= Set Variable ${responseJson["token"]}
LocalStorage Set Item user-token ${token}
š² Keywords de Geração de Dadosā
*** Keywords ***
Preencher Todos Os Campos
${cpf}= Generate Valid Cpf
${fullName}= Generate Full Name
${email}= Generate Email
${phone}= Generate Phone
Fill Text css=[data-testid="input-fullname"] ${fullName}
Fill Text css=[data-testid="input-socialname"] Nome Social
Fill Text css=[data-testid="input-document"] ${cpf}
Fill Text css=[data-testid="input-phone"] ${phone}
Fill Text css=[data-testid="input-email"] ${email}
Fill Text css=[data-testid="input-password"] 123456
Fill Text css=[data-testid="input-password-confirmation"] 123456
š§Ŗ PadrĆ£o de Testesā
*** Test Cases ***
CenĆ”rio 1: Deveria Ser PossĆvel Fazer Login Com Credenciais VĆ”lidas
[Documentation] Testa login com credenciais corretas.
[Tags] login smoke
Digitar O Email Do Usuario generic@example.com
Digitar O Password Do Usuario 123456
Clicar No Botão De Entrar Na Conta
Verificar O Feedback Do Usuario Login realizado com sucesso!
š ļø Bibliotecas Customizadasā
š² CustomDataLibraryā
from faker import Faker
class CustomDataLibrary:
def __init__(self):
self.faker = Faker("pt_BR")
def generate_full_name(self):
return self.faker.name()
def generate_first_name(self):
return self.faker.first_name()
def generate_email(self):
return self.faker.email()
def generate_phone(self):
return '(12) 9 8888-7777'
šÆ GenerateCPFLibraryā
import random
class GenerateCPFLibrary:
def generate_valid_cpf(self):
"""Gera um CPF vÔlido aleatório."""
def calculate_digit(cpf):
weights = range(len(cpf) + 1, 1, -1)
total = sum(int(digit) * weight for digit, weight in zip(cpf, weights))
remainder = total % 11
return str(11 - remainder if remainder > 1 else 0)
cpf_base = [random.randint(0, 9) for _ in range(9)]
cpf_base.append(int(calculate_digit(cpf_base)))
cpf_base.append(int(calculate_digit(cpf_base)))
return "".join(map(str, cpf_base))
š§ CustomLibraryā
from urllib.parse import urlparse
class CustomLibrary:
def __init__(self):
pass
def parse_url(self, url):
"""Analisa uma URL e retorna os componentes como um objeto ParseResult."""
parsed_url = urlparse(url)
return parsed_url
def get_from_list(self, lst, index):
"""Retorna o elemento da lista no Ćndice especificado."""
return lst[index]
def get_list_length(self, lst):
"""Retorna o comprimento da lista."""
return len(lst)
š ļø DependĆŖncias Principaisā
Produçãoā
- Robot Framework:
7.1.1
- Framework de automação - Browser Library:
19.0.1
- Automação de navegadores com Playwright - Requests Library:
0.9.7
- Testes de API - Faker:
33.1.0
- Geração de dados fictĆcios - Python-dotenv:
1.0.1
- Gerenciamento de variƔveis de ambiente
Desenvolvimentoā
- Pabot:
2.18.0
- Execução paralela de testes - Robocop:
5.5.0
- Linting e qualidade de código - Robotidy:
4.14.0
- Formatação de arquivos .robot - Assertion Engine:
3.0.3
- Engine de assertions - Stacktrace:
0.4.1
- Rastreamento de stack traces
š OtimizaƧƵes de Performanceā
ā” ConfiguraƧƵes de Paralelizaçãoā
- Pabot: Execução paralela com 4 processos
- Browser Isolation: Cada processo executa em navegador isolado
- Resource Sharing: Compartilhamento otimizado de recursos
- Result Aggregation: Consolidação automÔtica de resultados
š§ ConfiguraƧƵes do Browserā
- Headless Mode: Suporte para execução sem interface grÔfica
- Screenshot: Capturas automƔticas em caso de falha
- Video Recording: Gravação de vĆdeos para debugging
- Network Interception: Interceptação de requisições de rede