๐๏ธ Guia de Arquitetura
๐ รndice
- Visรฃo Geral
- Estrutura de Pastas
- Padrรตes de Design
- Fluxo de Execuรงรฃo
- Decisรตes Tรฉcnicas
Visรฃo Geral
O Etec.WebfopagAutomation segue uma arquitetura modular e escalรกvel baseada em:
- ๐ฏ Page Object Model (POM) - Separaรงรฃo entre testes e elementos de pรกgina
- ๐ง Keywords Customizadas - Reutilizaรงรฃo de cรณdigo
- ๐ฆ Bibliotecas Python - Lรณgica complexa em Python quando necessรกrio
- ๐ CI/CD Ready - Integraรงรฃo com Azure DevOps
Estrutura de Pastas
Etec.WebfopagAutomation/
โ
โโโ ๐ azure/ # Integraรงรฃo Azure DevOps
โ โโโ main.py # Orquestrador principal
โ โโโ crud_steps.py # Operaรงรตes CRUD nos Work Items
โ โโโ api/ # APIs de comunicaรงรฃo
โ โโโ azure_devops.py # Cliente Azure DevOps
โ โโโ config.py # Configuraรงรตes
โ โโโ results_parser.py # Parser de resultados
โ โโโ image_utils.py # Processamento de imagens
โ
โโโ ๐ resources/ # Recursos de Automaรงรฃo
โ โโโ common/ # Keywords e Variรกveis Globais
โ โ โโโ all_common.robot # Importa tudo
โ โ โโโ common_variables.robot # Variรกveis globais
โ โ โโโ interaction_keywords.robot # Interaรงรตes UI
โ โ โโโ modal_keywords.robot # Modais e diรกlogos
โ โ โโโ utils_keywords.robot # Utilitรกrios
โ โ โโโ waits_keywords.robot # Esperas e timeouts
โ โ โโโ webfopag_api_keywords.robot # APIs do WebFopag
โ โ
โ โโโ libs/ # Bibliotecas Python Customizadas
โ โ โโโ custom_selenium.py # Extensรตes Selenium
โ โ โโโ fake_generator_doc.py # Gerador de CPF/CNPJ
โ โ โโโ criptografia_*.py # Criptografia
โ โ โโโ lock_wrapper.py # Controle de concorrรชncia
โ โ
โ โโโ pages/ # Page Objects (POM)
โ โโโ login/
โ โ โโโ login_pages.robot # Keywords da pรกgina
โ โ โโโ login_variables.robot # Locators e variรกveis
โ โโโ mais_opcoes/
โ โโโ administracao_do_sistema/
โ โโโ pessoa_fisica/
โ โโโ relatorios/
โ
โโโ ๐ tests/ # Testes Automatizados
โ โโโ login/
โ โ โโโ login_tests.robot
โ โโโ mais_opcoes/
โ โโโ administracao_do_sistema/
โ โโโ pessoa_fisica/
โ โโโ lancamentos/
โ โโโ registro_de_emprego/
โ โโโ relatorios/
โ
โโโ ๐ scripts/ # Scripts de Qualidade
โ โโโ format.ps1 # Formataรงรฃo automรกtica
โ โโโ lint.ps1 # Linting com Robocop
โ โโโ quality-check.ps1 # Check completo
โ
โโโ ๐ docs/ # Documentaรงรฃo (vocรช estรก aqui!)
โ โโโ guides/
โ โโโ api/
โ โโโ examples/
โ
โโโ ๐ utilities/ # Recursos estรกticos
โ โโโ image/ # Imagens para referรชncia
โ โโโ readme/
โ
โโโ azure-pipelines.yml # Pipeline CI/CD
โโโ requirements.txt # Dependรชncias Python
โโโ README.md # Documentaรงรฃo principal
Padrรตes de Design
1. Page Object Model (POM)
Cada pรกgina da aplicaรงรฃo tem dois arquivos:
pages.robot - Keywords de Aรงรตes
*** Settings ***
Resource login_variables.robot
*** Keywords ***
Fazer Login Com Usuรกrio
[Arguments] ${usuario} ${senha}
Preencher Campo Usuario ${usuario}
Preencher Campo Senha ${senha}
Clicar Botao Entrar
variables.robot - Locators e Constantes
*** Variables ***
# Locators
${INPUT_USUARIO} id=username
${INPUT_SENHA} id=password
${BTN_ENTRAR} css=button[type="submit"]
# Constantes
${TITULO_PAGINA} Autenticaรงรฃo WebFopag
${MSG_ERRO_LOGIN} Credenciais invรกlidas
Vantagens:
- โ Manutenรงรฃo centralizada de locators
- โ Testes independentes de implementaรงรฃo UI
- โ Reutilizaรงรฃo de cรณdigo
2. Hierarquia de Keywords
๐ Camadas de Abstraรงรฃo
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ TESTES (tests/) โ โ Lรณgica de negรณcio
โ Test Case 72844: Login Correto โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ PAGE KEYWORDS (resources/pages/) โ โ Aรงรตes da pรกgina
โ Fazer Login Com Usuario โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ COMMON KEYWORDS (resources/common/) โ โ Aรงรตes genรฉricas
โ Preencher Campo Clicar Botรฃo โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ SELENIUM LIBRARY โ โ Interaรงรฃo com browser
โ Input Text Click Element โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Princรญpio: Cada camada sรณ conhece a camada imediatamente abaixo.
3. Padrรฃo de Nomenclatura
Testes
Test Case [ID]: [Descriรงรฃo Clara]
[Tags] testcase=[ID] [categoria]
Keywords
# Aรงรตes = Verbos no Infinitivo
Fazer Login
Cadastrar Usuario
Validar Mensagem
# Validaรงรตes = Deve/Devem
Deve Exibir Mensagem De Sucesso
Devem Ser Exibidos Os Dados Corretos
Variรกveis
# Globais = MAIรSCULAS
${BASE_URL}
${TIMEOUT_DEFAULT}
# Locais = minรบsculas com underscore
${usuario_logado}
${total_registros}
# Locators = prefixo com tipo
${BTN_SALVAR} # Button
${INPUT_NOME} # Input
${LBL_TITULO} # Label
${DDL_ESTADO} # Dropdown List
4. Gerenciamento de Esperas
โ Nunca Use Sleep Fixo
# RUIM - tempo fixo e imprevisรญvel
Sleep 5s
Click Element ${BTN_SALVAR}
โ Use Esperas Inteligentes
# BOM - espera atรฉ condiรงรฃo ser atendida
Wait Until Element Is Visible ${BTN_SALVAR} timeout=10s
Click Element ${BTN_SALVAR}
Keywords de Espera Disponรญveis:
# Em resources/common/waits_keywords.robot
Aguardar Elemento Visivel
Aguardar Elemento Clicavel
Aguardar Texto Aparecer
Aguardar Pagina Carregar
5. Tratamento de Modais
Modais e pop-ups tรชm keywords especรญficas:
# Em resources/common/modal_keywords.robot
Aceitar Modal De Confirmacao
Rejeitar Modal De Confirmacao
Validar Mensagem Modal ${mensagem_esperada}
Fechar Modal
Fluxo de Execuรงรฃo
1. Inicializaรงรฃo
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 1. Robot Framework Inicia โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 2. Carrega Settings โ
โ - Bibliotecas โ
โ - Resources โ
โ - Variรกveis โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 3. Executa Suite Setup (se houver) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
2. Execuรงรฃo de Teste
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 1. Test Setup โ
โ โ Abrir Navegador โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 2. Executa Passos do Teste โ
โ - Dado que... โ
โ - Quando... โ
โ - Entรฃo... โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 3. Test Teardown โ
โ โ Fechar Navegador โ
โ (mesmo se teste falhar) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
3. Finalizaรงรฃo
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 1. Suite Teardown (se houver) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 2. Gera Relatรณrios โ
โ - output.xml โ
โ - log.html โ
โ - report.html โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 3. (CI/CD) Atualiza Azure DevOps โ
โ โ azure/main.py โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Decisรตes Tรฉcnicas
Por que Robot Framework?
โ Sintaxe legรญvel - Testes podem ser lidos por nรฃo-programadores โ Keyword-driven - Reutilizaรงรฃo mรกxima de cรณdigo โ Ecossistema rico - Bibliotecas para tudo (Selenium, API, DB) โ Relatรณrios nativos - HTML reports prontos para uso โ Paralelizaรงรฃo - Pabot para execuรงรฃo paralela
Por que Selenium?
โ Padrรฃo de mercado - Suporte e comunidade enormes โ Multi-browser - Chrome, Firefox, Edge, Safari โ Maturidade - Estรกvel e confiรกvel โ Integraรงรฃo - Funciona perfeitamente com Robot Framework
Por que Python?
โ Bibliotecas customizadas - Lรณgica complexa em Python โ Integraรงรฃo Azure - SDK oficial Python โ Produtividade - Sintaxe clara e concisa โ Ecossistema - Pacotes para qualquer necessidade
Bibliotecas Customizadas
1. custom_selenium.py
Estende SeleniumLibrary com funรงรตes especรญficas:
class CustomSelenium(SeleniumLibrary):
def click_when_ready(self, locator, timeout=10):
"""Clica em elemento apenas quando estiver pronto"""
self.wait_until_element_is_visible(locator, timeout)
self.wait_until_element_is_enabled(locator, timeout)
self.click_element(locator)
Uso:
Click When Ready ${BTN_SALVAR} timeout=15s
2. fake_generator_doc.py
Gera dados fake vรกlidos para testes:
def gerar_cpf_valido():
"""Gera CPF vรกlido com dรญgitos verificadores corretos"""
# Implementaรงรฃo...
return cpf
Uso:
${cpf} Gerar CPF Valido
Preencher Campo CPF ${cpf}
3. lock_wrapper.py
Previne condiรงรตes de corrida em testes paralelos:
@with_lock('usuario_admin')
def criar_usuario_admin():
"""Apenas um teste por vez pode criar admin"""
# Implementaรงรฃo...
Integraรงรฃo Azure DevOps
Fluxo de CI/CD
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 1. Push/PR no GitHub โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 2. Azure Pipeline Triggered โ
โ (azure-pipelines.yml) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 3. Setup Ambiente โ
โ - Install Python โ
โ - Install Dependencies โ
โ - Setup Chrome/ChromeDriver โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 4. Executa Testes โ
โ robot -d results tests/ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 5. Processa Resultados โ
โ python azure/main.py โ
โ - Parse output.xml โ
โ - Captura screenshots โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 6. Atualiza Work Items โ
โ - Test Case [ID] โ Status โ
โ - Anexa screenshots โ
โ - Adiciona comentรกrios โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 7. Publica Artefatos โ
โ - report.html โ
โ - log.html โ
โ - screenshots/ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Sincronizaรงรฃo de Resultados
# azure/main.py
def processar_resultados():
# 1. Parse XML
resultados = parser.parse_output_xml('results/output.xml')
# 2. Para cada Test Case
for teste in resultados:
test_case_id = extrair_id_da_tag(teste.tags)
# 3. Atualiza Work Item
azure_client.atualizar_test_case(
id=test_case_id,
status=teste.status,
comentario=teste.message,
screenshots=teste.screenshots
)
Padrรตes de Qualidade
1. Formataรงรฃo Automรกtica
# scripts/format.ps1
robotidy --overwrite tests/
robotidy --overwrite resources/
2. Linting
# scripts/lint.ps1
robocop --reports all tests/
robocop --reports all resources/
3. Quality Check Completo
# scripts/quality-check.ps1
# 1. Formata cรณdigo
# 2. Executa linting
# 3. Roda testes
# 4. Valida cobertura
Escalabilidade
Execuรงรฃo Paralela
# Executa com 8 processos simultรขneos
pabot --processes 8 --outputdir results tests/
# Por pasta
pabot --testlevelsplit --outputdir results tests/
Performance:
- ๐ Serial: ~30 minutos
- ๐ Paralelo (8 cores): ~5 minutos
Boas Prรกticas para Paralelizaรงรฃo
โ
Testes independentes - Nรฃo compartilham estado
โ
Dados isolados - Cada teste cria seus prรณprios dados
โ
Locks quando necessรกrio - Use lock_wrapper.py
โ Evite globals - Podem causar race conditions
Prรณximos Passos
- ๐ Keywords Reference - Documentaรงรฃo de todas as keywords
- ๐ง Development Guide - Como criar novos testes
- ๐ Troubleshooting - Resolver problemas comuns
รltima atualizaรงรฃo: Outubro 2025