ποΈ 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