Como Criar uma Suite de Testes de Regressão com Playwright e Python

headed=False

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:

  1. 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).
  2. 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.
  3. 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
│ └── checkout
page.py
├── tests/
│ ├── conftest.py
│ ├── testauth.py
│ └── test
checkout.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.btn
add = 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.new
page()
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

Preencha o formulário abaixo para que eu consiga entrar em contato com você.