step.duration reflects only the last retry attempt (HelperStep.run() overwrites startTime)
Maintainer antworten meist innerhalb von 2 Tagen
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 78/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- javascript, nodejs, playwright
Rechercherichtung
Beginne mit lib/step/helper.js und lib/step/func.js, wo run() startTime zurücksetzt, und vergleiche dann ihr Verhalten mit der Schutzbedingung in lib/step/record.js. Prüfe, wie duration in lib/step/base.js berechnet wird, und suche nach vorhandenen Retry-Tests. Fertig ist die Arbeit, wenn die Dauer vom ersten Versuch bis zum endgültigen Erfolg oder Fehlschlag reicht.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
What happens
When a helper step is retried (e.g. by the retryFailedStep plugin), step.duration covers only the last attempt instead of the whole step.
In our run, a I.click(...) step was retried for ~50 seconds before it finally failed. The HTML report (@testomatio/reporter, which shows step.duration) listed it as 3ms, while the scenario took 49s 697ms.
Cause
lib/step/record.js deliberately keeps the start time of the first attempt:
() => {
if (!step.startTime) {
// step can be retries
event.emit(event.step.started, step)
step.startTime = +Date.now()
}
return (val = step.run(...args))
},
But HelperStep.run() in lib/step/helper.js overwrites it on every attempt:
run() {
this.args = Array.prototype.slice.call(arguments)
this.startTime = +Date.now()
...
So duration (endTime - startTime in lib/step/base.js) is measured from the start of the last retry. FuncStep.run() in lib/step/func.js has the same assignment.
Expected
step.duration covers all attempts, from the first start to the final pass or failure, as the guard in record.js intends. A possible fix is to set startTime in run() only when it isn't already set.
Steps to reproduce
- Enable
retryFailedStep. - Run a step that fails for a while and is retried, e.g.
I.click()on an element that never shows up. - Read
step.durationin anevent.step.finishedlistener, or look at the step time in any reporter that uses it. It shows only the last attempt's duration (a few ms).
Environment
- CodeceptJS 4.2.2 (also present on current
main) - Playwright helper, Bun runtime
Created by AI agent (Claude Code)
- Vorherrschende Sprache
- JavaScript
- Sterne
- 4.2k
- Forks
- 754
- Ø Merge
- 2 T. 11 Std.
- Gemergte PRs (30 T.)
- 33
Entwicklungsumgebung
- Enthält ein Dockerfile oder eine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus codeceptjs/CodeceptJS
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
codeceptjs/CodeceptJS#5773 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 2 Tagen
-
`I.waitForFile` (FileSystem helper) fails if directory does not exist (yet)Evtl. vergeben @danielrentz hat das vor 274 Tagen übernommen. Offenstale
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
codeceptjs/CodeceptJS#5420 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 2 Tagen
-
stale
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
codeceptjs/CodeceptJS#4958 · 10 Kommentare · 2 Reaktionen ·
Maintainer antworten meist innerhalb von 2 Tagen
-
stale
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 72/100
codeceptjs/CodeceptJS#4778 · 3 Kommentare ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 72/100
codeceptjs/CodeceptJS#5772 ·
Maintainer antworten meist innerhalb von 2 Tagen
Alle Issues in codeceptjs/CodeceptJS
Ähnliche Issues
-
Status: Unconfirmed
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 76/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
AllTheMods/ATM10-Aeronautics#151 ·
Maintainer antworten meist innerhalb von 4 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
feimacode/open-design-agent-kit#66 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Maintainer antworten meist innerhalb von 1 Tag