Метод testing.T.Parallel
Метод testing.T.Parallel помечает текущий тест как подлежащий
параллельному выполнению. Когда тест вызывает этот метод, он сообщает
средству выполнения тестов, что готов к параллельному запуску вместе
с другими параллельными тестами. Вызов метода должен происходить внутри
функции теста, обычно после завершения подготовительных операций.
Синтаксис
func TestXxx(t *testing.T) {
t.Parallel()
// код теста
}
Пример
Рассмотрим базовый пример параллельного выполнения двух тестов:
package main
import (
"testing"
"time"
)
func TestA(t *testing.T) {
t.Parallel()
time.Sleep(2 * time.Second)
t.Log("TestA completed")
}
func TestB(t *testing.T) {
t.Parallel()
time.Sleep(2 * time.Second)
t.Log("TestB completed")
}
Результат выполнения кода:
"TestA completed"
"TestB completed"
Пример
Параллельные тесты можно комбинировать с последовательными:
package main
import (
"testing"
"time"
)
func TestSequential(t *testing.T) {
time.Sleep(1 * time.Second)
t.Log("Sequential test")
}
func TestParallel1(t *testing.T) {
t.Parallel()
time.Sleep(2 * time.Second)
t.Log("Parallel test 1")
}
func TestParallel2(t *testing.T) {
t.Parallel()
time.Sleep(2 * time.Second)
t.Log("Parallel test 2")
}
Результат выполнения кода:
"Sequential test"
"Parallel test 1"
"Parallel test 2"
Пример
Использование t.Parallel с подтестами, запускаемыми через t.Run:
package main
import (
"testing"
"time"
)
func TestMain(t *testing.T) {
t.Parallel()
t.Run("subtest1", func(t *testing.T) {
t.Parallel()
time.Sleep(1 * time.Second)
t.Log("Subtest 1")
})
t.Run("subtest2", func(t *testing.T) {
t.Parallel()
time.Sleep(1 * time.Second)
t.Log("Subtest 2")
})
}
Результат выполнения кода:
"Subtest 1"
"Subtest 2"
Смотрите также
-
метод
testing.T.Run,
который запускает подтесты внутри основного теста -
метод
testing.T,
основной тип для работы с тестами в Go -
метод
testing.B,
который используется для бенчмарков -
метод
benchmark,
который позволяет измерять производительность кода