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