Pour Ruby: utilisez la version datadog-ci ou ultérieure du gem 1.31.0.
Pour Python: utilisez la version ddtrace ou ultérieure du package 4.11.0 et pytest.
Pour JavaScript: utilisez la version dd-trace ou ultérieure du package 5.111.0 pour v5 ou v6.0.0 ou ultérieure pour v6, Node.js et une version de framework prise en charge. Cucumber.js, Cypress, Mocha, Playwright et Vitest nécessitent ddtest 1.6.0 ou une version ultérieure.
Activez Test Impact Analysis pour le service de test lorsque vous souhaitez que la parallélisation des tests ne divise que les tests affectés par une modification de code.
Concepts
Runner
Un programme qui exécute des tests. ddtest peut exécuter des tests directement ou écrire des listes de fichiers pour un autre runner.
Nœud CI
Un environnement d’exécution CI, tel qu’un job GitHub Actions, un conteneur parallèle CircleCI, un pod Kubernetes, une VM ou une machine locale.
Worker
Un processus démarré par ddtest pour exécuter des tests. Un nœud CI peut exécuter un worker ou plusieurs workers.
Planifier
Le répertoire .testoptimization/ généré. Il contient les fichiers de test exécutables, le parallélisme sélectionné et les listes de fichiers par nœud utilisées par ddtest run ou un autre runner.
Parallélisme sélectionné
Le nombre de nœuds CI ou le nombre de workers locaux que ddtest choisit après avoir estimé la durée des fichiers de test.
Installez ddtest
Installez l’interface de ligne de commande ddtest dans votre job CI. Datadog publie des binaires précompilés dans GitHub Releases.
Ces exemples téléchargent le dernier binaire Linux AMD64. Pour un autre système d’exploitation ou une autre architecture, sélectionnez l’élément correspondant dans GitHub Releases.
Adoptez ddtest dans CI
Adoptez la parallélisation des tests en quatre étapes. Premièrement, ajoutez la planification sans modifier la façon dont les tests s’exécutent. Après avoir validé le plan, remplacez la commande de test existante par ddtest, choisissez un mode d’exécution et mesurez les économies CI.
Effectuez ces changements sur une branche de fonctionnalité. Validez et poussez chaque modification de configuration CI, puis examinez l’exécution CI résultante avant de continuer.
1. Ajoutez la planification des tests
Après avoir configuré les dépendances et Test Optimization, ajoutez ddtest plan avant votre étape de test existante. Conservez la commande de test existante pendant cette étape.
Choisissez le parallélisme minimal et maximal pour votre environnement CI. Par exemple, les valeurs suivantes permettent à ddtest de choisir entre 1 et 8 nœuds CI ou workers locaux :
--platform identifie la plateforme linguistique et --framework identifie le framework de test. Pour toutes les valeurs prises en charge et les valeurs par défaut, consultez Configuration.
La planification découvre les tests, récupère la durée de test et les données de Test Impact Analysis, et choisit un niveau de parallélisme. Elle n’exécute pas les tests. Le répertoire .testoptimization/ généré contient les fichiers de test et les sections sélectionnées pour l’exécution.
2. Inspectez le plan
Les commandes suivantes sont un moyen d’inspecter le nombre de runners proposé et les fichiers de test dans les logs CI :
# Show the number of runners selected by ddtest.cat .testoptimization/runner/parallel-runners.txt
# Count the test files selected for execution.wc -l .testoptimization/runner/test-files.txt
# Preview the first 20 test files to verify test discovery.sed -n '1,20p' .testoptimization/runner/test-files.txt
# Optional: List the per-runner split files to see how ddtest distributed the tests.find .testoptimization/runner/tests-split -maxdepth 1 -type f -print
Alternativement, téléchargez le répertoire .testoptimization/ en tant qu’artefact CI et ouvrez les fichiers dans votre éditeur.
Confirmez que test-files.txt contient une liste de fichiers à exécuter. Si Test Impact Analysis est activé, les fichiers dont tous les tests sont ignorés sont absents du plan.
3. Remplacez la commande de test existante
Une fois que le plan contient les tests attendus, remplacez la commande de test existante par :
bin/ddtest run \
--platform <PLATFORM> \
--framework <FRAMEWORK>
ddtest run réutilise le plan généré plus tôt dans le workflow. Choisissez comment exécuter les sections sélectionnées en fonction de votre architecture CI.
Exécutez les workers sur un nœud CI
Sur un seul nœud CI, ddtest plan est facultatif. Exécutez ddtest run directement, ou exécutez ddtest plan et ddtest run successivement dans le même job si vous souhaitez inspecter le plan au préalable. Le parallélisme sélectionné est le nombre de processus worker locaux que ddtest démarre. La commande ne nécessite pas d’options supplémentaires.
Distribuez les tests sur les nœuds CI
Exécutez ddtest plan une fois dans un job de planification. Partagez le répertoire .testoptimization/ complet avec les jobs de test et utilisez le parallélisme sélectionné pour définir la taille de votre matrice CI. Sur chaque nœud, exécutez :
En mode nœud CI, ddtest utilise un worker local par défaut. Pour démarrer plusieurs workers dans chaque nœud CI, définissez --ci-node-workers sur un entier positif ou ncpu.
Les exemples CI sur cette page montrent comment transmettre le plan généré et le nombre de runners sélectionnés entre les jobs.
4. Mesurer les économies CI
Après avoir remplacé la commande de test, confirmez dans le Test Optimization Explorer que les tests attendus sont terminés. Utilisez l’CI Visibility Explorer pour comparer les durées des jobs de test et le nombre de jobs de test entre les exécutions de pipeline. Si CI Visibility n’est pas activé, utilisez les métriques de job équivalentes de votre fournisseur CI.
Si tous les workers s’exécutent sur un seul nœud CI, l’exécution parallèle raccourcit la phase de test sans modifier le nombre de nœuds CI. Si chaque worker s’exécute sur un nœud CI distinct, utilisez le nombre de runners dans parallel-runners.txt pour dimensionner la matrice CI. Comme Test Impact Analysis supprime les tests non affectés avant que ddtest ne sélectionne le nombre de runners, des modifications plus petites peuvent entraîner le démarrage d’un nombre réduit de nœuds CI.
Utilisez --max-parallelism pour limiter la capacité CI. Le planificateur prend en compte le coût de configuration de chaque runner supplémentaire via --ci-job-overhead. Pour plus de détails sur ces paramètres, consultez Configuration.
Ajoutez .testoptimization/ à .gitignore. Générez un nouveau plan pour chaque exécution de workflow CI et partagez-le uniquement entre les jobs correspondant à la même révision source et au même environnement d’exécution. Exécutez la planification et les tests à partir du même répertoire de travail. Pour plus de détails sur les fichiers générés, consultez Plan artefacts.
Exemples de CI
Utilisez les exemples suivants comme points de départ pour GitHub Actions et CircleCI.
Ruby
Le job de planification choisit le nombre de nœuds CI et émet une matrice. Le job de test télécharge l’artefact .testoptimization/ et exécute uniquement les fichiers assignés à son nœud de matrice.
name:CI with Test Parallelizationon:[push]env:DD_TEST_OPTIMIZATION_RUNNER_PLATFORM:rubyDD_TEST_OPTIMIZATION_RUNNER_FRAMEWORK:rspecDD_TEST_OPTIMIZATION_RUNNER_MIN_PARALLELISM:1DD_TEST_OPTIMIZATION_RUNNER_MAX_PARALLELISM:8jobs:dd_plan:runs-on:ubuntu-latestoutputs:matrix:${{ steps.dd_plan.outputs.matrix }}steps:- uses:actions/checkout@v4- name:Download ddtest binaryrun:| mkdir -p bin
gh release download --repo DataDog/ddtest --pattern "ddtest-linux-amd64" --dir bin
mv bin/ddtest-linux-amd64 bin/ddtest
chmod +x bin/ddtestenv:GH_TOKEN:${{ github.token }}- name:Setup Rubyuses:ruby/setup-ruby@v1with:bundler-cache:true- name:Configure Datadog Test Optimizationuses:datadog/test-visibility-github-action@v2with:languages:rubyapi_key:${{ secrets.DD_API_KEY }}site:datadoghq.com- id:dd_planname:Plan test executionrun:bin/ddtest plan- uses:actions/upload-artifact@v4with:name:dd-artifactspath:.testoptimizationinclude-hidden-files:truedd_test:runs-on:ubuntu-latestneeds:[dd_plan]strategy:fail-fast:falsematrix:${{ fromJson(needs.dd_plan.outputs.matrix) }}steps:- uses:actions/checkout@v4- name:Download ddtest binaryrun:| mkdir -p bin
gh release download --repo DataDog/ddtest --pattern "ddtest-linux-amd64" --dir bin
mv bin/ddtest-linux-amd64 bin/ddtest
chmod +x bin/ddtestenv:GH_TOKEN:${{ github.token }}- uses:actions/download-artifact@v4with:name:dd-artifactspath:.testoptimization- name:Setup Rubyuses:ruby/setup-ruby@v1with:bundler-cache:true- name:Configure Datadog Test Optimizationuses:datadog/test-visibility-github-action@v2with:languages:rubyapi_key:${{ secrets.DD_API_KEY }}site:datadoghq.com- name:Run testsrun:bin/ddtest run --ci-node ${{ matrix.ci_node_index }}
Le workflow de configuration exécute ddtest plan, stocke .testoptimization/ et se poursuit dans un workflow de test avec le nombre de nœuds CI sélectionné.
Le job de planification choisit le nombre de nœuds CI et émet une matrice. Le job de test télécharge l’artefact .testoptimization/ et exécute uniquement les fichiers assignés à son nœud de matrice.
Le workflow de configuration exécute ddtest plan, stocke .testoptimization/ et se poursuit dans un workflow de test avec le nombre de nœuds CI sélectionné.
Utilisez la même structure de job de planification et de test que pour les exemples Ruby et Python. Définissez `DD_TEST_OPTIMIZATION_RUNNER_FRAMEWORK` sur `cucumber`, `cypress`, `jest`, `mocha`, `playwright` ou `vitest`. Les exemples suivants utilisent Jest ; remplacez `jest` par le framework de votre collection de tests.
Définissez ces variables d’environnement au niveau du workflow ou du job :
Remplacez chaque étape de configuration de langage par l’installation des dépendances Node.js :
- name:Setup Node.jsuses:actions/setup-node@v4with:node-version:"22"cache:npm- name:Install JavaScript dependenciesrun:npm ci
Configurez Datadog Test Optimization pour JavaScript :
- name:Configure Datadog Test Optimizationuses:datadog/test-visibility-github-action@v2with:languages:jsapi_key:${{ secrets.DD_API_KEY }}site:datadoghq.com
Les commandes ddtest plan et ddtest run --ci-node $Les commandes {{ matrix.ci_node_index }}` restent inchangées lorsque la plateforme et le framework sont fournis via l’environnement.
Utilisez une image Node.js et définissez l’environnement d’exécution dans le job plan :
Conservez les étapes de téléchargement, de planification, de mise en cache et de continuation ddtest du workflow CircleCI. Dans le job de test, installez les dépendances, instrumentez automatiquement JavaScript et transmettez l’index de nœud CircleCI à ddtest :
- run:name:Install JavaScript dependenciescommand:npm ci- test-optimization-circleci-orb/autoinstrument:languages:jssite:datadoghq.com- run:name:Run testscommand:| NODE_INDEX=${CIRCLE_NODE_INDEX:-0}
bin/ddtest run --platform javascript --framework jest --ci-node "${NODE_INDEX}"
`ddtest` ajoute `NODE_OPTIONS=-r dd-trace/ci/init` au début pour les processus worker JavaScript, donc les dépendances du projet installées avant `ddtest plan` doivent inclure `dd-trace`. Ceci ne remplace pas la [configuration de Test Optimization][8] spécifique au framework. Par exemple, Cypress nécessite une instrumentation manuelle dans son fichier de configuration.
Pour aller plus loin
Documentation, liens et articles supplémentaires utiles: