Метод testing.T.Parallel

Метод testing.T.Parallel помечает текущий тест как подлежащий параллельному выполнению. Когда тест вызывает этот метод, он сообщает средству выполнения тестов, что готов к параллельному запуску вместе с другими параллельными тестами. Вызов метода должен происходить внутри функции теста, обычно после завершения подготовительных операций.

Синтаксис

gofunc TestXxx(t *testing.T) {
  t.Parallel()
  // код теста
}

Пример

Рассмотрим базовый пример параллельного выполнения двух тестов:

gopackage 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")
}

Результат выполнения кода:

go"TestA completed"
"TestB completed"

Пример

Параллельные тесты можно комбинировать с последовательными:

gopackage 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")
}

Результат выполнения кода:

go"Sequential test"
"Parallel test 1"
"Parallel test 2"

Пример

Использование t.Parallel с подтестами, запускаемыми через t.Run:

gopackage 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")
  })
}

Результат выполнения кода:

go"Subtest 1"
"Subtest 2"

Смотрите также

  • метод testing.T.Run,
    который запускает подтесты внутри основного теста
  • метод testing.T,
    основной тип для работы с тестами в Go
  • метод testing.B,
    который используется для бенчмарков
  • метод benchmark,
    который позволяет измерять производительность кода