paint-brush
Mesurer la durée d'exécution des tests : comment optimiser les performances de votre suite de testspar@launchable
7,485 lectures
7,485 lectures

Mesurer la durée d'exécution des tests : comment optimiser les performances de votre suite de tests

par Launchable6m2023/07/25
Read on Terminal Reader

Trop long; Pour lire

Comprenez pourquoi la mesure de la durée d'exécution des tests peut vous aider à accélérer vos cycles de développement et les moyens optimaux d'effectuer la mesure.
featured image - Mesurer la durée d'exécution des tests : comment optimiser les performances de votre suite de tests
Launchable HackerNoon profile picture

Approches d'exécution de test manuelles et alimentées par l'IA que vous pouvez commencer à utiliser dès aujourd'hui

Le développement de logiciels devient de plus en plus complexe au fil du temps, ce qui rend les tests de logiciels tout aussi essentiels à la sortie d'un produit stable et fiable. Mais nous savons que les suites de tests gonflées sont des goulots d'étranglement infâmes pour des versions plus rapides.


Les équipes de développement doivent pouvoir accélérer leurs tests pour continuer à progresser, mais ce n'est pas si simple.


La mesure de la durée d'exécution de vos suites de tests peut avoir un impact significatif sur votre cycle de développement, permettant des boucles de rétroaction rapides, une utilisation efficace des ressources et une meilleure maintenabilité de vos tests. Avec tout cela à l'esprit, vous pouvez voir à quel point la mesure de la durée d'exécution des tests peut être importante.

Approches traditionnelles pour mesurer la durée d'exécution des tests

Il existe plusieurs façons de mesurer la durée d'exécution des tests, suffisamment pour répondre aux besoins de presque tout le monde. Cela ne signifie pas toujours qu'ils sont la meilleure approche, cependant. Parlons de certaines des méthodes les plus courantes dont vous avez peut-être entendu parler :


  • Chronométrage manuel - Le moyen le plus basique possible, il n'est pas totalement inconnu de chronométrer ces tests avec des horloges et des chronomètres traditionnels. Tout ce dont vous avez besoin est un moyen de suivre le passage du temps (comme la fonction chronomètre de votre téléphone) et un bon timing. Cependant, il est loin d'être le plus précis, car il repose toujours sur l'interaction humaine.


  • Intégrations avec les outils CI - De nombreux outils CI incluent des fonctionnalités permettant de mesurer la durée d'exécution des tests. Des outils comme TravisCI et Jenkins peuvent enregistrer l'heure de début et de fin des tâches fournies, vous donnant un aperçu de leur performance et de leur évolution.


  • Analyse des journaux et utilisation des horodatages - Une autre méthode plus "manuelle" consiste simplement à configurer des journaux dans vos tests au fur et à mesure de leur exécution. Quel que soit le langage que vous utilisez, il y aura toujours une fonction print() équivalente quelque part. Vous pouvez également configurer vos tests pour enregistrer ces résultats afin de faciliter l'analyse, mais l'un ou l'autre choix rendra l'écriture des tests plus longue.

Exemple d'analyse de journaux en Python

Lorsque votre infrastructure de test génère des journaux, vous pouvez les analyser pour extraire les informations nécessaires telles que l'heure de début et l'heure de fin du test.


 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')


Dans cet exemple, la fonction parse_logs lit le fichier journal ligne par ligne et recherche des marqueurs spécifiques ("Test démarré" et "Test terminé") pour extraire les horodatages correspondants. Il utilise des expressions régulières pour extraire l'horodatage et le convertit en un objet DateTime pour d'autres calculs.

Exemple d'horodatage avec Python

Une autre approche consiste à enregistrer les horodatages directement dans votre code de test. Dans l'exemple ci-dessous, la fonction run_test enregistre l'heure de début à l'aide de time.time() avant d'exécuter la logique de test.


Une fois le test terminé, il calcule le temps d'exécution en soustrayant l'heure de début de l'heure de fin, qui est également obtenue à l'aide de time.time().


Le résultat est imprimé en tant que durée d'exécution du test en secondes.


 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()


Quelle que soit votre approche, ces méthodes ont tendance à présenter des pièges. Il est difficile d'obtenir des résultats totalement précis à partir de ces méthodes, que ce soit en raison du risque d'erreur humaine ou de facteurs externes.


De plus, beaucoup d'entre eux ne peuvent pas évoluer avec vos tests. Cela signifie que vous devez trouver un moyen plus précis de mesurer.

Pourquoi devrais-je quand même mesurer la durée d'exécution des tests ?

Nous n'avons cessé de parler du comment, mais qu'en est-il du pourquoi ? Vos tests sont critiques, mais le pipeline de test peut être un goulot d'étranglement de livraison.


En suivant l'exécution de vos tests, vous pouvez avoir une vue d'ensemble de leurs performances, regrouper l'intelligence de la suite de tests et prendre des mesures pour rationaliser davantage vos tests, y compris trois domaines communs :

Optimisation de la parallélisation

La mesure de la durée d'exécution de la suite de tests vous permet de repérer les tests dont la durée d'exécution est la plus longue. Cette transparence vous permet d' optimiser davantage les tests, lorsque cela est possible, en effectuant des tests en parallèle, ce qui vous donne des résultats plus rapides et une boucle de rétroaction plus courte.

Allocation des ressources

Mesurer avec précision votre temps d'exécution de test peut vous aider à planifier vos phases de test plus efficacement. Vous pourrez allouer du temps et de la puissance de calcul à vos tests plus longs et éviter les goulots d'étranglement plus tard dans le pipeline.

Priorisation des tests

L'identification de vos tests les plus lents vous permet également de prendre du recul et de prioriser les tests les plus critiques et ce qui peut être sauvegardé pour plus tard. De cette façon, vous pouvez faire exécuter vos tests plus rapides en premier, vous donnant des informations cruciales sur la construction avant que vos tests plus longs ne se mettent au travail.

Amélioration continue

Les durées d'exécution des tests sont essentielles dans les pipelines CI/CD, où un retour rapide est essentiel. En mesurant et en optimisant vos temps d'exécution de test, vous pouvez réduire le temps requis pour le processus CI/CD , permettant un déploiement plus rapide.


Ceci, à son tour, améliore l'agilité globale du processus de développement et permet des itérations plus fréquentes.

Automatisez le suivi de l'exécution des tests et des KPI critiques avec Launchable

Il est assez clair que la mesure de la durée d'exécution des tests peut être un facteur important dans votre processus de test global. Et avec Launchable, vous pouvez commencer à mesurer immédiatement et rendre vos tests plus efficaces.

Comment Launchable mesure-t-il le temps d'exécution des tests ?

Launchable automatise le suivi de l'exécution des tests en s'intégrant à tous vos outils CI/CD préférés, y compris TravisCI, Jenkins et GitHub Actions. Cela signifie que vous pouvez facilement faire glisser Launchable dans votre pipeline existant, permettant à notre modèle ML d'analyser vos tests.


Et une fois que nous y sommes, nous pouvons mesurer de manière transparente la durée d'exécution des tests sur plusieurs versions, vous donnant des informations essentielles sur vos tests au-delà de la seule durée d'exécution .

Des informations de test plus approfondies au-delà de l'exécution pour une santé complète de la suite de tests

Donnez à votre équipe les moyens de quantifier l'impact des changements dans vos suites de tests au-delà de l'exécution des tests. Launchable fournit des métriques de santé de la suite de tests pour une plus grande transparence de la suite de tests pour l'assurance qualité basée sur les données.


  • Donnez la priorité aux tests floconneux percutants : les tests floconneux peuvent être un énorme casse-tête pour les équipes d'assurance qualité, consommant du temps et des efforts. Launchable identifie les tests aléatoires en fonction de leur impact, ce qui vous permet de les traiter et de les exécuter de manière plus fiable. Obtenez des informations de notre rapport quotidien Flakiness et corrigez vos tests en toute confiance.


  • Suivi de la durée des sessions de test : mesurez le temps nécessaire à votre suite de tests pour s'exécuter sur plusieurs sessions. Notre fonction de suivi met en évidence les tests qui dépassent les durées prévues, vous aidant à identifier et à résoudre tout problème de performances.


  • Optimisez la fréquence des sessions de test : surveillez la fréquence d'exécution de vos suites de tests et combinez-la avec la durée de la session. Assurez-vous que les tests sont exécutés aux bons intervalles. De plus, Predictive Test Selection permet d'économiser du temps et des ressources en exécutant les tests les plus pertinents aux moments optimaux.


  • Identifiez le taux d'échec des sessions de test : identifiez les tests qui échouent fréquemment et examinez les problèmes potentiels avec les tests ou la version actuelle. Obtenez des informations précieuses sur la stabilité de votre processus de test et prenez des décisions éclairées pour améliorer la qualité globale.


L'utilisation efficace de votre infrastructure de test est essentielle pour minimiser les temps d'inactivité et maximiser vos ressources. Identifiez facilement les goulots d'étranglement qui entravent les performances en mesurant la durée d'exécution des tests avec Launchable.


Obtenez toutes les informations dont vous avez besoin pour tester les modèles et les tendances de la suite dans vos tests, ce qui vous permet de prendre des décisions éclairées et basées sur les données pour optimiser vos tests. Et ce faisant, vous pouvez rationaliser votre processus de test global .