Pular para o conteúdo
SDETRole
SDETRole

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.

Digite para buscar em todo o SDETRole.

Busca de texto completo com Pagefind · roda no seu navegador Abrir página de busca →