Skip to content

Commit 2c87998

Browse files
authored
[test-optimization] [SDTEST-2214] Add capability tagging for Failed Test Replay (#5992)
1 parent c1d66b7 commit 2c87998

File tree

7 files changed

+28
-1
lines changed

7 files changed

+28
-1
lines changed

integration-tests/cucumber/cucumber.spec.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ const {
5555
DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE,
5656
DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE,
5757
DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX,
58+
DD_CAPABILITIES_FAILED_TEST_REPLAY,
5859
TEST_MANAGEMENT_IS_ATTEMPT_TO_FIX,
5960
TEST_HAS_FAILED_ALL_RETRIES,
6061
TEST_MANAGEMENT_ATTEMPT_TO_FIX_PASSED,
@@ -2511,6 +2512,7 @@ versions.forEach(version => {
25112512
assert.equal(metadata.test[DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE], '1')
25122513
assert.equal(metadata.test[DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE], '1')
25132514
assert.equal(metadata.test[DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX], '4')
2515+
assert.equal(metadata.test[DD_CAPABILITIES_FAILED_TEST_REPLAY], '1')
25142516
// capabilities logic does not overwrite test session name
25152517
assert.equal(metadata.test[TEST_SESSION_NAME], 'my-test-session-name')
25162518
})

integration-tests/cypress/cypress.spec.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ const {
5555
DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE,
5656
DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE,
5757
DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX,
58+
DD_CAPABILITIES_FAILED_TEST_REPLAY,
5859
TEST_RETRY_REASON_TYPES,
5960
TEST_IS_MODIFIED
6061
} = require('../../packages/dd-trace/src/plugins/util/test')
@@ -2264,6 +2265,7 @@ moduleTypes.forEach(({
22642265
assert.equal(metadata.test[DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE], '1')
22652266
assert.equal(metadata.test[DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE], '1')
22662267
assert.equal(metadata.test[DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX], '4')
2268+
assert.equal(metadata.test[DD_CAPABILITIES_FAILED_TEST_REPLAY], '1')
22672269
// capabilities logic does not overwrite test session name
22682270
assert.equal(metadata.test[TEST_SESSION_NAME], 'my-test-session-name')
22692271
})

integration-tests/jest/jest.spec.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ const {
5151
DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE,
5252
DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE,
5353
DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX,
54+
DD_CAPABILITIES_FAILED_TEST_REPLAY,
5455
TEST_MANAGEMENT_IS_ATTEMPT_TO_FIX,
5556
TEST_HAS_FAILED_ALL_RETRIES,
5657
TEST_MANAGEMENT_ATTEMPT_TO_FIX_PASSED,
@@ -3535,6 +3536,7 @@ describe('jest CommonJS', () => {
35353536
assert.equal(metadata.test[DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE], '1')
35363537
assert.equal(metadata.test[DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE], '1')
35373538
assert.equal(metadata.test[DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX], '4')
3539+
assert.equal(metadata.test[DD_CAPABILITIES_FAILED_TEST_REPLAY], '1')
35383540
// capabilities logic does not overwrite test session name
35393541
assert.equal(metadata.test[TEST_SESSION_NAME], 'my-test-session-name')
35403542
})

integration-tests/mocha/mocha.spec.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ const {
5353
DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE,
5454
DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE,
5555
DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX,
56+
DD_CAPABILITIES_FAILED_TEST_REPLAY,
5657
TEST_MANAGEMENT_IS_ATTEMPT_TO_FIX,
5758
TEST_HAS_FAILED_ALL_RETRIES,
5859
TEST_MANAGEMENT_ATTEMPT_TO_FIX_PASSED,
@@ -3112,6 +3113,7 @@ describe('mocha CommonJS', function () {
31123113
assert.equal(metadata.test[DD_CAPABILITIES_AUTO_TEST_RETRIES], '1')
31133114
assert.equal(metadata.test[DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE], '1')
31143115
assert.equal(metadata.test[DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE], '1')
3116+
assert.equal(metadata.test[DD_CAPABILITIES_FAILED_TEST_REPLAY], '1')
31153117
// capabilities logic does not overwrite test session name
31163118
assert.equal(metadata.test[TEST_SESSION_NAME], 'my-test-session-name')
31173119
})

integration-tests/playwright/playwright.spec.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ const {
4141
DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE,
4242
DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE,
4343
DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX,
44+
DD_CAPABILITIES_FAILED_TEST_REPLAY,
4445
TEST_MANAGEMENT_IS_ATTEMPT_TO_FIX,
4546
TEST_HAS_FAILED_ALL_RETRIES,
4647
TEST_NAME,
@@ -1370,12 +1371,14 @@ versions.forEach((version) => {
13701371
assert.equal(metadata.test[DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE], '1')
13711372
assert.equal(metadata.test[DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE], '1')
13721373
assert.equal(metadata.test[DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX], '4')
1374+
assert.equal(metadata.test[DD_CAPABILITIES_FAILED_TEST_REPLAY], '1')
13731375
} else {
13741376
assert.equal(metadata.test[DD_CAPABILITIES_EARLY_FLAKE_DETECTION], undefined)
13751377
assert.equal(metadata.test[DD_CAPABILITIES_IMPACTED_TESTS], undefined)
13761378
assert.equal(metadata.test[DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE], undefined)
13771379
assert.equal(metadata.test[DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE], undefined)
13781380
assert.equal(metadata.test[DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX], undefined)
1381+
assert.equal(metadata.test[DD_CAPABILITIES_FAILED_TEST_REPLAY], undefined)
13791382
}
13801383
// capabilities logic does not overwrite test session name
13811384
assert.equal(metadata.test[TEST_SESSION_NAME], 'my-test-session-name')

integration-tests/vitest/vitest.spec.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ const {
4646
DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE,
4747
DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE,
4848
DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX,
49+
DD_CAPABILITIES_FAILED_TEST_REPLAY,
4950
TEST_RETRY_REASON_TYPES,
5051
TEST_IS_MODIFIED,
5152
DD_CAPABILITIES_IMPACTED_TESTS
@@ -1867,6 +1868,7 @@ versions.forEach((version) => {
18671868
assert.equal(metadata.test[DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE], '1')
18681869
assert.equal(metadata.test[DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE], '1')
18691870
assert.equal(metadata.test[DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX], '4')
1871+
assert.equal(metadata.test[DD_CAPABILITIES_FAILED_TEST_REPLAY], '1')
18701872
// capabilities logic does not overwrite test session name
18711873
assert.equal(metadata.test[TEST_SESSION_NAME], 'my-test-session-name')
18721874
})

packages/dd-trace/src/plugins/util/test.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ const DD_CAPABILITIES_IMPACTED_TESTS = '_dd.library_capabilities.impacted_tests'
128128
const DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE = '_dd.library_capabilities.test_management.quarantine'
129129
const DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE = '_dd.library_capabilities.test_management.disable'
130130
const DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX = '_dd.library_capabilities.test_management.attempt_to_fix'
131+
const DD_CAPABILITIES_FAILED_TEST_REPLAY = '_dd.library_capabilities.failed_test_replay'
131132
const UNSUPPORTED_TIA_FRAMEWORKS = new Set(['playwright', 'vitest'])
132133
const UNSUPPORTED_TIA_FRAMEWORKS_PARALLEL_MODE = new Set(['cucumber', 'mocha'])
133134
const MINIMUM_FRAMEWORK_VERSION_FOR_EFD = {
@@ -145,6 +146,9 @@ const MINIMUM_FRAMEWORK_VERSION_FOR_DISABLE = {
145146
const MINIMUM_FRAMEWORK_VERSION_FOR_ATTEMPT_TO_FIX = {
146147
playwright: '>=1.38.0'
147148
}
149+
const MINIMUM_FRAMEWORK_VERSION_FOR_FAILED_TEST_REPLAY = {
150+
playwright: '>=1.38.0'
151+
}
148152

149153
const UNSUPPORTED_ATTEMPT_TO_FIX_FRAMEWORKS_PARALLEL_MODE = new Set(['mocha'])
150154
const NOT_SUPPORTED_GRANULARITY_IMPACTED_TESTS_FRAMEWORKS = new Set(['mocha', 'playwright', 'vitest'])
@@ -274,6 +278,7 @@ module.exports = {
274278
DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE,
275279
DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE,
276280
DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX,
281+
DD_CAPABILITIES_FAILED_TEST_REPLAY,
277282
TEST_LEVEL_EVENT_TYPES,
278283
TEST_RETRY_REASON_TYPES,
279284
getNumFromKnownTests,
@@ -944,6 +949,12 @@ function isAttemptToFixSupported (testFramework, isParallel, frameworkVersion) {
944949
return !(isParallel && UNSUPPORTED_ATTEMPT_TO_FIX_FRAMEWORKS_PARALLEL_MODE.has(testFramework))
945950
}
946951

952+
function isFailedTestReplaySupported (testFramework, frameworkVersion) {
953+
return testFramework === 'playwright'
954+
? satisfies(frameworkVersion, MINIMUM_FRAMEWORK_VERSION_FOR_FAILED_TEST_REPLAY[testFramework])
955+
: true
956+
}
957+
947958
function getLibraryCapabilitiesTags (testFramework, isParallel, frameworkVersion) {
948959
return {
949960
[DD_CAPABILITIES_TEST_IMPACT_ANALYSIS]: isTiaSupported(testFramework, isParallel)
@@ -965,7 +976,10 @@ function getLibraryCapabilitiesTags (testFramework, isParallel, frameworkVersion
965976
[DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX]:
966977
isAttemptToFixSupported(testFramework, isParallel, frameworkVersion)
967978
? '4'
968-
: undefined
979+
: undefined,
980+
[DD_CAPABILITIES_FAILED_TEST_REPLAY]: isFailedTestReplaySupported(testFramework, frameworkVersion)
981+
? '1'
982+
: undefined
969983
}
970984
}
971985

0 commit comments

Comments
 (0)