O acceptance testing significa pelo menos três coisas diferentes dependendo de quem faz e quando. UAT é o processo de stakeholders de negócio confirmando requisitos antes da aprovação final. ATDD são testes executáveis escritos antes do desenvolvimento começar. Functional acceptance testing é o QA verificando que o spec foi totalmente implementado. Os modos de falha que importam: testar tarde demais, envolver as pessoas erradas, e escrever critérios vagos o suficiente para gerar discussão.
O Que Acceptance Testing Realmente Significa
O termo cobre vários conceitos relacionados:
User Acceptance Testing (UAT): Os próprios usuários (ou stakeholders de negócio) testam o software num ambiente de staging para confirmar que ele atende aos requisitos antes da aprovação. Acceptance test-driven development (ATDD): Os requisitos são escritos como testes executáveis antes do desenvolvimento começar. Os testes passam quando a funcionalidade está completa. Functional acceptance testing: O QA verifica que todos os requisitos do spec estão implementados e funcionando corretamente.Na prática, "acceptance testing" geralmente significa uma de duas coisas: UAT feito por pessoas de negócio, ou functional acceptance testing feito pelo QA contra os requisitos formais.
Critérios de Aceitação: A Base
O acceptance testing começa com os critérios de aceitação: as condições específicas que uma funcionalidade precisa atender para ser considerada completa.
Critérios de aceitação ruins:A página de login deve funcionar corretamente.Critérios de aceitação bons:
- Usuários podem fazer login com e-mail e senha válidos e são redirecionados para o dashboard
- Se o e-mail ou senha estiverem errados, aparece a mensagem de erro "Invalid email or password"
- Após 5 tentativas falhas em 10 minutos, a conta é bloqueada e aparece a mensagem "too many attempts"
- Login bem-sucedido cria uma sessão que expira após 24 horas de inatividade
- O link "Forgot password" na página de login envia um e-mail de redefinição em até 2 minutos
Bons critérios são específicos, testáveis e sem ambiguidade.
Escrevendo Critérios de Aceitação com Gherkin
Gherkin é uma linguagem estruturada para escrever critérios de aceitação no formato Given/When/Then. É legível por stakeholders não técnicos e executável por ferramentas como Cucumber:
Feature: User Login
Scenario: Successful login with valid credentials
Given I am on the login page
When I enter "user@example.com" as email
And I enter "ValidPass1" as password
And I click the "Sign In" button
Then I should be redirected to the dashboard
And I should see "Welcome, Test User" in the header
Scenario: Login with invalid credentials
Given I am on the login page
When I enter "user@example.com" as email
And I enter "WrongPassword" as password
And I click the "Sign In" button
Then I should see "Invalid email or password"
And I should remain on the login page
Scenario: Account lockout after failed attempts
Given I am on the login page
When I enter "user@example.com" with wrong password 5 times
Then I should see "Too many failed attempts. Try again in 10 minutes."
And the Sign In button should be disabledProcesso de UAT: Passo a Passo
1. Definir o escopo do teste
Quais funcionalidades estão incluídas neste ciclo de UAT? Geralmente ligado a uma release ou sprint.
2. Escrever cenários de teste com usuários de negócio
Envolva os usuários reais ou product owners na criação dos cenários. Eles sabem como é o "correto" do ponto de vista do negócio.
3. Preparar o ambiente
O UAT deve rodar num ambiente próximo ao de produção: mesmos dados, mesmas integrações, mesma configuração. O notebook de um desenvolvedor não é um ambiente de UAT.
4. Criar dados de teste
Os usuários precisam de dados de teste realistas que representem seus casos de uso reais, não apenas "test@test.com" com "test123" como senha.
5. Executar os testes
O ideal é que usuários reais rodem os testes. Se não for possível, o QA os executa, mas os critérios de aceitação precisam ser definidos pelos stakeholders de negócio, não pelo QA.
6. Documentar resultados
Cada teste recebe um status de aprovado/reprovado. As falhas viram bug reports com passos para reproduzir.
7. Corrigir e retestar
Bugs encontrados no UAT voltam para os desenvolvedores. O QA retesta depois que forem corrigidos.
8. Aprovação formal
Os stakeholders de negócio aprovam formalmente a release. Sem aprovação, não se faz deploy.
UAT vs Testes de QA
| Aspecto | Testes de QA | UAT |
|---------|-------------|-----|
| Quem faz | Engenheiros de QA | Usuários de negócio / product owners |
| Objetivo | Encontrar bugs | Confirmar que os requisitos foram atendidos |
| Foco | Correção técnica | Valor para o negócio |
| Quando | Durante o desenvolvimento | Antes da release |
| Critérios | Casos de teste | Critérios de aceitação |
| Aprovação | QA lead | Stakeholder de negócio |
Ambos são necessários. O QA encontra os bugs antes do UAT para que os usuários de negócio não fiquem caçando problemas básicos.
Modos de Falha Comuns no Acceptance Testing
Testar tarde demais:UAT agendado 2 dias antes da release sem margem para correções. Todo bug encontrado vira uma crise.
Participantes errados:Fazer UAT com desenvolvedores invalida o propósito. Eles sabem como o código funciona e não vão testá-lo como um usuário.
Critérios de aceitação vagos:"O checkout deve ser tranquilo" gera discussões sobre o que "tranquilo" significa quando bugs aparecem.
Testar no ambiente errado:UAT num servidor de desenvolvimento com dados de teste que não refletem volumes ou integrações reais vai deixar bugs reais passarem.
Sem regressão após correções:Bug encontrado no UAT, corrigido, publicado, mas ninguém verifica se a correção quebrou algo mais.
Acceptance Testing Automatizado
Você pode automatizar acceptance tests com Playwright:
// acceptance/login.spec.ts
import { test, expect } from '@playwright/test';
test.describe('Login — Critérios de Aceitação', () => {
test('CA1: Credenciais válidas redirecionam para o dashboard', async ({ page }) => {
await page.goto('/login');
await page.fill('[data-testid="email"]', 'user@test.com');
await page.fill('[data-testid="password"]', 'ValidPass1');
await page.click('[data-testid="submit"]');
await expect(page).toHaveURL('/dashboard');
await expect(page.getByTestId('welcome')).toContainText('Welcome');
});
test('CA2: Credenciais inválidas mostram mensagem de erro', async ({ page }) => {
await page.goto('/login');
await page.fill('[data-testid="email"]', 'user@test.com');
await page.fill('[data-testid="password"]', 'SenhaErrada');
await page.click('[data-testid="submit"]');
await expect(page.getByTestId('error-message')).toHaveText('Invalid email or password');
await expect(page).toHaveURL('/login');
});
test('CA3: Sessão expira após 24h de inatividade', async ({ page, context }) => {
// Normalmente testado com mock de tempo ou manipulação de API
await page.goto('/login');
await page.fill('[data-testid="email"]', 'user@test.com');
await page.fill('[data-testid="password"]', 'ValidPass1');
await page.click('[data-testid="submit"]');
// Simula expiração de sessão via API
await page.request.post('/api/auth/expire-session');
await page.reload();
await expect(page).toHaveURL('/login');
});
});Checklist de Acceptance Testing
Antes de começar o UAT:
- [ ] Critérios de aceitação escritos e revisados pelo negócio
- [ ] Funcionalidade publicada no ambiente de UAT (não em dev ou staging)
- [ ] Dados de teste preparados (realistas, não triviais)
- [ ] Usuários de negócio orientados sobre o que testar
- [ ] Processo de registro de bugs estabelecido
- [ ] Cronograma inclui tempo para correções e retestes
- [ ] Responsável pela aprovação identificado
Durante o UAT:
- [ ] Testes executados contra os critérios de aceitação
- [ ] Todas as falhas documentadas com passos para reproduzir
- [ ] Screenshots/gravações para problemas complexos
- [ ] Severidade atribuída a cada achado
Após o UAT:
- [ ] Todos os bugs P1/P2 corrigidos e retestados
- [ ] Aprovação formal do negócio recebida por escrito
- [ ] Release notes atualizadas com os problemas conhecidos P3/P4
Resumo
O acceptance testing confirma que o software entrega o valor de negócio para o qual foi construído. Pontos principais:
- Baseado em critérios de aceitação escritos pelos stakeholders de negócio, não pelo QA
- O UAT envolve usuários reais; o functional acceptance testing é feito pelo QA contra os requisitos
- Gherkin (Given/When/Then) torna os critérios legíveis por stakeholders técnicos e não técnicos
- Executa em um ambiente próximo ao de produção com dados realistas
- Exige aprovação formal antes da release
- Pode ser automatizado com Playwright, especialmente valioso para regressão em mudanças futuras
A diferença entre uma aprovação de QA e uma aprovação de negócio importa: o QA diz que o código funciona; o negócio diz que a funcionalidade resolve o problema deles.
→ Veja também: Verificação vs Validação em Testes de Software: Qual é a Diferença? | Como Escrever um Plano de Teste: Modelo e Exemplos Reais | Testes Baseados em Risco: Priorizando o que Testar Quando Não é Possível Testar Tudo