Одна вещь - это бенчмаркинг (измерение времени выполнения кода), другая - нагрузочное / стресс-тестирование.
Флаг -parallel, как указано выше, предназначен для параллельного выполнения ряда тестов, позволяянабор тестов должен выполняться быстрее, а не выполнять несколько тестов N раз параллельно.
Но просто добиться того, чего вы хотите (выполнение одного теста N раз).Ниже приведен очень простой (очень быстрый и грязный) пример, чтобы прояснить / продемонстрировать важные моменты, которые позволяют решить эту очень специфическую ситуацию:
- Вы определяете тест и помечаете его для параллельного выполнения => TestAverage с вызовом t.Parallel
- Затем вы определяете другой тест и используете RunParallel для выполнения желаемого количества экземпляров теста (TestAverage).
Класс дляtest:
package math
import (
"fmt"
"time"
)
func Average(xs []float64) float64 {
total := float64(0)
for _, x := range xs {
total += x
}
fmt.Printf("Current Unix Time: %v\n", time.Now().Unix())
time.Sleep(10 * time.Second)
fmt.Printf("Current Unix Time: %v\n", time.Now().Unix())
return total / float64(len(xs))
}
Функции тестирования:
package math
import "testing"
func TestAverage(t *testing.T) {
t.Parallel()
var v float64
v = Average([]float64{1,2})
if v != 1.5 {
t.Error("Expected 1.5, got ", v)
}
}
func TestTeardownParallel(t *testing.T) {
// This Run will not return until the parallel tests finish.
t.Run("group", func(t *testing.T) {
t.Run("Test1", TestAverage)
t.Run("Test2", TestAverage)
t.Run("Test3", TestAverage)
})
// <tear-down code>
}
Затем просто выполните go-тест, и вы увидите:
X:\>go test
Current Unix Time: 1556717363
Current Unix Time: 1556717363
Current Unix Time: 1556717363
И через 10 секунд после этого
...
Current Unix Time: 1556717373
Current Unix Time: 1556717373
Current Unix Time: 1556717373
Current Unix Time: 1556717373
Current Unix Time: 1556717383
PASS
ok _/X_/y 20.259s
Две дополнительные строки, в конце концов, заключаются в том, что также выполняется TestAverage.
Интересный момент: если вы удалите t.Parallel () из TestAverage, все это будет выполненопоследовательно:
X:> go test
Current Unix Time: 1556717564
Current Unix Time: 1556717574
Current Unix Time: 1556717574
Current Unix Time: 1556717584
Current Unix Time: 1556717584
Current Unix Time: 1556717594
Current Unix Time: 1556717594
Current Unix Time: 1556717604
PASS
ok _/X_/y 40.270s
Это, конечно, можно сделать более сложным и расширяемым ...