paint-brush
Medindo o tempo de execução do teste: como otimizar o desempenho do seu conjunto de testespor@launchable
7,486 leituras
7,486 leituras

Medindo o tempo de execução do teste: como otimizar o desempenho do seu conjunto de testes

por Launchable6m2023/07/25
Read on Terminal Reader

Muito longo; Para ler

Entenda por que medir o tempo de execução do teste pode ajudar a acelerar seus ciclos de desenvolvimento e as maneiras ideais de concluir a medição.
featured image - Medindo o tempo de execução do teste: como otimizar o desempenho do seu conjunto de testes
Launchable HackerNoon profile picture

Abordagens de tempo de execução de teste manuais e baseadas em IA que você pode começar a usar hoje

O desenvolvimento de software está ficando progressivamente mais complexo com o passar do tempo, tornando o teste de software igualmente essencial para lançar um produto estável e confiável. Mas sabemos que suítes de teste inchadas são gargalos infames para lançamentos mais rápidos.


As equipes de desenvolvimento precisam ser capazes de acelerar seus testes para manter o progresso em andamento, mas não é tão simples assim.


Medir o tempo de execução de seus conjuntos de teste pode impactar significativamente seu ciclo de desenvolvimento, permitindo ciclos de feedback rápidos, utilização efetiva de recursos e melhor capacidade de manutenção para seus testes. Com tudo isso em mente, você pode ver o quão importante pode ser medir o tempo de execução do teste.

Abordagens tradicionais para medir o tempo de execução do teste

Existem várias maneiras de medir o tempo de execução do teste, o suficiente para atender às necessidades de quase todos. Isso nem sempre significa que eles são a melhor abordagem, no entanto. Vamos falar sobre alguns dos métodos mais comuns dos quais você já deve ter ouvido falar:


  • Cronometragem manual - A maneira mais básica possível, não é totalmente inédita para cronometrar esses testes com relógios e cronômetros tradicionais. Tudo o que você precisa é uma maneira de rastrear a passagem do tempo (como a função de cronômetro do seu telefone) e um bom timing. No entanto, não é nem de longe o mais preciso, pois ainda depende da interação humana.


  • Integrações com ferramentas de CI - Muitas ferramentas de CI incluem recursos para medir o tempo de execução do teste. Ferramentas como TravisCI e Jenkins podem registrar o horário de início e término dos trabalhos fornecidos, dando a você uma ideia de como eles funcionam e se eles mudam.


  • Analisando logs e usando carimbos de data/hora - Outra maneira mais “manual” é simplesmente configurar logs em seus testes enquanto eles são executados. Não importa qual linguagem você use, sempre haverá uma função print() equivalente em algum lugar. Você também pode definir seus testes para registrar esses resultados para uma análise mais fácil, mas qualquer uma das opções tornará a escrita de testes mais longa.

Exemplo de análise de logs em Python

Quando sua estrutura de teste gera logs, você pode analisá-los para extrair as informações necessárias, como hora de início e hora de conclusão do teste.


 import re def parse_logs(log_file): with open(log_file, 'r') as f: logs = f.readlines() test_start_time = None test_end_time = None for line in logs: if 'Test started' in line: test_start_time = extract_timestamp(line) elif 'Test completed' in line: test_end_time = extract_timestamp(line) if test_start_time and test_end_time: test_runtime = test_end_time - test_start_time print(f"Test runtime: {test_runtime}") def extract_timestamp(log_line): # Regular expression to extract timestamp (assuming format: [YYYY-MM-DD HH:MM:SS]) timestamp_pattern = r'\[(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\]' match = re.search(timestamp_pattern, log_line) if match: timestamp = match.group(1) return convert_to_datetime(timestamp) return None def convert_to_datetime(timestamp): from datetime import datetime datetime_format = "%Y-%m-%d %H:%M:%S" return datetime.strptime(timestamp, datetime_format) # Usage parse_logs('test_logs.txt')


Neste exemplo, a função parse_logs lê o arquivo de log linha por linha e procura marcadores específicos ('Teste iniciado' e 'Teste concluído') para extrair os registros de data e hora correspondentes. Ele usa expressões regulares para extrair o registro de data e hora e o converte em um objeto DateTime para cálculos adicionais.

Exemplo de timestamps com Python

Outra abordagem é registrar timestamps diretamente em seu código de teste. No exemplo abaixo, a função run_test registra a hora de início usando time.time() antes de executar a lógica de teste.


Após a conclusão do teste, ele calcula o tempo de execução subtraindo o horário de início do horário de término, que também é obtido usando time.time().


O resultado é impresso como o tempo de execução do teste em segundos.


 import time def run_test(): start_time = time.time() # Test logic goes here # ... end_time = time.time() test_runtime = end_time - start_time print(f"Test runtime: {test_runtime} seconds") # Usage run_test()


Independentemente da sua abordagem, esses métodos tendem a ter algumas armadilhas. É difícil obter resultados totalmente precisos com esses métodos, seja pela possibilidade de erro humano ou por fatores externos.


Além disso, muitos deles não podem ser dimensionados com seus testes. Isso significa que você precisa encontrar uma maneira mais precisa de medir.

Por que devo medir o tempo de execução do teste?

Falamos muito sobre o como, mas e o porquê? Seus testes são críticos, mas o pipeline de teste pode ser um gargalo de entrega.


Ao rastrear como seus testes são executados, você pode ter uma visão completa de seu desempenho, agrupar a inteligência do conjunto de testes e tomar medidas para simplificar ainda mais seus testes, incluindo três áreas comuns:

Otimização de Paralelização

Medir o tempo de execução do conjunto de testes permite identificar quais testes têm o tempo de execução mais longo. Essa transparência permite que você otimize ainda mais os testes, quando possível, por testes paralelos que fornecem resultados mais rápidos e um ciclo de feedback mais curto.

Alocação de recursos

Medir com precisão o tempo de execução do teste pode ajudá-lo a planejar as fases de teste com mais eficiência. Você poderá alocar tempo e capacidade de computação para seus testes mais longos e evitar gargalos posteriormente no pipeline.

Priorização de teste

Identificar seus testes mais lentos também permite que você dê um passo para trás e priorize os testes mais críticos e o que pode ser guardado para mais tarde. Dessa forma, você pode executar seus testes mais rápidos primeiro, fornecendo informações cruciais sobre a compilação antes que seus testes mais longos comecem a funcionar.

Melhoria continua

Os tempos de execução de teste são críticos em pipelines de CI/CD, onde o feedback rápido é essencial. Medindo e otimizando seus tempos de execução de teste, você pode reduzir o tempo necessário para o processo de CI/CD , permitindo uma implantação mais rápida.


Isso, por sua vez, melhora a agilidade geral do processo de desenvolvimento e permite iterações mais frequentes.

Automatize o tempo de execução do teste de rastreamento e os KPIs críticos com o Launchable

É bastante claro que medir o tempo de execução do teste pode ser um fator enorme em seu processo geral de teste. E com o Launchable, você pode começar a medir imediatamente e tornar seus testes mais eficientes.

Como o Launchable Measure testa o tempo de execução?

O Launchable automatiza o rastreamento do tempo de execução do teste, integrando-se a todas as suas ferramentas CI/CD favoritas, incluindo TravisCI, Jenkins e GitHub Actions. Isso significa que você pode deslizar facilmente o Launchable para o pipeline existente, permitindo que nosso modelo de ML analise seus testes.


E quando estivermos dentro, podemos medir perfeitamente o tempo de execução do teste em várias compilações, fornecendo informações críticas sobre seus testes além do tempo de execução .

Insights de teste mais profundos além do tempo de execução para integridade completa do conjunto de testes

Capacite sua equipe para quantificar o impacto das alterações em seus conjuntos de teste além do tempo de execução do teste. O Launchable fornece métricas de integridade do conjunto de testes para uma transparência mais profunda do conjunto de testes para controle de qualidade orientado por dados.


  • Priorize testes flaky impactantes: os testes flaky podem ser uma grande dor de cabeça para as equipes de QA, consumindo tempo e esforço. O Launchable identifica testes inconsistentes com base em seu impacto, permitindo que você os resolva e execute com mais confiança. Obtenha insights de nosso relatório diário de Flakiness e corrija seus testes com confiança.


  • Acompanhe a duração da sessão de teste: meça o tempo que leva para o seu conjunto de testes ser executado em várias sessões. Nosso recurso de rastreamento destaca os testes que excedem as durações esperadas, ajudando você a identificar e resolver quaisquer problemas de desempenho.


  • Otimize a frequência da sessão de teste: monitore a frequência com que seus conjuntos de teste são executados e combine-a com a duração da sessão. Certifique-se de que os testes sejam executados nos intervalos corretos. Além disso, a seleção preditiva de testes economiza tempo e recursos executando os testes mais relevantes nos momentos ideais.


  • Identifique a taxa de falha da sessão de teste: identifique os testes que falham com frequência e investigue possíveis problemas com os testes ou a compilação atual. Obtenha informações valiosas sobre a estabilidade do seu processo de teste e tome decisões informadas para melhorar a qualidade geral.


Utilizar sua infraestrutura de teste com eficiência é fundamental para minimizar o tempo ocioso e maximizar seus recursos. Identifique facilmente qualquer gargalo que atrapalhe o desempenho medindo o tempo de execução do teste com o Launchable.


Obtenha todas as informações necessárias para testar padrões e tendências de suíte em seus testes, permitindo que você tome decisões informadas e baseadas em dados para otimizar seus testes. E, ao fazer isso, você pode simplificar seu processo geral de teste .