Como Criar uma Suite de Testes de Regressão com Playwright e Python
Conforme aplicações web crescem em complexidade, a garantia de qualidade deixa de ser uma etapa manual e se torna um pilar de engenharia. Pequenas alterações no backend ou ajustes de layout podem quebrar fluxos críticos sem que a equipe perceba até a chegada do primeiro relato de usuário. O objetivo de uma suite de testes de regressão é validar, de forma repetível e automatizada, que as funcionalidades existentes continuam operando após cada novo commit.
Historicamente, ferramentas baseadas em WebDriver enfrentavam problemas de estabilidade e lentidão, gerando os temidos flaky tests (testes intermitentes). O Playwright, integrado ao ecossistema Python via pytest-playwright, resolve esses gargalos por meio de controle direto do protocolo de depuração do navegador, auto-waiting e gerenciamento eficiente de contextos.
Por que o Playwright se Destaca em Testes de Regressão
Ao estruturar testes de regressão de ponta a ponta (E2E), a velocidade e a reprodutibilidade definem a taxa de adoção pela equipe técnica. Três características tornam o Playwright ideal para essa tarefa:
- Auto-waiting nativo: O framework aguarda automaticamente que os elementos estejam visíveis, estáveis e prontos para interação antes de disparar cliques ou preenchimentos, eliminando a necessidade de pausas artificiais (
time.sleep). - Isolamento de Contexto de Navegação: Em vez de instanciar um novo processo de navegador para cada teste — o que consome memória excessiva —, o Playwright cria contextos de navegação independentes (equivalentes a abas anônimas com cache e cookies zerados), permitindo paralisação em alta velocidade.
- Rastreabilidade e Depuração: Gravação de traces de execução, capturas de tela e vídeos de falhas simplificam o diagnóstico de erros ocorridos em pipelines automatizados.
Estrutura de Diretórios Recomendada
Para garantir manutenibilidade a longo prazo, separe a lógica dos elementos da interface da lógica de asserção usando o padrão Page Object Model (POM) combinado com o runner pytest:
text
regression-suite/
├── pages/
│ ├── init.py
│ ├── basepage.py
│ └── checkoutpage.py
├── tests/
│ ├── conftest.py
│ ├── testauth.py
│ └── testcheckout.py
├── pytest.ini
└── requirements.txt
Implementação Prática: Do Page Object ao Teste
1. Definindo o Page Object
Centralize as interações de tela em classes dedicadas. Isso impede que alterações em seletores CSS quebrem dezenas de testes simultaneamente.
python
pages/checkout_page.py
from playwright.sync_api import Page, expect
class CheckoutPage:
def init(self, page: Page):
self.page = page
self.inputitem = page.locator(“#product-search”)
self.btnadd = page.locator(“button[data-action=’add-to-cart’]”)
self.badge_cart = page.locator(“.cart-count”)
def add_product_to_cart(self, product_name: str):
self.input_item.fill(product_name)
self.btn_add.click()
def verify_cart_count(self, expected_count: str):
expect(self.badge_cart).to_have_text(expected_count)
2. Configurando o conftest.py com Fixtures
O pytest-playwright fornece fixtures nativas como page e context. No arquivo conftest.py, você pode configurar estados de autenticação prévios para evitar login manual repetido em cada cenário de regressão:
python
tests/conftest.py
import pytest
from playwright.sync_api import Browser
@pytest.fixture(scope=”session”)
def base_url():
return “https://app.seudominio.com”
@pytest.fixture(scope=”function”)
def authenticatedpage(browser: Browser, baseurl: str):
context = browser.newcontext(storagestate=”authstate.json”)
page = context.newpage()
page.goto(base_url)
yield page
context.close()
3. Escrevendo o Teste de Regressão
python
tests/test_checkout.py
from pages.checkout_page import CheckoutPage
def testregressionadditemto_cart(page):
page.goto(“https://app.seudominio.com/store”)
checkout = CheckoutPage(page)
checkout.add_product_to_cart("Teclado Mecânico")
checkout.verify_cart_count("1")
Execução em Ambientes Headless e CI/CD
Para que uma suite de testes de regressão agregue valor contínuo, ela precisa rodar sem atrito dentro de containers Docker e pipelines de integração contínua (GitHub Actions, GitLab CI, Jenkins).
Execute os testes em modo headless com geração de relatório HTML e retenção de traces apenas para execuções com falha:
bash
pytest


