Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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.TotalJobsInPhaseindica o número total de fatias (você pode pensar nisso como "totalSlices") -
System.JobPositionInPhaseidentifica 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.
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.
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
- Consulte a nossa página de resolução de problemas
- Obtenha conselhos sobre o Stack Overflow e obtenha suporte através da Comunidade de Programadores