

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 各種測試架構範例的平行測試執行
<a name="sample-parallel-test"></a>

您可以使用 `codebuild-tests-run` CLI 命令，在平行執行環境中分割和執行測試。下一節提供各種架構`buildspec.yml`的範例，說明 `codebuild-tests-run`命令的使用方式。
+ 以下每個範例都包含五個`parallelism`層級，這表示將建立五個相同的執行環境來分割您的測試。您可以透過修改 `build-fanout`區段中的 `parallelism`值來選擇適合您專案的`parallelism`關卡。
+ 以下每個範例都會顯示將您的測試設定為依測試檔案名稱分割，這是預設的。這會將測試平均分散到平行執行環境。

開始使用之前，請參閱 [在批次建置中執行平行測試](parallel-test.md) 以取得詳細資訊。

如需使用 CLI `codebuild-tests-run` 命令時選項的完整清單，請參閱 [使用 `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 平台上`buildspec.yml`使用 Django 顯示平行測試執行的 範例：

```
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 平台上`buildspec.yml`使用 Elixir 顯示平行測試執行的 範例：

```
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 平台上`buildspec.yml`使用 Go 顯示平行測試執行的 範例：

```
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 平台上`buildspec.yml`使用 Java 顯示平行測試執行的 範例：

```
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>

以下是`buildspec.yml`在 Ubuntu 平台上使用 Javascript 顯示平行測試執行的 範例：

```
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 平台上`buildspec.yml`使用 Kotlin 顯示平行測試執行的 範例：

```
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 平台上`buildspec.yml`使用 PHPUnit 顯示平行測試執行的 範例：

```
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>

以下是`buildspec.yml`在 Ubuntu 平台上使用 Pytest 顯示平行測試執行的 範例：

```
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"
```

以下是`buildspec.yml`在 Windows 平台上使用 Pytest 顯示平行測試執行的 範例：

```
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 平台上`buildspec.yml`使用 Cucumber 顯示平行測試執行的 範例：

```
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 平台上`buildspec.yml`使用 RSpec 顯示平行測試執行的 範例：

```
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"
```