PHpullh
학습 라이브러리/Go/병렬 테스트

GO · 테스트

병렬 테스트

t.Parallel()로 테스트를 병렬 실행하여 테스트 시간을 단축합니다.

테스트중급paralleltestingperformanceconcurrent

핵심 설명

t.Parallel()로 테스트를 병렬 실행하여 테스트 시간을 단축합니다.

Go code

package main

import (
	"fmt"
	"testing"
	"time"
)

func TestParallel(t *testing.T) {
	tests := []struct {
		name     string
		duration time.Duration
	}{
		{"빠른 테스트", 100 * time.Millisecond},
		{"중간 테스트", 200 * time.Millisecond},
		{"느린 테스트", 300 * time.Millisecond},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			t.Parallel() // 병렬 실행 선언

			// 독립적인 테스트 로직
			time.Sleep(tt.duration)
			// 순차: 600ms, 병렬: ~300ms
		})
	}
}

// 병렬 테스트에서 공유 리소스
func TestParallelWithSetup(t *testing.T) {
	// 셋업은 직렬로
	// db := setupTestDB(t)

	t.Run("group", func(t *testing.T) {
		t.Run("test1", func(t *testing.T) {
			t.Parallel()
			// db 사용 (읽기만)
		})
		t.Run("test2", func(t *testing.T) {
			t.Parallel()
			// db 사용 (읽기만)
		})
	})
	// 모든 병렬 서브테스트 완료 후 정리
}

func main() {
	fmt.Println("병렬 테스트: go test -v -parallel 4")
}

학습 팁

-parallel N 플래그로 최대 병렬 수를 제어합니다. 기본값은 GOMAXPROCS입니다.

주의할 점

병렬 테스트에서 공유 상태를 변경하면 레이스 컨디션이 발생합니다. 각 테스트는 독립적인 데이터를 사용하세요.

자주 묻는 질문

병렬 테스트란 무엇인가요?

t.Parallel() 로 테스트를 병렬 실행하여 테스트 시간을 단축합니다.

병렬 테스트 학습 시 주의할 점은 무엇인가요?

병렬 테스트에서 공유 상태를 변경하면 레이스 컨디션이 발생합니다. 각 테스트는 독립적인 데이터를 사용하세요.