diff --git a/src/testing/testing.go b/src/testing/testing.go index 6237da9abd..c478adea9f 100644 --- a/src/testing/testing.go +++ b/src/testing/testing.go @@ -418,10 +418,12 @@ func (c *common) Skipped() bool { // Parallel signals that this test is to be run in parallel with (and only with) // other parallel tests. func (t *T) Parallel() { + // We don't want to include the time we spend waiting for serial tests + // in the test duration. Record the elapsed time thus far and reset the + // timer afterwards. + t.duration += time.Since(t.start) t.signal <- (*T)(nil) // Release main testing loop <-t.startParallel // Wait for serial tests to finish - // Assuming Parallel is the first thing a test does, which is reasonable, - // reinitialize the test's start time because it's actually starting now. t.start = time.Now() } @@ -438,7 +440,7 @@ func tRunner(t *T, test *InternalTest) { // a call to runtime.Goexit, record the duration and send // a signal saying that the test is done. defer func() { - t.duration = time.Now().Sub(t.start) + t.duration += time.Now().Sub(t.start) // If the test panicked, print any test output before dying. err := recover() if !t.finished && err == nil {