

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 다양한 테스트 프레임워크 샘플에 대한 병렬 테스트 실행
<a name="sample-parallel-test"></a>

`codebuild-tests-run` CLI 명령을 사용하여 병렬 실행 환경에서 테스트를 분할하고 실행할 수 있습니다. 다음 섹션에서는 `codebuild-tests-run` 명령 사용을 보여주는 다양한 프레임워크에 대한 `buildspec.yml` 샘플을 제공합니다.
+ 아래 각 예제에는 5개의 `parallelism` 수준이 포함되어 있습니다. 즉, 테스트를 분할하기 위해 5개의 동일한 실행 환경이 생성됩니다. `build-fanout` 섹션의 `parallelism` 값을 수정하여 프로젝트에 적합한 `parallelism` 수준을 선택할 수 있습니다.
+ 아래 각 예제는 기본적으로 테스트 파일 이름으로 분할되도록 테스트를 구성하는 방법을 보여줍니다. 이렇게 하면 병렬 실행 환경에 테스트가 균등하게 분산됩니다.

시작하기 전에 [배치 빌드에서 병렬 테스트 실행](parallel-test.md)에서 자세한 내용을 참조하세요.

`codebuild-tests-run` CLI 명령을 사용할 때의 전체 옵션 목록은 [`codebuild-tests-run` CLI 명령 사용](parallel-test-tests-run.md)에서 확인하세요.

**Topics**
+ [Django를 사용하여 병렬 테스트 구성](sample-parallel-test-django.md)
+ [Elixir를 사용하여 병렬 테스트 구성](sample-parallel-test-elixir.md)
+ [Go를 사용하여 병렬 테스트 구성](sample-parallel-test-go.md)
+ [Java(Maven)를 사용하여 병렬 테스트 구성](sample-parallel-test-java-maven.md)
+ [Javascript(Jest)를 사용하여 병렬 테스트 구성](sample-parallel-test-javascript.md)
+ [Kotlin을 사용하여 병렬 테스트 구성](sample-parallel-test-kotlin.md)
+ [PHPUnit을 사용하여 병렬 테스트 구성](sample-parallel-test-phpunit.md)
+ [Pytest를 사용하여 병렬 테스트 구성](sample-parallel-test-python.md)
+ [Ruby(Cucumber)를 사용하여 병렬 테스트 구성](sample-parallel-test-ruby-cucumber.md)
+ [Ruby(RSpec)를 사용하여 병렬 테스트 구성](sample-parallel-test-ruby.md)

# Django를 사용하여 병렬 테스트 구성
<a name="sample-parallel-test-django"></a>

다음은 Ubuntu 플랫폼에서 Django를 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2

batch:
  fast-fail: false
  build-fanout:
    parallelism: 5

phases:
  install:
    commands:
      - echo 'Installing Python dependencies'
      - sudo yum install -y python3 python3-pip 
      - python3 -m ensurepip --upgrade 
      - python3 -m pip install django
  pre_build:
    commands:
      - echo 'Prebuild'
  build:
    commands:
      - echo 'Running Django Tests'
      - |
        codebuild-tests-run \
         --test-command 'python3 manage.py test $(echo "$CODEBUILD_CURRENT_SHARD_FILES" | sed -E "s/\//__/g; s/\.py$//; s/__/./g")' \ 
         --files-search "codebuild-glob-search '**/tests/*test_*.py'" \
         --sharding-strategy 'equal-distribution'
  post_build:
    commands:
      - echo 'Test execution completed'
```

위 예제에서는 `CODEBUILD_CURRENT_SHARD_FILES` 환경 변수를 사용하는 모습을 보여줍니다. 여기서 `CODEBUILD_CURRENT_SHARD_FILES`는 Django에서 지원하는 점 표기법 파일 경로를 가져오는 데 사용됩니다. 위와 같이 큰따옴표 안에 `CODEBUILD_CURRENT_SHARD_FILES`를 사용합니다.

# Elixir를 사용하여 병렬 테스트 구성
<a name="sample-parallel-test-elixir"></a>

다음은 Ubuntu 플랫폼에서 Elixir를 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2

batch:
  fast-fail: false
  build-fanout:
    parallelism: 5

phases:
  install:
    commands:
      - echo 'Installing Elixir dependencies'
      - sudo apt update
      - sudo DEBIAN_FRONTEND=noninteractive apt install -y elixir
      - elixir --version
      - mix --version
  pre_build:
    commands:
      - echo 'Prebuild'
  build:
    commands:
      - echo 'Running Elixir Tests'
      - |
        codebuild-tests-run \
         --test-command 'mix test' \
         --files-search "codebuild-glob-search '**/test/**/*_test.exs'" \ 
         --sharding-strategy 'equal-distribution'
  post_build:
    commands:
      - echo "Test execution completed"
```

# Go를 사용하여 병렬 테스트 구성
<a name="sample-parallel-test-go"></a>

다음은 Linux 플랫폼에서 Go를 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2

batch:
  fast-fail: false
  build-fanout:
    parallelism: 5
    ignore-failure: false

phases:
  install:
    commands:
      - echo 'Fetching Go version'
      - go version
  pre_build:
    commands:
      - echo 'prebuild'
  build:
    commands:
      - echo 'Running go Tests'
      - go mod init calculator
      - cd calc
      - |
        codebuild-tests-run \
         --test-command "go test -v calculator.go" \
         --files-search "codebuild-glob-search '**/*test.go'"
  post_build:
    commands:
      - echo "Test execution completed"
```

위 예제에서 `calculator.go` 함수에는 테스트할 간단한 수학 함수가 포함되어 있으며 모든 테스트 파일과 `calculator.go` 파일은 `calc` 폴더 내에 있습니다.

# Java(Maven)를 사용하여 병렬 테스트 구성
<a name="sample-parallel-test-java-maven"></a>

다음은 Linux 플랫폼에서 Java를 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2

batch:
  fast-fail: false 
  build-fanout:
    parallelism: 5
    ignore-failure: false
    
phases:
  pre_build:
    commands:
      - echo 'prebuild'
  build:
    commands:
      - echo "Running mvn test"
      - |
        codebuild-tests-run \
          --test-command 'mvn test -Dtest=$(echo "$CODEBUILD_CURRENT_SHARD_FILES" | sed "s|src/test/java/||g; s/\.java//g; s|/|.|g; s/ /,/g" | tr "\n" "," | sed "s/,$//")' \
          --files-search "codebuild-glob-search '**/test/**/*.java'"
         
  post_build:
    commands:
      - echo "Running post-build steps..."
      - echo "Test execution completed"
```

주어진 예제에서 `CODEBUILD_CURRENT_SHARD_FILES` 환경 변수는 현재 샤드에 새 줄로 구분된 테스트 파일을 포함합니다. 이러한 파일은 Maven의 `-Dtest` 파라미터에서 허용하는 형식으로 쉼표로 구분된 클래스 이름 목록으로 변환됩니다.

# Javascript(Jest)를 사용하여 병렬 테스트 구성
<a name="sample-parallel-test-javascript"></a>

다음은 Ubuntu 플랫폼에서 Javascript를 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2

batch:
  fast-fail: true
  build-fanout:
    parallelism: 5
    ignore-failure: false

phases:
  install:
    commands:
      - echo 'Installing Node.js dependencies'
      - apt-get update
      - apt-get install -y nodejs
      - npm install
      - npm install --save-dev jest-junit
  pre_build:
    commands:
      - echo 'prebuild'
  build:
    commands:
      - echo 'Running JavaScript Tests'
      - |
         codebuild-tests-run \
          --test-command "npx jest" \
          --files-search "codebuild-glob-search '**/test/**/*.test.js'" \
          --sharding-strategy 'stability'
    post_build:
      commands:
        - echo 'Test execution completed'
```

# Kotlin을 사용하여 병렬 테스트 구성
<a name="sample-parallel-test-kotlin"></a>

다음은 Linux 플랫폼에서 Kotlin을 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2

batch:
  fast-fail: false
  build-fanout:
    parallelism: 2
    ignore-failure: false

phases:
  install:
    runtime-versions:
      java: corretto11 
    commands:
      - echo 'Installing dependencies'
      - KOTLIN_VERSION="1.8.20" # Replace with your desired version
      - curl -o kotlin-compiler.zip -L "https://github.com/JetBrains/kotlin/releases/download/v${KOTLIN_VERSION}/kotlin-compiler-${KOTLIN_VERSION}.zip"
      - unzip kotlin-compiler.zip -d /usr/local
      - export PATH=$PATH:/usr/local/kotlinc/bin
      - kotlin -version
      - curl -O https://repo1.maven.org/maven2/org/junit/platform/junit-platform-console-standalone/1.8.2/junit-platform-console-standalone-1.8.2.jar
  pre_build:
    commands:
      - echo 'prebuild'
  build:
    commands:
      - echo 'Running Kotlin Tests'
      - |
        codebuild-tests-run \
          --test-command 'kotlinc src/main/kotlin/*.kt $(echo "$CODEBUILD_CURRENT_SHARD_FILES" | tr "\n" " ") -d classes -cp junit-platform-console-standalone-1.8.2.jar' \
          --files-search "codebuild-glob-search 'src/test/kotlin/*.kt'"
      - |
        codebuild-tests-run \
          --test-command '
            java -jar junit-platform-console-standalone-1.8.2.jar --class-path classes \
              $(for file in $CODEBUILD_CURRENT_SHARD_FILES; do
                 class_name=$(basename "$file" .kt)
                 echo "--select-class $class_name"
               done)
          ' \
          --files-search "codebuild-glob-search 'src/test/kotlin/*.kt'"
  post_build:
    commands:
      - echo "Test execution completed"
```

위 예제에서는 `codebuild-tests-run` CLI가 두 번 사용됩니다. 첫 번째 실행 중에 kotlinc는 파일을 컴파일합니다. `CODEBUILD_CURRENT_SHARD_FILES` 변수는 현재 샤드에 할당된 테스트 파일을 검색한 다음 공백으로 구분된 목록으로 변환합니다. 두 번째 실행에서는 JUnit가 테스트를 실행합니다. 다시 `CODEBUILD_CURRENT_SHARD_FILES`는 현재 샤드에 할당된 테스트 파일을 가져오지만, 이번에는 클래스 이름으로 변환됩니다.

# PHPUnit을 사용하여 병렬 테스트 구성
<a name="sample-parallel-test-phpunit"></a>

다음은 Linux 플랫폼에서 PHPUnit를 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2
 
batch:
   fast-fail: false
   build-fanout:
     parallelism: 5
     ignore-failure: false
 
phases:
   install:
     commands:
       - echo 'Install dependencies'
       - composer require --dev phpunit/phpunit
   pre_build:
     commands:
       - echo 'prebuild'
   build:
     commands:
       - echo 'Running phpunit Tests'
       - composer dump-autoload
       - | 
         codebuild-tests-run \
          --test-command "./vendor/bin/phpunit --debug" \ 
          --files-search "codebuild-glob-search '**/tests/*Test.php'"
   post_build:
       commands:
         - echo 'Test execution completed'
```

# Pytest를 사용하여 병렬 테스트 구성
<a name="sample-parallel-test-python"></a>

다음은 Ubuntu 플랫폼에서 Pytest를 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2

batch:
  fast-fail: false
  build-fanout:
    parallelism: 5
    ignore-failure: false

phases:
  install:
    commands:
      - echo 'Installing Python dependencies'
      - apt-get update
      - apt-get install -y python3 python3-pip
      - pip3 install --upgrade pip
      - pip3 install pytest
  build:
    commands:
      - echo 'Running Python Tests'
      - |
         codebuild-tests-run \
          --test-command 'python -m pytest' \
          --files-search "codebuild-glob-search 'tests/test_*.py'" \
          --sharding-strategy 'equal-distribution'
  post_build:
    commands:
      - echo "Test execution completed"
```

다음은 Windows 플랫폼에서 Pytest를 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2

batch:
  fast-fail: false
  build-fanout:
    parallelism: 5
    ignore-failure: false

phases:
  install:
    commands:
      - echo 'Installing Python dependencies'
      - pip install pytest
  pre_build:
    commands:
      - echo 'prebuild'
  build:
    commands:
      - echo 'Running pytest'
      - |
        & codebuild-tests-run `
         --test-command 'pytest @("$env:CODEBUILD_CURRENT_SHARD_FILES" -split \"`r?`n\")'  `
         --files-search "codebuild-glob-search '**/test_*.py' '**/*_test.py'" `
         --sharding-strategy 'equal-distribution' 
  post_build:
    commands:
      - echo "Test execution completed"
```

위 예제에서 `CODEBUILD_CURRENT_SHARD_FILES` 환경 변수는 현재 샤드에 할당되고 pytest 명령에 배열로 전달되는 테스트 파일을 가져오는 데 사용됩니다.

# Ruby(Cucumber)를 사용하여 병렬 테스트 구성
<a name="sample-parallel-test-ruby-cucumber"></a>

다음은 Linux 플랫폼에서 Cucumber를 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2

batch:
  fast-fail: false
  build-fanout:
    parallelism: 5
    ignore-failure: false

phases:
  install:
    commands:
      - echo 'Installing Ruby dependencies'
      - gem install bundler
      - bundle install
  pre_build:
    commands:
      - echo 'prebuild'
  build:
    commands:
      - echo 'Running Cucumber Tests'
      - cucumber --init
      - |
        codebuild-tests-run \
         --test-command "cucumber" \
         --files-search "codebuild-glob-search '**/*.feature'"
  post_build:
    commands:
      - echo "Test execution completed"
```

# Ruby(RSpec)를 사용하여 병렬 테스트 구성
<a name="sample-parallel-test-ruby"></a>

다음은 Ubuntu 플랫폼에서 RSpec을 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2

batch:
  fast-fail: false
  build-fanout:
    parallelism: 5
    ignore-failure: false

phases:
  install:
    commands:
      - echo 'Installing Ruby dependencies'
      - apt-get update
      - apt-get install -y ruby ruby-dev build-essential
      - gem install bundler
      - bundle install
  build:
    commands:
      - echo 'Running Ruby Tests'
      - |
         codebuild-tests-run \
          --test-command 'bundle exec rspec' \
          --files-search "codebuild-glob-search 'spec/**/*_spec.rb'" \
          --sharding-strategy 'equal-distribution'
  post_build:
    commands:
      - echo "Test execution completed"
```