Cartoon gears and neon rolling marbles rolling through a track

Estratégias avançadas de automação de testes com GitHub Actions

Bekah Whittle
Bekah Whittle // Director, Field Services // GitHub

Os testes se tornam mais desafiadores à medida que os projetos se expandem e se tornammais complexos. O GitHub Actions oferece uma variedade de estilos de teste e um mercado avançado adaptado às necessidades de grande escala. Este guia descreve estratégias avançadas de testes com Ações, realçando seu potencial para resolver problemas de escalabilidade de forma eficaz. O Stack Overflow se junta a nós novamente para discutir as otimizações de fluxo de trabalho que simplificaram suas operações.


Neste guia, você aprenderá:

  •  Como navegar e aproveitar o GitHub Marketplace para necessidades de teste avançadas.

  •  Métodos para acelerar linhas do tempo de teste por meio de configurações de matriz.

  •  Como otimizar os fluxos de trabalho com a palavra-chave de 'estratégia' e seleção de tamanho de executor.


Utilização do Marketplace

O GitHub Marketplace serve como uma ferramenta poderosa para aqueles que buscam amplificar a sua capacidade de teste, permitindo que os usuários aproveitem uma infinidade de soluções de teste personalizadas de acordo com necessidades diversas. Não importa se você está começando a fazer testes unitários, verificações de segurança, linting ou testes especializados para plataformas como iOS e Android; o Marketplace tem ferramentas desenvolvidas para o seu requisito específico.

Além disso, a natureza voltada para a comunidade do Marketplace garante um abastecimento contínuo de ferramentas e ações, cada uma com o objetivo de abordar cenários de teste exclusivos. Ao navegar pelo Marketplace, os usuários podem descobrir e integrar essas ferramentas, aprimorando assim as suas estratégias de teste e garantindo uma cobertura abrangente.

O poder das matrizes no teste de escalabilidade

As matrizes no GitHub Actions permitem testar em diferentes sistemas e versões de software de uma só vez. Isso acelera o processo de teste e garante que o software funcione em configurações diferentes.

Por exemplo, é possível usar matrizes para testar o software no Windows e no Ubuntu, usando versões diferentes de software, de uma só vez. Isso economiza tempo e confirma que o software funciona bem em diferentes configurações.

O principal benefício de usar matrizes é a velocidade. Os testes são executados ao mesmo tempo, não um depois do outro, agilizando todo o processo e fornecendo feedbacks rápidos.

No exemplo abaixo, definimos strategy com matrix que contém dois vetores: version e os

jobs:
  example_matrix:
    strategy:
      matrix:
        version: [10, 12, 14]
        os: [ubuntu-latest, windows-latest]

Essa configuração gerará automaticamente seis combinações diferentes de versões e sistemas operacionais conforme mostrado:

{version: 10, os: ubuntu-latest}
{version: 10, os: windows-latest}
{version: 12, os: ubuntu-latest}
{version: 12, os: windows-latest}
{version: 14, os: ubuntu-latest}
{version: 14, os: windows-latest}

Essas combinações são executadas em paralelo, permitindo testar em várias versões de software e sistemas operacionais simultaneamente. Isso acelera drasticamente o tempo de teste e fornece uma cobertura abrangente.

Usamos matrizes dinâmica no GitHub Actions para configurar ambientes de teste personalizados para pull requests (PRs) individuais. Quando membros da equipe criam uma PR, podem aplicar etiquetas específicas para indicar o tipo de ambiente de teste exigido, seja uma plataforma pública, Stack Overflow for Teams ou uma configuração exclusiva. Em seguida, geramos uma matriz dinâmica baseada em etiquetas e a usamos para configurar o ambiente preciso para os testes. Essa matriz pode até ser usada para preencher o ambiente com subconjuntos de dados específicos, permitindo testes de integração mais robustos e expressivos. Essa abordagem ajuda a acelerar nossos ciclos de desenvolvimento, reduzir erros e garantir a entrega de um produto confiável e de alta qualidade.

Jason Schwanz
Jason Schwanz // Staff Site Reliability Engineer // Stack Overflow

Estabelecendo a 'estratégia' de teste

A strategy é fundamental para os testes de escala corporativa. Ela fornece uma abordagem estruturada para definir e gerenciar fluxos de trabalho adaptados a projetos complexos. Uma palavra-chave importante em strategy é fail fast. Ela foi projetada com eficiência em mente, interrompendo um teste assim que uma falha é detectada, economizando tempo e recursos preciosos. Para corporações que lidam com várias plataformas, strategy também permite testes simultâneos em diferentes sistemas operacionais e versões, garantindo compatibilidade e cobertura robustas.

Seleção do tamanho do executor

Selecionar o tamanho certo do executor é um equilíbrio. Trata-se de garantir que o teste seja concluído rapidamente sem sobrecarregar ou subutilizar recursos. Por exemplo, embora um executor de dois núcleos possa ser o suficiente para as tarefas leves, os testes intensos podem precisar de um executor de oito núcleos para alcançar resultados em tempo hábil.

Para tomadores de decisão corporativos, a solução está na compreensão da natureza dos testes e no alinhamento adequado do tamanho do executor, otimizando o tempo e os recursos.

No Stack Overflow, gerenciamos todos os grupos de executores (runners group) no nível empresarial para manter as coisas simples, especialmente porque somos uma equipe pequena supervisionando uma grande área do GitHub. Recomendamos focar na capacidade dos executores: por exemplo, temos um grupo de executores específico para tarefas que exigem muitos recursos, como testes funcionais que precisam de executores grandes. Assim, quando testamos ou trabalhamos em projetos de prova de conceito, evitamos usar executores neste grupo para controlar custos.

Jason Schwanz
Jason Schwanz // Staff Site Reliability Engineer // Stack Overflow

A seguir: Estratégias de implantação avançada no GitHub Actions

Tudo pronto para a próxima etapa? Nosso guia sobre implantação avançada com o GitHub Actions a seguir apresentará estratégias de implantação escalável.