Pular para conteúdo

Procedure

A Procedure é a unidade responsável pela execução da lógica de teste no Probato. Ela contém o código que efetivamente interage com a aplicação, executa ações e realiza validações. No modelo mental do Probato, a Procedure existe para separar claramente a descrição do cenário (Script) da execução do comportamento.

Enquanto o Script descreve o que deve acontecer, a Procedure define como isso acontece.

Papel da Procedure no Probato

A Procedure é responsável por:

  • Executar a lógica do cenário
  • Interagir com Page Objects
  • Receber dados já resolvidos (Dataset)
  • Coordenar pré-condições, execução e pós-condições

A Procedure responde à pergunta: Como o cenário é executado?

Ela é o nível onde a intenção declarada no Script se transforma em comportamento executável.

Onde a Procedure se encaixa no modelo mental

No fluxo conceitual do Probato, a Procedure está sempre contida em um Script e nunca existe de forma isolada.

Modelo conceitual
Suite
 ├── SQL (estado global / pré-condições da funcionalidade)
 ├── NoSQL (estado global / pré-condições da funcionalidade)
 └── Script
      ├── Dataset (dados de execução)
      ├── SQL (estado específico do cenário)
      ├── NoSQL (estado específico do cenário)
      ├── Precondition
      │     └── Page Object
      │           ├── Action
      │           └── Param
      ├── Procedure
      │     └── Page Object
      │           ├── Action
      │           └── Param
      └── Postcondition
            └── Page Object
                  ├── Action
                  └── Param

A Procedure é sempre executada no contexto de um Script, utilizando dados e estado previamente definidos.

Formas de implementação

O Probato permite duas formas de implementação de Procedure, dependendo da complexidade e da necessidade de reutilização.

Procedure como método

Indicada para cenários simples e pontuais.

Características:

  • Implementação direta
  • Menor sobrecarga estrutural
  • Escopo limitado a um único Script

Essa abordagem é recomendada apenas quando:

  • A lógica é pequena
  • Não há necessidade de reutilização
  • O fluxo é simples e específico

Procedure como classe dedicada

Indicada para cenários reutilizáveis ou mais complexos.

Características:

  • Melhor organização do código
  • Maior reutilização entre Scripts
  • Isolamento claro de responsabilidades

Essa é a forma recomendada na maioria dos casos, especialmente em projetos de médio e grande porte.

Estrutura interna da Procedure

Conceitualmente, uma Procedure pode ser organizada em três partes distintas:

Precondition

  • Preparação do cenário
  • Validações iniciais
  • Garantia de pré-requisitos funcionais

Procedure

  • Ações principais do fluxo (Objetivo alvo do teste)
  • Interação com a aplicação
  • Execução do comportamento esperado

Postcondition

  • Validações finais
  • Limpeza ou restauração de estado, quando necessário

Essa divisão melhora:

  • Legibilidade do código
  • Rastreabilidade da execução
  • Diagnóstico preciso de falhas

Relação com Page Objects

A Procedure é o único nível que:

  • Conhece Page Objects
  • Interage diretamente com a interface do usuário
  • Coordena ações de UI como parte do fluxo

Page Objects não devem conter lógica de cenário. Toda decisão de fluxo e validação pertence à Procedure.

O que NÃO deve estar em uma Procedure

Para manter a arquitetura clara e previsível, uma Procedure não deve:

  • Conter definição de Dataset
  • Configurar browsers ou ambiente
  • Declarar estado global de banco
  • Conhecer detalhes de Suite ou Script

Essas responsabilidades pertencem a outros níveis do framework.

Boas práticas

  • Prefira Procedures implementadas como classes dedicadas
  • Mantenha Procedures pequenas, coesas e focadas
  • Evite lógica condicional baseada em dados
  • Reutilize Procedures sempre que possível

Próximo passo

Após compreender a Procedure, o próximo conceito é o Page Object, responsável por encapsular interações com a interface.

➡️ Continue em Page Object.