Glossário · Automação de UI
Isolamento de testes
Em inglês: Test isolation
Também chamado de: testes isolados, independência de testes, testes independentes, isolated tests
Definição
Propriedade de cada teste preparar o próprio estado e conseguir passar sozinho, em qualquer ordem e em paralelo, sem depender de outros testes nem afetá-los.
Um teste isolado cria tudo de que precisa, não depende de nada que outro teste tenha deixado para trás e não deixa nada que mude o resultado de outro teste. Se você consegue rodar qualquer teste sozinho, rodar a suíte inteira em ordem inversa ou rodá-la em oito workers paralelos e obter os mesmos resultados, a suíte está isolada. O isolamento é o que torna seguros a execução paralela e o sharding.
Exemplo
Não isolado: o segundo teste depende do primeiro.
test('creates a project', async ({ page }) => {
await page.goto('/projects/new');
await page.getByLabel('Name').fill('Apollo');
await page.getByRole('button', { name: 'Create' }).click();
});
test('renames the project', async ({ page }) => {
await page.goto('/projects/apollo'); // fails if run alone or first
});
Isolado: cada teste cria os próprios dados, com um nome único, pela API.
test('renames a project', async ({ page, request }) => {
const name = `proj-${crypto.randomUUID()}`;
const res = await request.post('/api/projects', { data: { name } });
const { id } = await res.json();
await page.goto(`/projects/${id}`);
// ...rename and assert
});
O Playwright ajuda no nível do navegador: cada teste ganha um BrowserContext novo, então cookies, local storage e sessões nunca vazam entre testes.
Fontes de vazamento
- Contas e registros compartilhados que os testes modificam, como um único “usuário de teste” cujas configurações todos os testes alteram.
- Estado estático ou global no código de teste, como um driver singleton ou uma variável no nível da classe.
- Linhas do banco sem limpeza, ou testes que fazem assertions sobre a contagem de uma tabela na qual outros testes também escrevem.
- Estado externo, como feature flags, caixas de e-mail, horário e caches.
Como verificar
Rode os testes em ordem aleatória. O JUnit 5 suporta @TestMethodOrder(MethodOrderer.Random.class), e uma ordem aleatória padrão para todas as classes pode ser definida em junit-platform.properties. Rode testes isolados, um de cada vez. Rode a suíte com mais workers do que o normal. Qualquer teste cujo resultado mude não está isolado.
O isolamento total tem um custo, principalmente quando o setup é lento. Um meio-termo comum é compartilhar dados caros e somente leitura por worker, mantendo tudo aquilo que um teste escreve exclusivo daquele teste.