Partilhar via


Execute testes em paralelo para qualquer executor de teste

Serviços de DevOps do Azure | Azure DevOps Server | Azure DevOps Server 2022

Executar testes para validar alterações no código é fundamental para manter a qualidade. Para que a prática de integração contínua seja bem-sucedida, é essencial que você tenha um bom conjunto de testes que seja executado com cada compilação. No entanto, à medida que a base de código cresce, o conjunto de testes de regressão tende a crescer também e a execução de um teste de regressão completa pode levar muito tempo. Às vezes, os testes em si podem ser de longa duração - este é normalmente o caso se você escrever testes de ponta a ponta. Isso reduz a velocidade com que o valor para o cliente pode ser entregue, já que os pipelines não podem processar compilações com rapidez suficiente.

Executar testes em paralelo é uma ótima maneira de melhorar a eficiência dos pipelines de CI/CD. Isso pode ser feito facilmente empregando a capacidade adicional oferecida pela nuvem. Este artigo descreve como você pode paralelizar testes usando vários agentes para processar trabalhos.

Pré-requisito

Familiarize-se com os conceitos de agentes e empregos. Cada agente pode executar apenas um trabalho de cada vez. Para executar vários trabalhos em paralelo, você deve configurar vários agentes. Você também precisa de trabalhos paralelos suficientes.

Configuração de trabalhos paralelos

Especifique a estratégia 'paralela' no YAML e indique quantos trabalhos devem ser despachados. As variáveis System.JobPositionInPhase e System.TotalJobsInPhase são adicionadas a cada trabalho.

jobs:
- job: ParallelTesting
  strategy:
    parallel: 2

Sugestão

Você pode especificar até 99 agentes para ampliar os testes para grandes conjuntos de testes.

Fatiamento do conjunto de testes

Para executar testes em paralelo, você deve primeiro fatiar (ou particionar) o conjunto de testes para que cada fatia possa ser executada independentemente. Por exemplo, em vez de executar um grande conjunto de 1000 testes em um único agente, você pode usar dois agentes e executar 500 testes em paralelo em cada agente. Ou você pode reduzir ainda mais o tempo necessário para executar os testes usando 8 agentes e executando 125 testes em paralelo em cada agente.

A etapa que executa os testes em um trabalho precisa saber qual fatia de teste deve ser executada. As variáveis System.JobPositionInPhase e System.TotalJobsInPhase podem ser usadas para este fim:

  • System.TotalJobsInPhase indica o número total de fatias (você pode pensar nisso como "totalSlices")
  • System.JobPositionInPhase identifica uma fatia específica (você pode pensar nisso como "sliceNum")

Se você representar todos os arquivos de teste como uma matriz unidimensional, cada tarefa poderá executar um arquivo de teste indexado em [sliceNum + totalSlices], até que todos os arquivos de teste sejam executados. Por exemplo, se você tiver seis arquivos de teste e dois trabalhos paralelos, o primeiro trabalho (fatia0) executará arquivos de teste numerados 0, 2 e 4, e o segundo trabalho (fatia1) executará arquivos de teste numerados 1, 3 e 5.

6 testes em 2 fatias

Se você usar três trabalhos paralelos, o primeiro trabalho (fatia0) executará arquivos de teste numerados 0 e 3, o segundo trabalho (fatia1) executará arquivos de teste numerados 1 e 4 e o terceiro trabalho (fatia2) executará arquivos de teste numerados 2 e 5.

6 testes em 3 fatias

Código de exemplo

Este exemplo do .NET Core usa --list-tests e --filter parâmetros de dotnet test para fatiar os testes. Os testes são executados usando NUnit. Os resultados do teste criados pela DotNetCoreCLI@2 tarefa de teste são então publicados no servidor. Importe (para o Azure Repos ou Azure DevOps Server) ou fork (para o GitHub) este repositório:

https://github.com/idubnori/ParallelTestingSample-dotnet-core

Este exemplo Python usa um script do PowerShell para fatiar os testes. Os testes são executados usando pytest. Os resultados do teste no estilo JUnit criados pelo pytest são então publicados no servidor. Importe (para o Azure Repos ou Azure DevOps Server) ou fork (para o GitHub) este repositório:

https://github.com/PBoraMSFT/ParallelTestingSample-Python

Este exemplo de JavaScript usa um script bash para fatiar os testes. Os testes são realizados usando o corredor mocha. Os resultados do teste no estilo JUnit criados pelo mocha são então publicados no servidor. Importe (para o Azure Repos ou Azure DevOps Server) ou fork (para o GitHub) este repositório:

https://github.com/PBoraMSFT/ParallelTestingSample-Mocha

O código de exemplo inclui um arquivo azure-pipelines.yml na raiz do repositório que você pode usar para criar um pipeline. Siga todas as instruções em Criar seu primeiro pipeline para criar um pipeline e veja o fatiamento de teste em ação.

Combine paralelismo para testes paralelos massivos

Quando trabalhos paralelos são usados em um pipeline, o pipeline emprega várias máquinas para executar cada trabalho em paralelo. A maioria dos executores de teste fornece a capacidade de executar testes em paralelo em uma única máquina (normalmente criando vários processos ou threads que são executados em paralelo). Os dois tipos de paralelismo podem ser combinados para testes paralelos maciços, o que torna os testes em dutos extremamente eficientes.

Ajuda e suporte