Optimisation des tests dans Datadog

Ce produit n'est pas pris en charge par le site Datadog que vous avez sélectionné. ().
learning center
Essayez les premiers pas avec l'optimisation des tests dans le Centre d'apprentissage

Apprenez à accélérer vos pipelines CI en configurant la surveillance des tests, en identifiant les tests instables et en utilisant l'analyse d'impact des tests pour exécuter uniquement les tests qui comptent.

INSCRIVEZ-VOUS MAINTENANT

Aperçu

L’optimisation des tests fournit une vue axée sur les tests de la santé de votre CI en affichant des métriques et des résultats importants de vos tests. Cela peut vous aider à enquêter sur les problèmes de performance et les échecs de tests qui sont les plus pertinents pour votre travail, en vous concentrant sur le code dont vous êtes responsable, plutôt que sur les pipelines qui exécutent vos tests.

Configuration

Sélectionnez une option pour configurer l’optimisation des tests dans Datadog :

.net
java
javascript
php
ruby
swift
go
Téléversez des tests junit vers Datadog

En plus des tests, l’optimisation des tests offre une visibilité sur l’ensemble de la phase de test de votre projet.

Fonctionnalités prises en charge

.NETJava/JVM‑baséJavascriptPythonRubySwiftGoJUnit Xml
Résultats précis des temps/durées

Résolution en microsecondes pour le temps de début et la durée des tests.

Traces distribuées sur les tests d'intégration

Les tests qui effectuent des appels à des services externes instrumentés avec Datadog montrent la trace distribuée complète dans les détails de leur test.

Rapport basé sur un agent

Capacité à rapporter des informations de test via l'Agent Datadog.

Rapport sans agent

Capacité à rapporter des informations de test sans l'Agent Datadog.

Affichage au niveau des collections de tests

Visibilité sur l'ensemble du processus de test, y compris la session, le module, les suites et les tests.

API manuelle

Capacité à créer de manière programmatique des événements de visibilité CI pour des frameworks de test qui ne sont pas pris en charge par l'instrumentation automatique de Datadog.

Propriétaire de code par test

Détection automatique du propriétaire d'un fichier de test basé sur le fichier CODEOWNERS.

(partiellement)
Début/fin du code source

Rapport automatique des lignes de début et de fin d'un test.

(seulement début) (seulement début)
Informations CI et git

Collecte automatique des métadonnées de l'environnement git et CI, telles que le fournisseur CI, le SHA du commit git ou l'URL du pipeline.

Importation des métadonnées Git

Téléversement automatique des informations de l'arbre git utilisées pour l'analyse de l'impact des tests.

Analyse de l'impact des tests *

Capacité d'activer l'analyse de l'impact des tests, qui saute intelligemment les tests en fonction de la couverture de code et des métadonnées git.

Support de la couverture de code

Capacité à rapporter les métriques de couverture de code totale.

(manuel)
Support des tests de référence

Détection automatique des statistiques de performance pour les tests de référence.

Tests paramétrés

Détection automatique des tests paramétrés.

Détection précoce des instabilités *

Réessayez automatiquement les nouveaux tests pour détecter les instabilités.

Réessais automatiques des tests *

Réessayez automatiquement les tests échoués jusqu'à N fois pour éviter de faire échouer la build en raison de l'instabilité des tests.

Relecture des tests échoués *

Accéder aux informations des variables locales sur les tests échoués réessayés.

Intégration RUM de Selenium

Liez automatiquement les sessions de navigateur aux cas de test lors des tests d'applications instrumentées RUM.

* La fonctionnalité est facultative et doit être activée sur la page Paramètres d’optimisation des tests.

Configurations par défaut

Les tests évaluent le comportement du code pour un ensemble de conditions données. Certaines de ces conditions sont liées à l’environnement dans lequel les tests sont exécutés, comme le système d’exploitation ou l’environnement d’exécution utilisé. Le même code exécuté sous différents ensembles de conditions peut se comporter différemment, donc les développeurs configurent généralement leurs tests pour s’exécuter dans différents ensembles de conditions et valident que le comportement est celui attendu pour tous. Cet ensemble spécifique de conditions est appelé une configuration.

Dans l’optimisation des tests, un test avec plusieurs configurations est traité comme plusieurs tests avec un test séparé pour chaque configuration. Dans le cas où l’une des configurations échoue mais que les autres réussissent, seul ce test spécifique et cette combinaison de configuration sont marqués comme échoués.

Par exemple, supposons que vous testiez un seul commit et que vous ayez un test Python qui s’exécute contre trois versions différentes de Python. Si le test échoue pour l’une de ces versions, ce test spécifique est marqué comme échoué, tandis que les autres versions sont marquées comme réussies. Si vous réessayez les tests contre le même commit et que maintenant le test pour les trois versions de Python réussit, le test avec la version qui avait échoué est maintenant marqué comme réussi et instable, tandis que les deux autres versions restent réussies, sans instabilité détectée.

Attributs de configuration des tests

Lorsque vous exécutez vos tests avec l’optimisation des tests, la bibliothèque détecte et rapporte des informations sur l’environnement dans lequel les tests sont exécutés sous forme d’étiquettes de test. Par exemple, le nom du système d’exploitation, tel que Windows ou Linux, et l’architecture de la plateforme, telle que arm64 ou x86_64, sont ajoutés comme étiquettes à chaque test. Ces valeurs sont affichées dans le commit et sur les pages de vue d’ensemble des branches lorsqu’un test échoue ou est instable pour une configuration spécifique mais pas pour d’autres.

Les tags suivants sont collectés automatiquement pour identifier les configurations de test, et certains peuvent ne s’appliquer qu’à des plates-formes spécifiques :

Nom de l’étiquetteDescription
os.platformNom du système d’exploitation où les tests sont exécutés.
os.familyFamille du système d’exploitation où les tests sont exécutés.
os.versionVersion du système d’exploitation où les tests sont exécutés.
os.architectureArchitecture du système d’exploitation où les tests sont exécutés.
runtime.nameNom du système d’exécution pour les tests.
runtime.versionVersion du système d’exécution.
runtime.vendorFournisseur qui a construit la plateforme d’exécution où les tests sont exécutés.
runtime.architectureArchitecture du système d’exécution pour les tests.
device.modelLe modèle de l’appareil exécutant les tests.
device.nameNom de l’appareil.
ui.appearanceStyle de l’interface utilisateur.
ui.orientationOrientation dans laquelle l’interface utilisateur est exécutée.
ui.localizationLangue de l’application.

Configurations de test paramétrées

Lorsque vous exécutez des tests paramétrés, la bibliothèque détecte et rapporte des informations sur les paramètres utilisés. Les paramètres font partie de la configuration des tests, donc le même cas de test exécuté avec des paramètres différents est considéré comme deux tests différents dans l’optimisation des tests.

Si un paramètre de test est non déterministe et a une valeur différente chaque fois qu’un test est exécuté, chaque exécution de test est considérée comme un nouveau test dans l’optimisation des tests. En conséquence, certaines fonctionnalités du produit peuvent ne pas fonctionner correctement pour de tels tests : historique des exécutions, détection de l’instabilité, analyse de l’impact des tests, et d’autres.

Voici des exemples de paramètres de tests non déterministes :

  • date actuelle
  • une valeur aléatoire
  • une valeur qui dépend de l’environnement d’exécution du test (comme un chemin de fichier absolu ou le nom d’utilisateur actuel)
  • une valeur qui n’a pas de représentation de chaîne déterministe (par exemple, une instance d’une classe Java dont la méthode toString() n’est pas redéfinie)

Évitez d’utiliser des paramètres de test non déterministes. Dans le cas où cela n’est pas possible, certains frameworks de test offrent un moyen de spécifier une représentation de chaîne déterministe pour un paramètre non déterministe (comme le fait de remplacer le nom d’affichage du paramètre).

Configurations personnalisées

Il existe certaines configurations qui ne peuvent pas être identifiées et rapportées automatiquement car elles peuvent dépendre de variables d’environnement, d’arguments d’exécution de test ou d’autres approches utilisées par les développeurs. Pour ces cas, vous devez fournir les détails de configuration à la bibliothèque afin que l’optimisation des tests puisse les identifier correctement.

Définissez ces balises comme partie de la variable d’environnement DD_TAGS en utilisant le préfixe test.configuration.

Par exemple, les tags de configuration de tests identifient une configuration de test où le délai de réponse du disque est long et où peu de mémoire est disponible :

DD_TAGS=test.configuration.disk:slow,test.configuration.memory:low

Toutes les balises avec le préfixe test.configuration sont utilisées comme balises de configuration, en plus de celles collectées automatiquement.

Remarque : Les balises imbriquées test.configuration, telles que test.configuration.cpu.memory, ne sont pas prises en charge.

Pour appliquer un filtre avec ces tags de configuration, vous devez créer des facettes pour ces tags.

Améliorez votre flux de travail de développeur

Intégrez l'optimisation des tests avec des outils pour rapporter des données de couverture de code, améliorez les tests de navigateur avec RUM et accédez à des informations à travers les plateformes en rationalisant l'identification et la résolution des problèmes dans votre cycle de développement.


Utilisez les données des tests CI

When Test Visibility is enabled, the following data is collected from your project:

  • Test names and durations.
  • Predefined environment variables set by CI providers.
  • Git commit history including the hash, message, author information, and files changed (without file contents).
  • Information from the CODEOWNERS file.

Lors de la création d’un Dashboard ou d’un Notebooks, vous pouvez utiliser les données des tests CI dans votre requête de recherche, ce qui met à jour les options du widget de visualisation. Pour plus d’informations, consultez la documentation des Dashboards et des Notebooks documentation.

Activez les alertes sur les données de test

Lorsque vous évaluez des tests échoués ou instables, ou la performance d’un test CI, vous pouvez exporter votre requête de recherche dans le Test Optimization Explorer vers un CI Test monitor en cliquant sur le bouton Exporter.

Lectures complémentaires