Wiki / AutomaΓ§Γ£o de Testes ~2 min

πŸ—οΈ 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


Última atualização: Outubro 2025

Digite para pesquisar...

Scroll para zoom Β· Esc para fechar

⌨️ Atalhos de teclado
NavegaΓ§Γ£o
Ctrl K Pesquisar na wiki
Ctrl F Buscar na pΓ‘gina
? Ver atalhos
VisualizaΓ§Γ£o
Ctrl Shift F Modo foco
A+ / Aβˆ’ Tamanho da fonte
Ctrl D Alternar tema
AΓ§Γ΅es
Ctrl B Favoritar pΓ‘gina
Esc Fechar dialogs