Acelerando o IC com a AWS CodeBuild: Execução de teste paralelo agora disponível


Acelerando o IC com a AWS CodeBuild: Execução de teste paralelo agora disponível

Estou animado para anunciar isso AWS CodeBuild Agora suporta a execução de testes paralelos, para que você possa executar suas suítes de teste simultaneamente e reduzir significativamente os tempos de construção.

Com O projeto de demonstração que escrevi para este put upo tempo whole de teste caiu de 35 minutos para 6 minutos, incluindo o tempo para provisionar os ambientes. Essas duas capturas de tela do Console de gerenciamento da AWS Mostre a diferença.

Execução seqüencial da suíte de teste

Resultados de teste paralelo de código de código

Execução paralela da suíte de teste

Resultados de teste paralelo de código de código

Tempos de teste muito longos representam um desafio significativo ao correr Integração contínua (IC) em escala. À medida que os projetos crescem em complexidade e tamanho da equipe, o tempo necessário para executar suítes abrangentes de testes pode aumentar drasticamente, levando a tempos de execução de pipeline prolongados. Isso não apenas atrasa a entrega de novos recursos e correções de bugs, mas também dificulta a produtividade do desenvolvedor, forçando -os a aguardar os resultados da construção antes de prosseguir com suas tarefas. Eu experimentei oleodutos que levaram até 60 minutos para ser executados, apenas para falhar na última etapa, exigindo uma reprise completa e atrasos. Esses ciclos longos podem corroer a confiança do desenvolvedor no processo de IC, contribuir para a frustração e, finalmente, diminuir a velocidade de todo o ciclo de entrega de software program. Além disso, os testes de longa execução podem levar à contenção de recursos, aumento de custos devido ao poder de computação desperdiçado e redução da eficiência geral do processo de desenvolvimento.

Com a execução de testes paralelos no CodeBuild, agora você pode executar seus testes simultaneamente em vários ambientes de computação de construção. Esse recurso implementa uma abordagem de sharding, na qual cada nó de construção executa independentemente um subconjunto do seu conjunto de testes. O CodeBuild fornece variáveis ​​de ambiente que identificam o número do nó atual e o número whole de nós, que são usados ​​para determinar quais testes cada nó deve ser executado. Não existe um nó de construção de controle ou coordenação entre nós no tempo de construção – cada nó opera independentemente para executar a parte atribuída de seus testes.

Para ativar a divisão de testes, configure o Fanout em lote seção em seu buildspec.xmlespecificando o nível de paralelismo desejado e outros parâmetros relevantes. Além disso, use o CodeBuild-tests-run utilidade em sua etapa de construção, juntamente com os comandos de teste apropriados e o método de divisão escolhido.

Os testes são divididos com base na estratégia de sharding que você especificar. codebuild-tests-run Oferece duas estratégias de sharding:

  • Distribuição igual. Essa estratégia classifica arquivos de teste em ordem alfabética e os distribui em pedaços igualmente em ambientes de teste paralelos. Alterações nos nomes ou quantidade de arquivos de teste podem reatribuir arquivos nos shards.
  • Estabilidade. Essa estratégia corrige a distribuição de testes nos fragmentos usando um algoritmo de hash consistente. Ele mantém atribuições de arquivo a cliques existentes quando novos arquivos são adicionados ou removidos.

O CodeBuild suporta a fusão automática de relatórios de teste ao executar testes em paralelo. Com a fusão automática de relatório de teste, o CodeBuild consolida os relatórios de testes em um resumo de teste único, simplificando a análise de resultados. O relatório mesclado inclui standing agregado de aprovação/falha, durações de teste e detalhes de falha, reduzindo a necessidade de processamento de relatórios manuais. Você pode ver os resultados mesclados no Console CodeBuildrecuperá -los usando o Interface da linha de comando da AWS (AWS CLI)ou integrá -los a outras ferramentas de relatório para otimizar a análise de testes.

Vejamos como funciona
Deixe -me demonstrar como implementar testes paralelos em um projeto. Para esta demonstração, eu criei Um projeto Python muito básico com centenas de testes. Para acelerar as coisas, eu perguntei Desenvolvedor da Amazon Q na linha de comando Para criar um projeto e 1.800 casos de teste. Cada caso de teste está em um arquivo separado e leva um segundo para ser concluído. A execução de todos os testes em uma sequência requer 30 minutos, excluindo o tempo para provisionar o ambiente.

Nesta demonstração, executo a suíte de teste em dez ambientes de computação em paralelo e medem quanto tempo leva para executar a suíte.

Para fazer isso, eu adicionei um buildspec.yml arquivo para o meu projeto.

model: 0.2

batch:
  fast-fail: false
  build-fanout:
    parallelism: 10 # ten runtime environments 
    ignore-failure: false

phases:
  set up:
    instructions:
      - echo 'Putting in Python dependencies'
      - dnf set up -y python3 python3-pip
      - pip3 set up --upgrade pip
      - pip3 set up pytest
  construct:
    instructions:
      - echo 'Operating Python Checks'
      - |
         codebuild-tests-run 
          --test-command 'python -m pytest --junitxml=report/test_report.xml' 
          --files-search "codebuild-glob-search 'checks/test_*.py'" 
          --sharding-strategy 'equal-distribution'
  post_build:
    instructions:
      - echo "Take a look at execution accomplished"

studies:
  pytest_reports:
    recordsdata:
      - "*.xml"
    base-directory: "report"
    file-format: JUNITXML 

Existem três partes a serem destacadas no arquivo YAML.

Primeiro, há um build-fanout seção abaixo batch. O parallelism O comando informa ao CodeBuild quantos ambientes de teste são executados em paralelo. O ignore-failure O comando indica se a falha em alguma das tarefas de construção de fanout pode ser ignorada.

Segundo, eu uso o pré-instalado codebuild-tests-run comando para executar meus testes.

Este comando recebe a lista completa de arquivos de teste e determine qual dos testes deve ser executado no nó atual.

  • Use o sharding-strategy Argumento a escolher entre distribuição igualmente distribuída ou estável, como expliquei anteriormente.
  • Use o files-search Argumento para passar todos os arquivos que são candidatos para uma corrida. Recomendamos usar o fornecido codebuild-glob-search comando por razões de desempenho, mas qualquer ferramenta de pesquisa de arquivos, como Encontre (1)vai funcionar.
  • Eu passo o comando de teste actual para executar no fragmento com o test-command argumento.

Por fim, o studies A seção instrui o CodeBuild a coletar e mesclar os relatórios de teste em cada nó.

Em seguida, abro o console do código para criar um projeto e uma configuração de compilação em lote para este projeto. Não há nada de novo aqui, então vou poupar -lhe os detalhes. A documentação tem todos os detalhes para você começar. O teste paralelo funciona nas compilações em lote. Certificar-se Para configurar seu projeto para executar em lote.

CodeBuild: Crie uma construção em lote

Agora, estou pronto para desencadear uma execução do conjunto de testes. Posso comprometer um novo código no meu repositório do GitHub ou acionar a construção no console.

CodeBuild: Trigger uma nova compilação

Depois de alguns minutos, vejo um relatório de standing das diferentes etapas da construção; com um standing para cada ambiente de teste ou fragmento.

CodeBuild: Status

Quando o teste estiver concluído, seleciono o Relatórios guia para acessar os relatórios de teste mesclados.

CodeBuild: Relatórios de teste

O Relatórios A seção agrega todos os dados de teste de todos os fragmentos e mantém o histórico de todas as compilações. Eu seleciono minha construção mais recente no Histórico de relatórios Seção para acessar o relatório detalhado.

CodeBuild: Relatório de teste

Como esperado, posso ver o standing agregado e particular person para cada um dos meus 1.800 casos de teste. Nesta demonstração, todos eles passam, e o relatório é verde.

Os 1.800 testes do projeto de demonstração levam um segundo cada um para concluir. Quando eu corro essa suíte de teste sequencialmente, levou 35 minutos para ser concluído. Quando executo o conjunto de testes em paralelo em dez ambientes de computação, levou 6 minutos para ser concluído, incluindo o tempo para provisionar os ambientes. A corrida paralela levou 17,9 % do tempo da corrida seqüencial. Os números reais variam de acordo com seus projetos.

Coisas adicionais para saber
Esse novo recurso é compatível com todas as estruturas de teste. A documentação inclui exemplos Para Django, Elixir, Go, Java (Maven), JavaScript (JEST), Kotlin, Phpunit, Pytest, Ruby (Pepino) e Ruby (RSPEC).

Para estruturas de teste que não aceitam listas separadas por espaço, o codebuild-tests-run CLI fornece uma alternativa flexível através do CODEBUILD_CURRENT_SHARD_FILES variável de ambiente. Essa variável contém uma lista de novos caminhos de arquivo de teste para o shard de construção atual. Você pode usá -lo para se adaptar a diferentes requisitos de estrutura de teste e formatar nomes de arquivos de teste.

Você pode personalizar ainda como os testes são divididos em ambientes escrevendo seu próprio script de sharding e usando o CODEBUILD_BATCH_BUILD_IDENTIFIER Variável de ambiente, que é definido automaticamente em cada compilação. Você pode usar essa técnica para implementar paralelização ou otimização específica da estrutura.

Preços e disponibilidade
Com a execução de testes paralelos, agora você pode concluir suas suítes de teste em uma fração do tempo necessário anteriormente, acelerando seu ciclo de desenvolvimento e melhorando a produtividade da sua equipe.

A execução do teste paralela está disponível em todos Três modos de computação oferecidos pela CodeBuild: sob demanda, capacidade reservada e AWS Lambda calcular.

Esta capacidade está disponível hoje em todos Regiões da AWS onde o código de código é oferecido, sem nenhum custo adicional além O preço padrão da compra de código para os recursos de computação utilizados.

Convido você a experimentar a execução de testes paralelos no CodeBuild hoje. Visite o Documentação do AWS CodeBuild Para saber mais e começar com paralelo seus testes.

– seb

PS: Aqui está o immediate que eu costumava criar o aplicativo de demonstração e seu conjunto de testes: “Estou escrevendo uma postagem no weblog para anunciar testes paralelos CodeBuild. Escreva um aplicativo Python muito simples que tenha centenas de testes, cada teste em um arquivo de teste separado. Cada teste leva um segundo para concluir.”


Como está o weblog de notícias? Pegue isso 1 minuto de pesquisa!

(Esse enquete é hospedado por uma empresa externa. AWS lida com suas informações conforme descrito no Aviso de privacidade da AWS. A AWS possuirá os dados coletados por meio desta pesquisa e não compartilharão as informações coletadas com os entrevistados.)

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *