Ce produit n'est pas pris en charge par le site Datadog que vous avez sélectionné. ().
Compatibilité
Framework de test
Version
Notes
Jest
>= 28.0.0
Seuls jsdom (dans le package jest-environment-jsdom) et node (dans le package jest-environment-node) sont pris en charge en tant qu’environnements de test. Les environnements personnalisés comme @jest-runner/electron/environment dans jest-electron-runner ne sont pas pris en charge.
Pris en charge avec les adaptateurs de framework Mocha et Jasmine à partir de dd-trace>=6.10.0.
dd-trace v6 nécessite Node.js 22 ou une version ultérieure.
Framework de test
Version
Notes
Jest
>= 24.8.0
Seuls jsdom (dans le package jest-environment-jsdom) et node (dans le package jest-environment-node) sont pris en charge en tant qu’environnements de test. Les environnements personnalisés comme @jest-runner/electron/environment dans jest-electron-runner ne sont pas pris en charge.
test.concurrent est pris en charge à partir de dd-trace>=5.112.0.
Mocha
>= 5.2.0
Cucumber
>= 7.0.0
Cypress
>= 6.7.0
Playwright
>= 1.18.0
Vitest
>= 1.6.0
Pris en charge à partir de dd-trace>=5.18.0. test.concurrent est pris en charge à partir de dd-trace>=5.112.0. Le mode navigateur est pris en charge à partir de dd-trace>=5.119.0.
WebdriverIO
>= 9.0.0
Pris en charge avec les adaptateurs de framework Mocha et Jasmine à partir de dd-trace>=5.121.0.
L’instrumentation fonctionne à l’exécution, donc tous les transpileurs tels que TypeScript, Webpack ou Babel sont pris en charge sans configuration supplémentaire.
Configuration de la méthode de rapport
Pour signaler les résultats des tests à Datadog, vous devez configurer la bibliothèque JavaScript Datadog :
We support auto-instrumentation for the following CI providers:
Auto-instrumentation runs on the CI executor and does not automatically apply to tests in a separate container. Before using it for containerized tests, see Tests in Containers.
If the auto-instrumentation step configures the process that runs your tests, you can skip the rest of the setup steps below.
Remarque : l'auto-instrumentation n'est pas prise en charge pour les tests Cypress. Pour instrumenter les tests Cypress, suivez les étapes d'instrumentation manuelle décrites ci-dessous.
If you are using a cloud CI provider without access to the underlying worker nodes, such as GitHub Actions or CircleCI, configure the library to use the Agentless mode. For this, set the following environment variables:
Set these variables before starting the test process. For parallel test runners, set them on the parent process so every worker inherits them.
DD_CIVISIBILITY_AGENTLESS_ENABLED=true selects Agentless mode. DD_API_KEY provides authentication but does not enable Agentless mode.
DD_CIVISIBILITY_AGENTLESS_ENABLED=true (Required for Agentless mode)
Enables Agentless mode to send test results directly to Datadog. Default: false
DD_API_KEY (Required for Agentless mode)
The Datadog API key used to authenticate test result uploads. Default: (empty)
If you use a Datadog site other than US1, set the following variable:
DD_SITE (Optional for Agentless mode)
The Datadog site to upload results to. Default: datadoghq.com
If you are running tests on an on-premises CI provider, such as Jenkins or self-managed GitLab CI, install the Datadog Agent on each worker node by following the Agent installation instructions.
This is the recommended option as it allows you to automatically link test results to logs and underlying host metrics.
If you are using a Kubernetes executor, Datadog recommends using the Datadog Operator.
The operator includes Datadog Admission Controller which can automatically inject the tracer library into the build pods.
Note: If you use the Datadog Operator, there is no need to download and inject the tracer library since the Admission Controller can do this for you, so you can skip the corresponding step below.
However, you still need to make sure that your pods set the environment variables or command-line parameters necessary to enable Test Visibility.
If you are not using Kubernetes or can’t use the Datadog Admission Controller and the CI provider is using a container-based executor, set the DD_TRACE_AGENT_URL environment variable (which defaults to http://localhost:8126) in the build container running the tracer to an endpoint that is accessible from within that container. Note: Using localhost inside the build references the container itself and not the underlying worker node or any container where the Agent might be running in.
DD_TRACE_AGENT_URL includes the protocol and port (for example, http://localhost:8126) and takes precedence over DD_AGENT_HOST and DD_TRACE_AGENT_PORT, and is the recommended configuration parameter to configure the Datadog Agent’s URL for CI Visibility.
If you still have issues connecting to the Datadog Agent, use the Agentless Mode.
Note: When using this method, tests are not correlated with logs and infrastructure metrics.
Définissez la variable d’environnement NODE_OPTIONS sur -r dd-trace/ci/init. Exécutez vos tests comme vous le feriez normalement, en spécifiant éventuellement un nom pour votre session de test avec DD_TEST_SESSION_NAME :
NODE_OPTIONS="-r dd-trace/ci/init"DD_TEST_SESSION_NAME=unit-tests yarn test
Remarque : si vous définissez une valeur pour NODE_OPTIONS, assurez-vous qu’elle n’écrase pas -r dd-trace/ci/init. Cela peut être fait en utilisant la clause ${NODE_OPTIONS:-} :
Vous pouvez ajouter des tags personnalisés à vos tests en utilisant la span actuellement active :
it('sum function can sum',()=>{consttestSpan=require('dd-trace').scope().active()testSpan.setTag('team_owner','my_team')// test continues normally
// ...
})
Pour créer des filtres ou des champs group by pour ces tags, vous devez d’abord créer des facettes. Pour plus d’informations sur l’ajout de tags, consultez la section Adding Tags de la documentation sur l’instrumentation personnalisée de Node.js.
Ajout de mesures personnalisées aux tests
Tout comme pour les tags, vous pouvez ajouter des mesures personnalisées à vos tests en utilisant le span actif :
it('sum function can sum',()=>{consttestSpan=require('dd-trace').scope().active()testSpan.setTag('memory_allocations',16)// test continues normally
// ...
})
Mocha >=9.0.0 utilise une approche axée sur l’ESM pour charger les fichiers de test. Définissez NODE_OPTIONS sur -r dd-trace/ci/init --import dd-trace/register.js pour obtenir une visibilité complète sur vos tests. Consultez dd-trace-js ESM support pour plus d’informations.
Définissez la variable d’environnement NODE_OPTIONS sur -r dd-trace/ci/init. Exécutez vos tests comme vous le feriez normalement, en spécifiant éventuellement un nom pour votre session de test avec DD_TEST_SESSION_NAME :
Remarque : si vous définissez une valeur pour NODE_OPTIONS, assurez-vous qu’elle n’écrase pas -r dd-trace/ci/init. Cela peut être fait en utilisant la clause ${NODE_OPTIONS:-} :
Pour créer des filtres ou des champs group by pour ces tags, vous devez d’abord créer des facettes. Pour plus d’informations sur l’ajout de tags, consultez la section Adding Tags de la documentation sur l’instrumentation personnalisée de Node.js.
Ajout de mesures personnalisées aux tests
Vous pouvez également ajouter des mesures personnalisées à vos tests en utilisant le span actif :
Si l’application de navigateur testée est instrumentée à l’aide de Browser Monitoring, les résultats des tests Playwright et leurs RUM browser sessions et session replays générées sont automatiquement liés. Pour plus d’informations, consultez le guide Instrumenter vos tests Browser avec RUM.
Téléversez les captures d’écran d’échec de test
Lorsqu’elle est activée, Test Optimization télécharge les captures d’écran que Playwright capture lorsqu’un test échoue. Affichez les captures d’écran dans l’onglet Media du panneau latéral des détails de test de Test Optimization. Utilisez-les pour inspecter l’état du navigateur au moment de l’échec.
Pour activer les téléchargements de captures d’écran, définissez la variable d’environnement DD_TEST_FAILURE_SCREENSHOTS_ENABLED sur 1. Dans votre configuration Playwright, définissez screenshot sous use sur l’une des valeurs suivantes :
'on' : Capturez une capture d’écran après chaque test.
'only-on-failure' : Capturez une capture d’écran après chaque échec de test.
'on-first-failure' : Capturez une capture d’écran après le premier échec de chaque test.
Remarque : Si vous utilisez 'on', Test Optimization ne télécharge que les captures d’écran des tests ayant échoué.
Définissez la variable d’environnement NODE_OPTIONS sur -r dd-trace/ci/init. Exécutez vos tests comme vous le feriez normalement, en spécifiant éventuellement un nom pour votre session de test avec DD_TEST_SESSION_NAME :
Remarque : si vous définissez une valeur pour NODE_OPTIONS, assurez-vous qu’elle n’écrase pas -r dd-trace/ci/init. Cela peut être fait en utilisant la clause ${NODE_OPTIONS:-} :
Vous pouvez ajouter des tags personnalisés à votre test en récupérant la span active :
When('the function is called',function(){conststepSpan=require('dd-trace').scope().active()testSpan.setTag('team_owner','my_team')// test continues normally
// ...
})
Pour créer des filtres ou des champs group by pour ces tags, vous devez d’abord créer des facettes. Pour plus d’informations sur l’ajout de tags, consultez la section Adding Tags de la documentation sur l’instrumentation personnalisée de Node.js.
Ajout de mesures personnalisées aux tests
Vous pouvez également ajouter des mesures personnalisées à votre test en utilisant le span actif :
When('the function is called',function(){conststepSpan=require('dd-trace').scope().active()testSpan.setTag('memory_allocations',16)// test continues normally
// ...
})
Ajoutez la ligne suivante au niveau supérieur de votre supportFile :
cypress/support/e2e.js
// Your code can be before this line
// require('./commands')
require('dd-trace/ci/cypress/support')// Also supported:
// import 'dd-trace/ci/cypress/support'
// Your code can also be after this line
// Cypress.Commands.add('login', (email, pw) => {})
Si vous utilisez d’autres plugins Cypress, votre fichier cypress.config.js doit contenir ce qui suit :
cypress.config.js
const{defineConfig}=require('cypress')module.exports=defineConfig({e2e:{setupNodeEvents(on,config){// your previous code is before this line
returnrequire('dd-trace/ci/cypress/plugin')(on,config)}}})
Événement Cypress after:run
Datadog nécessite l’événement Cypress after:run pour fonctionner, et Cypress n’autorise pas plusieurs gestionnaires pour cet événement. Si vous avez déjà défini des gestionnaires pour after:run, ajoutez manuellement le gestionnaire Datadog en important 'dd-trace/ci/cypress/after-run' :
cypress.config.js
const{defineConfig}=require('cypress')module.exports=defineConfig({e2e:{setupNodeEvents(on,config){require('dd-trace/ci/cypress/plugin')(on,config)// other plugins
on('after:run',(details)=>{// other 'after:run' handlers
// important that this function call is returned
returnrequire('dd-trace/ci/cypress/after-run')(details)})}}})
Événement Cypress after:spec
Datadog nécessite l’événement Cypress after:spec pour fonctionner, et Cypress n’autorise pas plusieurs gestionnaires pour cet événement. Si vous avez déjà défini des gestionnaires pour after:spec, ajoutez manuellement le gestionnaire Datadog en important 'dd-trace/ci/cypress/after-spec' :
cypress.config.js
const{defineConfig}=require('cypress')module.exports=defineConfig({e2e:{setupNodeEvents(on,config){require('dd-trace/ci/cypress/plugin')(on,config)// other plugins
on('after:spec',(...args)=>{// other 'after:spec' handlers
// Important that this function call is returned
// Important that all the arguments are passed
returnrequire('dd-trace/ci/cypress/after-spec')(...args)})}}})
Exécutez vos tests comme vous le feriez normalement, en spécifiant éventuellement un nom pour votre session de test avec DD_TEST_SESSION_NAME :
DD_TEST_SESSION_NAME=ui-tests yarn test:ui
Ajout de tags personnalisés aux tests
Pour ajouter des informations supplémentaires à vos tests, telles que le propriétaire de l’équipe, utilisez cy.task('dd:addTags', { yourTags: 'here' }) dans votre test ou vos hooks.
Exemple :
beforeEach(()=>{cy.task('dd:addTags',{'before.each':'certain.information'})})it('renders a hello world',()=>{cy.task('dd:addTags',{'team.owner':'ui'})cy.get('.hello-world').should('have.text','Hello World')})
Pour créer des filtres ou des champs group by pour ces tags, vous devez d’abord créer des facettes. Pour plus d’informations sur l’ajout de tags, consultez la section Adding Tags de la documentation sur l’instrumentation personnalisée Node.js.
Ajout de mesures personnalisées aux tests
Pour ajouter des mesures personnalisées à vos tests, telles que les allocations de mémoire, utilisez cy.task('dd:addTags', { yourNumericalTags: 1 }) dans votre test ou vos hooks.
Exemple :
it('renders a hello world',()=>{cy.task('dd:addTags',{'memory_allocations':16})cy.get('.hello-world').should('have.text','Hello World')})
Si l’application de navigateur testée est instrumentée à l’aide de Browser Monitoring, les résultats des tests Cypress ainsi que les sessions de navigateur RUM et les relectures de session générées sont automatiquement liés. Pour plus d’informations, consultez le guide d’instrumentation de vos tests de navigateur avec RUM.
Téléversez les captures d’écran d’échec de test
Lorsqu’elle est activée, Test Optimization téléverse les captures d’écran que Cypress prend lorsqu’un test échoue. Elles apparaissent dans l’onglet Media du panneau latéral des détails de test de Test Optimization. Utilisez-les pour inspecter l’état du navigateur au moment de l’échec.
Pour activer les téléchargements de captures d’écran, définissez la variable d’environnement DD_TEST_FAILURE_SCREENSHOTS_ENABLED sur 1. Dans votre configuration Cypress, assurez-vous que screenshotOnRunFailure est défini sur true (la valeur par défaut).
Utilisez une version de Node.js prise en charge par votre version majeure de dd-trace pour l’instrumentation Vitest :
dd-trace v5 nécessite Node.js 18.19+ ou Node.js 20.6+.
dd-trace v6 nécessite Node.js 22 ou une version ultérieure.
Définissez la variable d’environnement NODE_OPTIONS sur --import dd-trace/register.js -r dd-trace/ci/init. Exécutez vos tests comme vous le feriez normalement, en spécifiant éventuellement un nom pour votre session de test avec DD_TEST_SESSION_NAME :
Remarque : si vous définissez une valeur pour NODE_OPTIONS, assurez-vous qu’elle n’écrase pas --import dd-trace/register.js -r dd-trace/ci/init. Cela peut être fait en utilisant la clause ${NODE_OPTIONS:-} :
Ajout de tags ou de mesures personnalisés aux tests
Vous pouvez ajouter des tags personnalisés à vos tests en utilisant la span actuellement active :
importtracerfrom'dd-trace'import{expect,test}from'vitest'test('sum function can sum',()=>{consttestSpan=tracer.scope().active()testSpan.setTag('team_owner','my_team')expect(1+2).toBe(3)})
Pour créer des filtres ou des champs group by pour ces tags, vous devez d’abord créer des facettes. Pour plus d’informations sur l’ajout de tags, consultez la section Adding Tags de la documentation sur l’instrumentation personnalisée de Node.js.
Vous pouvez également ajouter des mesures personnalisées à vos tests en utilisant le span actif :
importtracerfrom'dd-trace'import{expect,test}from'vitest'test('sum function can sum',()=>{consttestSpan=tracer.scope().active()testSpan.setTag('memory_allocations',16)expect(1+2).toBe(3)})
Utilisez une version de Node.js prise en charge par votre dd-trace version majeure pour l’instrumentation WebdriverIO :
dd-trace v5 nécessite Node.js 18.19+ ou Node.js 20.6+.
dd-trace v6 nécessite Node.js 22 ou une version ultérieure.
Définissez la variable d’environnement NODE_OPTIONS sur --import dd-trace/register.js -r dd-trace/ci/init. Exécutez vos tests comme vous le feriez normalement, en spécifiant éventuellement un nom pour votre session de test avec DD_TEST_SESSION_NAME :
Remarque : si vous définissez une valeur pour NODE_OPTIONS, assurez-vous qu’elle n’écrase pas --import dd-trace/register.js -r dd-trace/ci/init. Cela peut être fait en utilisant la clause ${NODE_OPTIONS:-} :
package.json
{"scripts":{"test:e2e":"NODE_OPTIONS=\"--max-old-space-size=12288 ${NODE_OPTIONS:-}\" wdio run ./wdio.conf.js"}}
Ajout de tags ou de mesures personnalisés aux tests
Vous pouvez ajouter des tags personnalisés à vos tests en utilisant la span actuellement active :
importtracerfrom'dd-trace'describe('home page',()=>{it('displays the heading',async()=>{consttestSpan=tracer.scope().active()testSpan.setTag('team_owner','my_team')awaitbrowser.url('/')awaitexpect($('h1')).toBeDisplayed()})})
Pour créer des filtres ou des champs group by pour ces tags, vous devez d’abord créer des facettes. Pour plus d’informations sur l’ajout de tags, consultez la section Adding Tags de la documentation sur l’instrumentation personnalisée de Node.js.
Vous pouvez également ajouter des mesures personnalisées à vos tests en utilisant le span actif :
importtracerfrom'dd-trace'describe('home page',()=>{it('displays the heading',async()=>{consttestSpan=tracer.scope().active()testSpan.setTag('memory_allocations',16)awaitbrowser.url('/')awaitexpect($('h1')).toBeDisplayed()})})
Remarque : Cela ne fonctionne pas car NODE_OPTIONS sont interprétés par chaque processus de nœud, y compris npm install. Si vous essayez d’importer dd-trace/ci/init avant qu’il ne soit installé, cette étape échoue.
Votre GitHub Action devrait plutôt ressembler à ceci :
Assurez-vous que la variable d’environnement NODE_OPTIONS est uniquement définie sur le processus exécutant les tests.
Évitez spécifiquement de définir NODE_OPTIONS dans les paramètres des variables d’environnement globales de votre pipeline ou de votre définition de job.
Utilisation de Yarn 2 ou version ultérieure
Si vous utilisez yarn>=2 et un fichier .pnp.cjs, vous pourriez également obtenir la même erreur :
Error: Cannot find module 'dd-trace/ci/init'
Vous pouvez le corriger en définissant NODE_OPTIONS sur ce qui suit :
NODE_OPTIONS="-r $(pwd)/.pnp.cjs -r dd-trace/ci/init" yarn test
Rapport de couverture de code
Lorsque les tests sont instrumentés avec Istanbul, le traceur Datadog (v3.20.0 ou ultérieure) le signale sous le tag test.code_coverage.lines_pct pour vos sessions de test.
Vous pouvez voir l’évolution de la couverture des tests dans l’onglet Coverage d’une session de test.
Voici une liste des paramètres de configuration les plus importants qui peuvent être utilisés avec le SDK.
test_session.name
Utilisez-le pour identifier un groupe de tests, tels que integration-tests, unit-tests ou smoke-tests. Variable d’environnement: DD_TEST_SESSION_NAME Par défaut: Pour dd-trace v6, l’invocation du framework, telle que jest, mocha, playwright test ou cucumber-js. Pour dd-trace v5, une combinaison du nom du job CI et de la commande de test. Exemple: unit-tests, integration-tests, smoke-tests
service
Nom du service ou de la bibliothèque en cours de test. Variable d’environnement : DD_SERVICE Par défaut : (nom du framework de test) Exemple : my-ui
env
Nom de l’environnement où les tests sont exécutés. Variable d’environnement : DD_ENV Par défaut : none Exemples : local, ci
url
URL du Datadog Agent pour la collecte des traces sous la forme http://hostname:port. Variable d’environnement : DD_TRACE_AGENT_URL Par défaut : http://localhost:8126
Datadog uses Git information for visualizing your test results and grouping them by repository, branch, and commit. Git metadata is automatically collected by the test instrumentation from CI provider environment variables and the local .git folder in the project path, if available.
If you are running tests in non-supported CI providers or with no .git folder, you can set the Git information manually using environment variables. These environment variables take precedence over any auto-detected information. Set the following environment variables to provide Git information:
DD_GIT_REPOSITORY_URL
URL of the repository where the code is stored. Both HTTP and SSH URLs are supported. Example: git@github.com:MyCompany/MyApp.git, https://github.com/MyCompany/MyApp.git
DD_GIT_BRANCH
Git branch being tested. Leave empty if providing tag information instead. Example: develop
DD_GIT_TAG
Git tag being tested (if applicable). Leave empty if providing branch information instead. Example: 1.0.1
DD_GIT_COMMIT_SHA
Full commit hash. Example: a18ebf361cc831f5535e58ec4fae04ffd98d8152
DD_GIT_COMMIT_MESSAGE
Commit message. Example: Set release number
DD_GIT_COMMIT_AUTHOR_NAME
Commit author name. Example: John Smith
DD_GIT_COMMIT_AUTHOR_EMAIL
Commit author email. Example: john@example.com
DD_GIT_COMMIT_AUTHOR_DATE
Commit author date in ISO 8601 format. Example: 2021-03-12T16:00:28Z
DD_GIT_COMMIT_COMMITTER_NAME
Commit committer name. Example: Jane Smith
DD_GIT_COMMIT_COMMITTER_EMAIL
Commit committer email. Example: jane@example.com
DD_GIT_COMMIT_COMMITTER_DATE
Commit committer date in ISO 8601 format. Example: 2021-03-12T16:00:28Z
API de test manuel
Remarque : L'API de test manuel est disponible à partir de dd-trace versions 5.23.0 et 4.47.0.
Si vous utilisez Jest, Mocha, Cypress, Playwright, Cucumber, Vitest ou WebdriverIO, n’utilisez pas l’API de test manuel. Test Optimization instrumente automatiquement ces frameworks et envoie les résultats des tests à Datadog. L’API de test manuel est incompatible avec les frameworks de test pris en charge.
Utilisez l’API de test manuel uniquement si vous utilisez un framework de test non pris en charge ou si vous disposez d’un mécanisme de test différent.
L’API de test manuel exploite le module node:diagnostics_channel de Node.js et repose sur des canaux sur lesquels vous pouvez publier :
const{channel}=require('node:diagnostics_channel')const{describe,test,beforeEach,afterEach,assert}=require('my-custom-test-framework')consttestStartCh=channel('dd-trace:ci:manual:test:start')consttestFinishCh=channel('dd-trace:ci:manual:test:finish')consttestSuite=__filenamedescribe('can run tests',()=>{beforeEach((testName)=>{testStartCh.publish({testName,testSuite})})afterEach((status,error)=>{testFinishCh.publish({status,error})})test('first test will pass',()=>{assert.equal(1,1)})})
Canal de début de test
Récupérez ce canal par son ID dd-trace:ci:manual:test:start pour publier qu’un test commence. Un bon endroit pour faire cela est un hook beforeEach ou similaire.
const{channel}=require('node:diagnostics_channel')consttestStartCh=channel('dd-trace:ci:manual:test:start')// ... code for your testing framework goes here
beforeEach(()=>{consttestDefinition={testName:'a-string-that-identifies-this-test',testSuite:'what-suite-this-test-is-from.js'}testStartCh.publish(testDefinition)})// code for your testing framework continues here ...
La charge utile à publier possède les attributs testName et testSuite, tous deux des chaînes, qui identifient le test sur le point de commencer.
Canal de fin de test
Récupérez ce canal par son ID dd-trace:ci:manual:test:finish pour publier qu’un test se termine. Un bon endroit pour faire cela est un hook afterEach ou similaire.
const{channel}=require('node:diagnostics_channel')consttestFinishCh=channel('dd-trace:ci:manual:test:finish')// ... code for your testing framework goes here
afterEach(()=>{consttestStatusPayload={status:'fail',error: newError('assertion error')}testStartCh.publish(testStatusPayload)})// code for your testing framework continues here ...
La charge utile à publier possède les attributs status et error :
status est une chaîne qui prend l’une des trois valeurs suivantes :
'pass' lorsqu’un test réussit.
'fail' lorsqu’un test échoue.
'skip' lorsqu’un test a été ignoré.
error est un objet Error contenant la raison pour laquelle un test a échoué.
Canal d’ajout de tags
Récupérez ce canal par son ID dd-trace:ci:manual:test:addTags pour publier qu’un test nécessite des tags personnalisés. Cela peut être fait au sein de la fonction de test :
const{channel}=require('node:diagnostics_channel')consttestAddTagsCh=channel('dd-trace:ci:manual:test:addTags')// ... code for your testing framework goes here
test('can sum',()=>{testAddTagsCh.publish({'test.owner':'my-team','number.assertions':3})constresult=sum(2,1)assert.equal(result,3)})// code for your testing framework continues here ...
La charge utile à publier est un dictionnaire <string, string|number> de tags ou de mesures qui sont ajoutés au test.
Exécuter les tests
Lorsque les canaux de début et de fin de test sont dans votre code, exécutez votre framework de test comme vous le faites normalement, en incluant les variables d’environnement suivantes :
Les tests de navigateur exécutés avec mocha, jest, cucumber, cypress, playwright et vitest sont instrumentés par dd-trace-js, mais la visibilité sur la session de navigateur elle-même n’est pas fournie par défaut (par exemple, les appels réseau, les actions utilisateur, les chargements de page, et plus encore).
Si vous souhaitez une visibilité sur le processus de navigateur, envisagez d’utiliser RUM & Session Replay. Lors de l’utilisation de Cypress ou Playwright, les résultats des tests et leurs sessions de navigateur RUM générées ainsi que les relectures de session sont automatiquement liés. Pour plus d’informations, consultez le guide d’instrumentation de vos tests de navigateur avec RUM.
Mode interactif Cypress
Le mode interactif Cypress (auquel vous pouvez accéder en exécutant cypress open) n’est pas pris en charge par Test Optimization car certains événements Cypress, tels que before:run, ne sont pas déclenchés. Si vous souhaitez essayer malgré tout, transmettez experimentalInteractiveRunEvents: true au fichier de configuration Cypress.
Les tentatives exigent l’isolation des tests Cypress
L’isolation des tests de Cypress test isolation doit être activée (par défaut) pour
que les fonctionnalités Test Optimization basées sur les tentatives fonctionnent. Lorsque testIsolation est défini sur
false dans votre configuration Cypress, dd-trace désactive toutes les tentatives de test
—Early Flake Detection, Auto Test Retries et
tentative de correction—car ces fonctionnalités réexécutent chaque test sur place, ce qui nécessite l’isolation.
Lorsque l’isolation est désactivée, le traceur enregistre l’avertissement Test isolation is disabled, retries will not be enabled, et aucune exécution de test n’est marquée avec
@test.test_management.is_attempt_to_fix. Parce que le traceur lit le global
testIsolation valeur, les remplacements describe par suite ne réactivent pas les tentatives.
Jest --forceExit
L’option –forceExit de Jest peut entraîner une perte de données. Datadog essaie d’envoyer des données immédiatement après la fin de vos tests, mais l’arrêt brutal du processus peut entraîner l’échec de certaines requêtes. Utilisez --forceExit avec prudence.
Mocha --exit
L’option –exit de Mocha peut entraîner une perte de données. Datadog essaie d’envoyer des données immédiatement après la fin de vos tests, mais l’arrêt brutal du processus peut entraîner l’échec de certaines requêtes. Utilisez --exit avec prudence.
La surcharge de durée de test de Vitest
Par défaut, l’option isolate de Vitest est true, donc chaque fichier de test s’exécute dans son propre fork ou thread. Vitest est axé sur l’ESM et s’appuie sur import-in-the-middle pour l’instrumentation, ce qui entraîne un coût de configuration à chaque démarrage d’une suite. Avec l’isolation, ce coût de configuration est répété pour chaque fichier. L’effet est plus marqué lorsque vous disposez de nombreuses petites suites rapides, car le temps de configuration peut dominer le temps d’exécution global.
Pour réduire la surcharge, définissez isolate: false dans votre fichier de configuration Vitest, ou passez --no-isolate à la commande de test.
Pour maintenir l’isolation de Vitest activée avec une surcharge de démarrage de worker plus faible, définissez DD_EXPERIMENTAL_TEST_OPT_VITEST_NO_WORKER_INIT=true. Cette option est disponible dans dd-trace v5 (à partir de 5.111.0) et v6 (à partir de 6.0.0). Elle s’applique aux exécutions isolées du pool de workers Vitest avec Vitest 3.2.6 et versions ultérieures, et revient à une instrumentation de worker normale pour les configurations non prises en charge.
Comme ce mode n’initialise pas dd-trace dans les workers Vitest, les fonctionnalités suivantes ne sont pas prises en charge :
Tags de test personnalisés
Spans personnalisés :
Corrélation de logs à partir du code de test :
Rejeu de test échoué
Bonnes pratiques
Suivez ces pratiques pour tirer pleinement parti du framework de test et de Test Optimization.
Tests paramétrés
Dans la mesure du possible, tirez parti des outils fournis par les frameworks de test pour les tests paramétrés. Par exemple, pour jest :