05. Introdução aos Testes End-to-End
Ao concluirmos todas as aulas deste tópico, nós:
- Compreenderemos por que testes End-to-End devem ser isolados em uma suíte separada dos testes unitários e de integração.
- Saberemos como configurar e executar testes End-to-End no Gradle 9 com
jvm-test-suite. - Conheceremos a arquitetura do Playwright para JVM e como ele supera a fragilidade do antigo Selenium WebDriver.
Como Configurar o Ambiente para Testes End-to-End com Playwright na JVM
Nesta seção prática, você aprenderá o passo a passo completo, padronizado e repetível para preparar seu projeto Spring Boot com Kotlin e Gradle 9 para a execução de testes End-to-End (E2E) modernos utilizando o Microsoft Playwright para JVM.
1. Por Que Isolar a Suíte E2E no Build?
Testes de ponta a ponta (E2E) navegam por interfaces gráficas reais, realizam requisições de rede completas e dependem de binários de navegadores (como Chromium ou Firefox). Comparados aos testes unitários e de integração, eles possuem características operacionais distintas:
- Tempo de Execução: Um teste unitário roda em milissegundos; um teste E2E pode levar segundos para carregar páginas, renderizar SPAs e executar scripts no navegador.
- Dependências Pesadas: A biblioteca de automação do browser e suas ferramentas auxiliares não devem contaminar o classpath da aplicação de produção nem a execução rápida dos testes unitários.
- Falha Precoce (Fail-Fast): Em pipelines de CI/CD, queremos que erros de lógica quebrem os testes unitários (
test) primeiro, antes de despender recursos computacionais subindo navegadores.
Por essas razões, criamos uma suíte dedicada chamada e2eTest via plugin oficial jvm-test-suite do Gradle.
2. Configuração no build.gradle.kts com jvm-test-suite
No Gradle 9 com Kotlin DSL, o plugin nativo jvm-test-suite substitui plugins legados de terceiros, criando automaticamente:
- O source set isolado em
src/e2eTest/kotlinesrc/e2eTest/resources. - As configurações de dependência dedicadas:
e2eTestImplementationee2eTestRuntimeOnly. - A task executável
e2eTeste o diretório de relatórios HTML independente embuild/reports/tests/e2eTest/.
Abra seu arquivo build.gradle.kts e adicione a suíte e2eTest dentro do bloco testing:
|
|
[!NOTE] Ao registrar
val e2eTest by registering(JvmTestSuite::class), o Gradle configura automaticamente a convenção de diretórios:
src/e2eTest/kotlin: Diretório de código-fonte dos testes E2E.src/e2eTest/resources: Diretório de configurações específicas (comoapplication-e2e.properties).
3. Instalação dos Navegadores do Playwright
Diferente do Selenium WebDriver tradicional — que exigia gerenciar drivers externos como o chromedriver instalados no sistema —, o Playwright gerencia versões herméticas e fixas dos navegadores no diretório de cache local (~/.cache/ms-playwright no Linux/macOS ou %USERPROFILE%\AppData\Local\ms-playwright no Windows).
Para automatizar a instalação dos binários necessários (com foco no Chromium), registre uma task JavaExec dedicada no build.gradle.kts:
|
|
Executando a Instalação dos Navegadores
Execute o comando no terminal a partir da raiz do projeto:
|
|
O Playwright invocará seu utilitário de CLI e efetuará o download do Chromium correspondente:
|
|
[!TIP]
- Flag
--with-deps: No Linux (Ubuntu/Debian/Fedora), a flag--with-depsinstrui o instalador a verificar e instalar pacotes do sistema operacional necessários para a renderização sem interface gráfica (como bibliotecas gráficaslibgbm, fontes e suporte ao NSS). Em servidores de CI/CD, isso evita falhas silenciosas de inicialização.- Outros Navegadores: Se precisar rodar testes no Firefox ou WebKit (Safari), basta trocar
"chromium"por"firefox"ou"webkit", ou omitir o argumento para baixar todos.
4. Escrevendo um Teste End-to-End Mínimo para Validação
Crie o arquivo de teste src/e2eTest/kotlin/com/testwithspring/e2e/PlaywrightSmokeE2ETest.kt para validar a integração do ambiente:
|
|
5. Comandos de Execução e Validação dos Relatórios
Com o ambiente configurado, você dispõe dos seguintes comandos de linha para o seu fluxo de desenvolvimento:
1. Executar Isoladamente Apenas a Suíte E2E
Para rodar exclusivamente os testes End-to-End sem reexecutar os testes unitários:
|
|
Ou forçando uma compilação e execução limpas:
|
|
Saída esperada no terminal:
|
|
2. Executar Toda a Pirâmide de Testes no Ciclo de Verificação
Para executar a validação completa do projeto (testes unitários e testes E2E):
|
|
O Gradle respeitará a diretiva shouldRunAfter(test), executando a suíte test primeiro e a suíte e2eTest em seguida.
3. Validar os Relatórios HTML de Execução
Ao término do comando, o Gradle gera um relatório HTML detalhado e isolado para a suíte E2E em:
|
|
Você pode abrir o relatório diretamente no navegador:
|
|
O relatório discrimina o status de cada método de teste, duração em milissegundos, logs da saída padrão (standard output) e eventuais stacktraces em caso de falha.
6. Execução em Modo com Interface Visível (Headed Mode) para Depuração
Durante o desenvolvimento local de novas telas ou fluxos complexos, você pode desejar acompanhar visualmente o clique e o preenchimento dos campos.
Basta parametrizar a opção de inicialização do navegador com base em uma variável de ambiente:
|
|
E executar o comando no terminal definindo a variável:
|
|
O Chromium será aberto com janela visível na tela, permitindo depuração imediata de seletores e comportamentos da interface gráfica.
Conteúdo
-
Arquitetura de Execução de Testes E2E no Build
Aprenda a isolar diretórios de código e recursos de testes End-to-End, configurar perfis e tags do JUnit 6 e orquestrar a inicialização da aplicação web no ciclo de vida do build.
-
Executando Testes E2E com Gradle 9
Aprenda a configurar uma suíte dedicada endToEndTest no Gradle 9 com Kotlin DSL e JVM Test Suite Plugin, isolando diretórios, dependências, relatórios HTML e ordem de execução.
-
Introdução ao Playwright e WebDriver para Testes E2E na JVM
Conheça a arquitetura dos testes End-to-End na JVM, entendendo os componentes do Selenium WebDriver e a evolução moderna com Microsoft Playwright para Kotlin 2.4 e Gradle 9.