"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como identificar e mitigar testes instáveis: melhores práticas e estratégias.

Como identificar e mitigar testes instáveis: melhores práticas e estratégias.

Publicado em 31/07/2024
Navegar:896

How to Identify and Mitigate Flaky Tests: Best Practices and Strategies.

Aprimorando a confiabilidade e a eficiência dos testes em pipelines de CI/CD

Um teste instável é um teste que às vezes passa e às vezes falha sem nenhuma alteração no código que está sendo testado. Esses testes podem ser particularmente problemáticos porque prejudicam a confiabilidade do conjunto de testes.

Considere que seu pipeline de CI/CD está configurado de forma que somente após a aprovação da compilação, somente se seu código passar em um conjunto de casos de teste predefinidos.

Em uma situação ideal, você deve ter definido a prioridade para cada caso de teste e assumir que a base de código mais recente passou em pelo menos alguma porcentagem de casos.

Mas devido aos casos de teste instáveis, que continuam falhando, pois podem estar obsoletos ou o caso de uso foi alterado, seu caso de teste falha e mesclar a solicitação pull se torna um pesadelo. Em vez de reduzir a percentagem de casos aprovados, deveríamos considerar renovar esses casos de teste.

Razão para entender o Flaky Test.

  1. Resultados de teste imprevisíveis: testes instáveis ​​causam imprevisibilidade, às vezes passando e outras vezes falhando, mesmo que o código não tenha mudado. Essa aleatoriedade pode dificultar a confiança nos resultados dos testes.

  2. Depuração complexa: Rastrear a causa raiz de um teste instável pode ser um desafio porque o problema pode não ser reproduzido de forma consistente, dificultando sua identificação e correção.

  3. Desperdício de tempo e recursos: os desenvolvedores podem gastar uma quantidade significativa de tempo reexecutando testes, investigando falsos positivos e depurando problemas que não estão realmente relacionados à funcionalidade do código.

  4. Impacto na integração contínua (CI): testes instáveis ​​podem interromper pipelines de integração contínua, levando a falhas de construção desnecessárias e reduzindo a eficiência geral dos processos de testes automatizados.

  5. Falsa confiança ou desconfiança: testes instáveis ​​podem criar falsa confiança quando são aprovados esporadicamente ou causar desconfiança no conjunto de testes quando falham de forma imprevisível, tornando mais difícil confiar nos resultados dos testes.

Maneiras de mitigar casos de teste instáveis.

  1. Práticas recomendadas para mitigar: para reduzir testes instáveis, os desenvolvedores podem simular dependências externas, usar dados determinísticos, garantir que os testes sejam isolados e evitar depender de tempo ou ordem de execução.

  2. Detecção automatizada: implementar ferramentas automatizadas que detectam testes instáveis ​​executando testes várias vezes e comparando resultados pode ajudar a identificar e resolver problemas no início do ciclo de desenvolvimento.

  3. Isolamento de teste: garantir que cada teste seja executado em isolamento completo, sem depender de estados compartilhados ou fatores externos, pode reduzir significativamente as chances de instabilidade.

  4. Manutenção regular: revisar e refatorar regularmente o conjunto de testes para remover ou corrigir testes instáveis ​​ajuda a manter a integridade e a confiabilidade do processo de teste ao longo do tempo.

Diferentes estratégias e ferramentas para mitigar casos de teste instáveis

  1. Jenkins, CircleCI, Travis CI: Ferramentas de integração contínua/implantação contínua (CI/CD) como essas podem ser configuradas para executar novamente testes que falham, ajudando a identificar testes instáveis. Eles geralmente têm plug-ins ou suporte integrado para lidar com testes instáveis.

  2. Docker: As empresas usam o Docker para criar ambientes isolados para execução de testes. Isso garante que os testes tenham um ambiente consistente e limpo cada vez que são executados, reduzindo a instabilidade causada por diferenças ambientais.

  3. Máquinas Virtuais (VMs): Semelhante ao Docker, as VMs podem ser usadas para garantir que os testes sejam executados em um ambiente controlado e isolado, minimizando a interferência de outros processos ou dependências.

  4. Análise estatística usando aprendizado de máquina: alguns sistemas avançados usam aprendizado de máquina para analisar resultados de testes e identificar padrões indicativos de testes instáveis. Isso pode ajudar a identificar e abordar proativamente a instabilidade.

  5. Políticas de revisão de código e ganchos de controle de versão: A implementação de políticas rígidas de revisão de código que incluem verificações de possíveis fontes de instabilidade pode impedir a introdução de testes fragmentados.
    Usar ganchos de pré-confirmação ou outros mecanismos de controle de versão para executar testes de maneira controlada antes que as alterações sejam mescladas pode detectar testes instáveis ​​antecipadamente.

Estratégias de algumas das grandes organizações

  1. Google:
  • Reexecutar testes com falha: o Google tem uma política em que eles executam novamente testes que não conseguem determinar se a falha é consistente. Isso ajuda a identificar testes instáveis. Eles também têm ferramentas e infraestrutura internas para gerenciar e mitigar falhas em seus extensos conjuntos de testes.

  • Isolamento de teste: o Google enfatiza a importância do isolamento de teste para garantir que os testes não interfiram uns com os outros, o que é fundamental para reduzir a instabilidade.

  1. Microsoft:
  • Análise e relatórios de testes: a Microsoft usa análises detalhadas de testes e ferramentas de relatórios para rastrear testes instáveis. Ao analisar os resultados dos testes ao longo do tempo, eles podem identificar padrões e identificar testes instáveis.

  • Quarentena de testes instáveis: A Microsoft às vezes coloca testes instáveis ​​em quarentena, separando-os do conjunto de testes principal até que sejam corrigidos para evitar que afetem os resultados gerais dos testes.

3. Facebook:

  • Detox: O Facebook desenvolveu uma biblioteca de código aberto chamada Detox para testar seus aplicativos móveis. O Detox garante que os testes sejam executados em um estado e ambiente consistentes, reduzindo a instabilidade causada por operações assíncronas e outros problemas de tempo.

  • Testes Contínuos: O Facebook integra testes contínuos em seu processo de desenvolvimento, usando ferramentas para executar novamente testes automaticamente e identificar comportamentos instáveis ​​no início do ciclo de desenvolvimento.

4. Netflix:

  • Engenharia do Caos: A Netflix emprega práticas de engenharia do caos para testar a resiliência de seus sistemas. Ao introduzir intencionalmente falhas e interrupções, eles podem identificar testes instáveis ​​e melhorar a robustez de seus testes e sistemas.

  • Repetição automatizada: a Netflix usa mecanismos automatizados de nova tentativa em seus pipelines de CI/CD para executar novamente testes que falham intermitentemente, ajudando a identificar e gerenciar testes instáveis.

5. LinkedIn:

  • Ferramentas de gerenciamento de testes instáveis: O LinkedIn desenvolveu ferramentas especificamente para gerenciar testes instáveis. Essas ferramentas ajudam a rastrear testes instáveis, fornecer visibilidade de sua ocorrência e priorizar sua resolução.

  • Padronização do ambiente de teste: O LinkedIn se concentra na padronização de ambientes de teste para reduzir a variabilidade e garantir que os testes sejam executados em condições consistentes, o que ajuda a mitigar a instabilidade.

Sobre o autor

Apoorv Tomar é desenvolvedor de software e bloga no **Mindroast. Você pode se conectar nas redes sociais. Assine o **newsletter para receber o conteúdo selecionado mais recente.

Declaração de lançamento Este artigo está reproduzido em: https://dev.to/apoorvtomar/how-to-identify-and-mitigate-flaky-tests-best-practices-and-strategies-1cb0?1 Se houver alguma violação, entre em contato com study_golang @163.com excluir
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3