

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Jalankan tes paralel dalam build batch
<a name="parallel-test"></a>

Anda dapat menggunakan AWS CodeBuild untuk menjalankan tes paralel dalam build batch. Eksekusi uji paralel adalah pendekatan pengujian di mana beberapa kasus uji berjalan secara bersamaan di berbagai lingkungan, mesin, atau browser, daripada mengeksekusi secara berurutan. Pendekatan ini dapat secara signifikan mengurangi waktu pelaksanaan pengujian secara keseluruhan dan meningkatkan efisiensi pengujian. Di CodeBuild, Anda dapat membagi pengujian Anda di beberapa lingkungan dan menjalankannya secara bersamaan.

Keuntungan utama dari eksekusi uji paralel meliputi:

1. **Mengurangi waktu eksekusi** - Pengujian yang akan memakan waktu berjam-jam secara berurutan dapat diselesaikan dalam hitungan menit.

1. **Pemanfaatan sumber daya yang lebih baik** - Memanfaatkan sumber daya komputasi yang tersedia secara efisien.

1. **Umpan balik sebelumnya** - Penyelesaian tes yang lebih cepat berarti umpan balik yang lebih cepat kepada pengembang.

1. **Hemat biaya** - Menghemat waktu dan biaya komputasi dalam jangka panjang.

Saat menerapkan eksekusi uji paralel, dua pendekatan utama umumnya dipertimbangkan: lingkungan terpisah dan multithreading. Sementara kedua metode bertujuan untuk mencapai eksekusi tes bersamaan, keduanya berbeda secara signifikan dalam implementasi dan efektivitasnya. Lingkungan terpisah membuat instance terisolasi di mana setiap rangkaian pengujian berjalan secara independen, sementara multithreading mengeksekusi beberapa pengujian secara bersamaan dalam ruang proses yang sama menggunakan utas yang berbeda.

Keuntungan utama dari lingkungan terpisah dibandingkan multithreading meliputi:

1. **Isolasi** - Setiap pengujian berjalan di lingkungan yang benar-benar terisolasi, mencegah interferensi antar pengujian.

1. **Konflik sumber daya** - Tidak ada persaingan untuk sumber daya bersama yang sering terjadi dalam multithreading.

1. **Stabilitas** - Kurang rentan terhadap kondisi balapan dan masalah sinkronisasi.

1. **Debugging yang lebih mudah** - Ketika pengujian gagal, lebih mudah untuk mengidentifikasi penyebabnya karena setiap lingkungan independen.

1. **Manajemen negara** - Kelola masalah status bersama dengan mudah yang mengganggu tes multithreaded.

1. **Skalabilitas yang lebih baik** - Dapat dengan mudah menambahkan lebih banyak lingkungan tanpa kerumitan.

**Topics**
+ [Support di AWS CodeBuild](#parallel-test-support)
+ [Aktifkan eksekusi uji paralel dalam build batch](parallel-test-enable.md)
+ [Gunakan perintah `codebuild-tests-run` CLI](parallel-test-tests-run.md)
+ [Gunakan perintah `codebuild-glob-search` CLI](parallel-test-glob-search.md)
+ [Tentang test splitting](parallel-test-splitting.md)
+ [Secara otomatis menggabungkan laporan build individual](parallel-test-auto-merge.md)
+ [Eksekusi uji paralel untuk berbagai sampel kerangka pengujian](sample-parallel-test.md)

## Support di AWS CodeBuild
<a name="parallel-test-support"></a>

AWS CodeBuild memberikan dukungan kuat untuk eksekusi uji paralel melalui fitur pembuatan batch, yang dirancang khusus untuk memanfaatkan eksekusi lingkungan yang terpisah. Implementasi ini selaras sempurna dengan manfaat lingkungan pengujian yang terisolasi.

**Batch build dengan distribusi pengujian**  
CodeBuildfungsionalitas batch build memungkinkan pembuatan beberapa lingkungan build yang berjalan secara bersamaan. Setiap lingkungan beroperasi sebagai unit yang sepenuhnya terisolasi, dengan sumber daya komputasi, lingkungan runtime, dan dependensinya sendiri. Melalui konfigurasi batch build, Anda dapat menentukan berapa banyak lingkungan paralel yang mereka butuhkan dan bagaimana pengujian harus didistribusikan di seluruh lingkungan tersebut.

**Uji sharding CLI**  
CodeBuild mencakup mekanisme distribusi pengujian bawaan melalui alat CLI`codebuild-tests-run`, yang secara otomatis membagi pengujian ke dalam lingkungan yang berbeda.

**Laporkan agregasi**  
Salah satu kekuatan utama implementasi CodeBuild ini adalah kemampuannya untuk menangani agregasi hasil tes dengan mulus. Saat pengujian dijalankan di lingkungan terpisah, CodeBuild secara otomatis mengumpulkan dan menggabungkan laporan pengujian dari setiap lingkungan ke dalam laporan pengujian terpadu di tingkat pembuatan batch. Konsolidasi ini memberikan pandangan yang komprehensif tentang hasil pengujian sambil mempertahankan manfaat efisiensi dari eksekusi paralel.

Berikut ini adalah diagram yang menjelaskan konsep lengkap eksekusi uji paralel di AWS CodeBuild.

![\[Diagram konsep eksekusi uji paralel.\]](http://docs.aws.amazon.com/id_id/codebuild/latest/userguide/images/parallel-test.png)


# Aktifkan eksekusi uji paralel dalam build batch
<a name="parallel-test-enable"></a>

Untuk menjalankan pengujian secara paralel, perbarui file buildspec build batch untuk menyertakan bidang build-fanout dan jumlah build paralel untuk membagi rangkaian pengujian di bidang seperti yang ditunjukkan di bawah ini. `parallelism` `parallelism`Bidang menentukan berapa banyak pelaksana independen yang disiapkan untuk menjalankan rangkaian pengujian.

Untuk menjalankan pengujian di beberapa lingkungan eksekusi paralel, atur `parallelism` bidang ke nilai yang lebih besar dari nol. Dalam contoh di bawah `parallelism` ini, diatur ke lima, artinya CodeBuild dimulai lima build identik yang mengeksekusi sebagian dari rangkaian pengujian secara paralel.

Anda dapat menggunakan perintah [codebuild-tests-run](parallel-test-tests-run.md)CLI untuk membagi dan menjalankan pengujian Anda. File pengujian Anda akan dibagi, dan sebagian pengujian Anda dijalankan di setiap build. Ini mengurangi waktu keseluruhan yang dibutuhkan untuk menjalankan rangkaian pengujian lengkap. Dalam contoh berikut, tes akan dibagi menjadi lima dan poin split dihitung berdasarkan nama tes.

```
version: 0.2

batch:
  fast-fail: false 
  build-fanout:
    parallelism: 5
    ignore-failure: false
    
phases:
  install:
    commands:
      - npm install jest-junit --save-dev
  pre_build:
    commands:
      - echo 'prebuild'
  build:
    commands:
      - |
        codebuild-tests-run \
         --test-command 'npx jest --runInBand --coverage' \
         --files-search "codebuild-glob-search '**/_tests_/**/*.test.js'" \
         --sharding-strategy 'equal-distribution'

  post_build:
    commands:
      - codebuild-glob-search '**/*.xml'  
      - echo "Running post-build steps..."
      - echo "Build completed on `date`"

reports:
  test-reports:
    files:
      - '**/junit.xml'               
    base-directory: .
    discard-paths: yes           
    file-format: JUNITXML
```

Jika laporan dikonfigurasi untuk build build-fanout, maka laporan pengujian dibuat untuk setiap build secara terpisah, yang dapat dilihat di bawah tab **Laporan** dari build terkait di konsol. AWS CodeBuild 

Untuk informasi selengkapnya tentang cara menjalankan pengujian paralel dalam batch, lihat[Eksekusi uji paralel untuk berbagai sampel kerangka pengujian](sample-parallel-test.md).

# Gunakan perintah `codebuild-tests-run` CLI
<a name="parallel-test-tests-run"></a>

AWS CodeBuild menyediakan CLI yang akan mengambil perintah uji dan lokasi file uji sebagai input. CLI dengan input ini akan membagi tes menjadi jumlah pecahan seperti yang ditentukan di `parallelism` bidang berdasarkan nama file uji. Penugasan file uji ke pecahan ditentukan oleh strategi sharding.

```
codebuild-tests-run \
    --files-search "codebuild-glob-search '**/__tests__/*.js'" \
    --test-command 'npx jest --runInBand --coverage' \
    --sharding-strategy 'equal-distribution'
```

Tabel berikut menjelaskan bidang untuk perintah `codebuild-tests-run` CLI.


| Nama bidang | Jenis | Diperlukan atau opsional | Definisi | 
| --- | --- | --- | --- | 
|  `test-command`  |  String  |  Diperlukan  |  Perintah ini digunakan untuk menjalankan tes.  | 
|  `files-search`  |  String  |  Diperlukan  |  Perintah ini memberikan daftar file uji. Anda dapat menggunakan perintah [codebuild-glob-search](parallel-test-glob-search.md)CLI yang AWS CodeBuild disediakan atau alat pencarian file lain pilihan Anda.  Pastikan bahwa `files-search` perintah mengeluarkan nama file, masing-masing dipisahkan oleh baris baru.   | 
|  `sharding-strategy`  |  Enum  |  Opsional  |  Nilai yang valid: `equal-distribution` (default), `stability` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/codebuild/latest/userguide/parallel-test-tests-run.html) Untuk informasi selengkapnya, lihat [Tentang test splitting](parallel-test-splitting.md).  | 

`codebuild-tests-run`CLI bekerja terlebih dahulu untuk mengidentifikasi daftar file uji menggunakan perintah yang disediakan dalam parameter. `files-search` Kemudian menentukan subset file uji yang ditunjuk untuk pecahan saat ini (lingkungan) menggunakan strategi sharding yang ditentukan. Akhirnya, subset file uji ini diformat ke dalam daftar yang dipisahkan spasi dan ditambahkan ke akhir perintah yang disediakan dalam parameter sebelum dieksekusi. `test-command`

Untuk kerangka kerja pengujian yang tidak menerima daftar yang dipisahkan spasi, `codebuild-tests-run` CLI menyediakan alternatif yang fleksibel melalui variabel lingkungan. `CODEBUILD_CURRENT_SHARD_FILES` Variabel ini berisi daftar jalur file pengujian yang dipisahkan baris baru yang ditunjuk untuk pecahan build saat ini. Dengan memanfaatkan variabel lingkungan ini, Anda dapat dengan mudah beradaptasi dengan berbagai persyaratan kerangka pengujian, mengakomodasi yang mengharapkan format input berbeda dari daftar yang dipisahkan ruang. Selain itu, Anda juga dapat memformat nama file pengujian sesuai kebutuhan kerangka pengujian. Berikut ini adalah contoh dari penggunaan `CODEBUILD_CURRENT_SHARD_FILES` pada Linux dengan kerangka Django. Di sini `CODEBUILD_CURRENT_SHARD_FILES` digunakan untuk mendapatkan jalur berkas *notasi titik* didukung oleh Django:

```
codebuild-tests-run \
    —files-search "codebuild-glob-search '/tests/test_.py'" \
    —test-command 'python3 manage.py test $(echo "$CODEBUILD_CURRENT_SHARD_FILES" | sed -E "s/\//__/g; s/\.py$//; s/__/./g")' \
    —sharding-strategy 'equal-distribution'
```

**catatan**  
Perhatikan bahwa variabel `CODEBUILD_CURRENT_SHARD_FILES` lingkungan hanya dapat digunakan di dalam lingkup `codebuild-tests-run` CLI.  
Juga, jika Anda menggunakan `CODEBUILD_CURRENT_SHARD_FILES` di dalam test-command, masukkan `CODEBUILD_CURRENT_SHARD_FILES` tanda kutip ganda seperti yang ditunjukkan pada contoh di atas.

# Gunakan perintah `codebuild-glob-search` CLI
<a name="parallel-test-glob-search"></a>

AWS CodeBuild menyediakan alat CLI bawaan `codebuild-glob-search` yang disebut yang memungkinkan Anda mencari file di direktori kerja Anda berdasarkan satu atau lebih pola glob. Alat ini dapat sangat berguna ketika Anda ingin menjalankan tes pada file atau direktori tertentu dalam proyek Anda.

## Penggunaan
<a name="parallel-test-glob-search.usage"></a>

`codebuild-glob-search`CLI memiliki sintaks penggunaan berikut:

```
codebuild-glob-search <glob_pattern1> [<glob_pattern2> ...]
```
+ `<glob_pattern1>`,`<glob_pattern2>`, dll.: Satu atau lebih pola glob untuk dicocokkan dengan file di direktori kerja Anda.
+ `*`: Cocokkan urutan karakter apa pun (tidak termasuk pemisah jalur).
+ `**`: Cocokkan urutan karakter apa pun (termasuk pemisah jalur).

**catatan**  
Pastikan bahwa string glob memiliki tanda kutip. Untuk memeriksa hasil pencocokan pola, gunakan perintah. `echo`  

```
version: 0.2

phases:
  build:
    commands:
      - echo $(codebuild-glob-search '**/__tests__/*.js')
      - codebuild-glob-search '**/__tests__/*.js' | xargs -n 1 echo
```

## Output
<a name="parallel-test-glob-search.output"></a>

CLI akan menampilkan daftar jalur file yang dipisahkan baris baru yang cocok dengan pola glob yang disediakan. Jalur file yang dikembalikan akan relatif terhadap direktori kerja.

Jika tidak ada file yang ditemukan cocok dengan pola yang disediakan, CLI akan menampilkan pesan yang menunjukkan bahwa tidak ada file yang ditemukan.

Perhatikan bahwa direktori yang ditemukan karena pola yang diberikan akan dikecualikan dari hasil pencarian.

## Contoh
<a name="parallel-test-glob-search.example"></a>

Jika Anda hanya ingin mencari file di dalam direktori tes dan subdirektorinya dengan `.js` ekstensi, Anda dapat menggunakan perintah berikut dengan CLI`codebuild-glob-search`:

```
codebuild-glob-search '**/__tests__/*.js'
```

Perintah ini akan mencari semua file dengan `.js` ekstensi di dalam `__tests__` direktori dan subdirektorinya, seperti yang dilambangkan dengan pola.

# Tentang test splitting
<a name="parallel-test-splitting"></a>

AWS CodeBuild Fitur pemisahan pengujian memungkinkan Anda memparalelkan eksekusi rangkaian pengujian Anda di beberapa instance komputasi, mengurangi waktu uji coba secara keseluruhan. Fitur ini diaktifkan melalui konfigurasi batch di pengaturan CodeBuild proyek Anda dan `codebuild-tests-run` utilitas dalam file buildspec Anda.

Tes dibagi berdasarkan strategi sharding yang ditentukan. CodeBuild menyediakan dua strategi sharding seperti yang ditentukan di bawah ini:

Distribusi yang sama  
Strategi `equal-distribution` sharding membagi tes di seluruh build paralel berdasarkan urutan abjad dari nama file uji. Pendekatan ini pertama-tama mengurutkan file pengujian dan kemudian menggunakan metode berbasis potongan untuk mendistribusikannya, memastikan bahwa file serupa dikelompokkan bersama untuk pengujian. Disarankan ketika berhadapan dengan satu set file uji yang relatif kecil. Meskipun metode ini bertujuan untuk mengalokasikan jumlah file yang kira-kira sama untuk setiap pecahan, dengan perbedaan maksimum satu, itu tidak menjamin stabilitas. Ketika file pengujian ditambahkan atau dihapus dalam build berikutnya, distribusi file yang ada dapat berubah, berpotensi menyebabkan penugasan kembali di seluruh pecahan.

Stabilitas  
Strategi `stability` sharding menggunakan algoritma hashing yang konsisten untuk membagi tes di antara pecahan, memastikan bahwa distribusi file tetap stabil. Ketika file baru ditambahkan atau dihapus, pendekatan ini memastikan bahwa file-to-shard tugas yang ada sebagian besar tetap tidak berubah. Untuk rangkaian pengujian besar, disarankan untuk menggunakan opsi stabilitas untuk mendistribusikan pengujian secara merata di seluruh pecahan. Mekanisme ini bertujuan untuk memberikan distribusi yang hampir sama, memastikan bahwa setiap pecahan menerima jumlah file yang sama, dengan hanya varians minimal. Meskipun strategi stabilitas tidak menjamin distribusi setara yang ideal, ia menawarkan distribusi yang hampir sama yang menjaga konsistensi dalam penugasan file di seluruh build, bahkan saat file ditambahkan atau dihapus.

Untuk mengaktifkan pemisahan pengujian, Anda perlu mengonfigurasi bagian batch di pengaturan CodeBuild proyek Anda, menentukan `parallelism` level yang diinginkan dan parameter relevan lainnya. Selain itu, Anda harus menyertakan `codebuild-tests-run` utilitas dalam file buildspec Anda, bersama dengan perintah pengujian dan metode pemisahan yang sesuai.

# Secara otomatis menggabungkan laporan build individual
<a name="parallel-test-auto-merge"></a>

Dalam pembuatan batch fanout, AWS CodeBuild mendukung penggabungan otomatis laporan build individual ke dalam laporan tingkat batch terkonsolidasi. Fitur ini memberikan tampilan komprehensif tentang hasil pengujian dan cakupan kode di semua build dalam satu batch.

## Cara kerjanya
<a name="parallel-test-auto-merge.how"></a>

Saat menjalankan build `fanout` batch, setiap build individu menghasilkan laporan [pengujian](test-reporting.md). CodeBuild kemudian secara otomatis mengkonsolidasikan laporan identik dari build yang berbeda ke dalam laporan terpadu, yang dilampirkan ke build batch. Laporan konsolidasi ini mudah diakses melalui `reportArns` bidang [ BatchGetBuildBatches](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_BatchGetBuildBatches.html#CodeBuild-BatchGetBuildBatches-response-buildBatches)API, dan juga dapat dilihat di tab **Laporan** konsol. Kemampuan penggabungan ini meluas ke laporan yang ditemukan secara otomatis juga.

Laporan konsolidasi dibuat di bawah [grup laporan](test-report-group.md) yang ditentukan dalam buildspec atau ditemukan secara otomatis oleh. CodeBuild Anda dapat menganalisis tren laporan gabungan secara langsung di bawah grup laporan ini, memberikan wawasan berharga tentang kinerja build secara keseluruhan dan metrik kualitas di seluruh build historis dari proyek build-batch yang sama.

Untuk setiap build individu dalam batch, CodeBuild secara otomatis membuat grup laporan terpisah. Ini mengikuti konvensi penamaan tertentu, menggabungkan nama grup laporan pembuatan batch dengan akhiran`BuildFanoutShard<shard_number>`, di mana `shard_number` mewakili jumlah pecahan di mana grup laporan dibuat. Organisasi ini memungkinkan Anda untuk melacak dan menganalisis tren di tingkat build konsolidasi dan individu, memberikan fleksibilitas dalam cara Anda memantau dan mengevaluasi proses build mereka.

Laporan batch-build mengikuti struktur yang sama dengan laporan [build individual](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_Report.html). Bidang kunci berikut di tab **Laporan** khusus untuk laporan pembuatan batch:

**Status laporan pembuatan Batch**  
Status laporan pembuatan batch mengikuti aturan tertentu tergantung pada jenis laporan:  
+ Laporan pengujian:
  + Berhasil: Status diatur untuk berhasil ketika semua laporan build individu telah berhasil.
  + Gagal: Status disetel ke gagal jika ada laporan build individu yang gagal.
  + Tidak lengkap: Status ditandai sebagai tidak lengkap jika ada laporan build individu yang hilang atau memiliki status tidak lengkap.
+ Laporan cakupan kode:
  + Selesai: Status diatur untuk selesai ketika semua laporan build individual selesai.
  + Gagal: Status disetel ke gagal jika ada laporan build individu yang gagal.
  + Tidak lengkap: Status ditandai sebagai tidak lengkap jika ada laporan build individu yang hilang atau memiliki status tidak lengkap.

**Ringkasan tes**  
Laporan pengujian gabungan menggabungkan bidang berikut dari semua laporan build individual:  
+ duration-in-nano-seconds: Waktu durasi pengujian maksimum dalam nanodetik di antara semua laporan build individual.
+ total: Jumlah gabungan dari semua kasus uji, menjumlahkan jumlah total pengujian dari setiap build.
+ status-counts: Menyediakan tampilan konsolidasi status pengujian seperti lulus, gagal, atau dilewati, dihitung dengan menggabungkan jumlah setiap jenis status di semua build individu.

**Ringkasan cakupan kode**  
Laporan cakupan kode gabungan menggabungkan bidang dari semua build individual menggunakan perhitungan berikut:  
+ tertutup cabang: Jumlah semua cabang yang tercakup dari laporan individu.
+ cabang-terlewatkan: Jumlah semua cabang yang terlewat dari laporan individu.
+ branch-coverage-percentage: `(Total covered branches / Total branches) * 100`
+ lines-covered: Jumlah semua baris yang tercakup dari laporan individual.
+ lines-miss: Jumlah semua baris yang terlewat dari laporan individual.
+ lines-coverage-percentage: `(Total covered lines / Total lines) * 100`

**ID Eksekusi**  
Batch membangun ARN.

**Kasus uji**  
Laporan gabungan berisi daftar konsolidasi semua kasus pengujian dari build individual, yang dapat diakses melalui [DescribeTestCases](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_DescribeTestCases.html)API dan laporan pembuatan batch di konsol.

**Cakupan kode**  
Laporan cakupan kode gabungan menyediakan informasi cakupan baris dan cabang terkonsolidasi untuk setiap file di semua build individual, dapat diakses melalui [DescribeCodeCoverages](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_DescribeCodeCoverages.html)API dan laporan pembuatan batch di konsol. Catatan: Untuk file yang dicakup oleh beberapa file pengujian yang didistribusikan di seluruh pecahan yang berbeda, laporan gabungan menggunakan kriteria pemilihan berikut:  

1. Pemilihan primer didasarkan pada cakupan garis tertinggi di antara pecahan.

1. Jika cakupan garis sama di beberapa pecahan, pecahan dengan cakupan cabang tertinggi dipilih.

# Eksekusi uji paralel untuk berbagai sampel kerangka pengujian
<a name="sample-parallel-test"></a>

Anda dapat menggunakan perintah `codebuild-tests-run` CLI untuk membagi dan menjalankan pengujian Anda di seluruh lingkungan eksekusi paralel. Bagian berikut menyediakan `buildspec.yml` sampel untuk berbagai kerangka kerja, menggambarkan penggunaan perintah. `codebuild-tests-run`
+ Setiap contoh di bawah ini mencakup `parallelism` level lima, yang berarti bahwa lima lingkungan eksekusi yang identik akan dibuat untuk membagi pengujian Anda. Anda dapat memilih `parallelism` level yang sesuai dengan proyek Anda dengan memodifikasi `parallelism` nilai di `build-fanout` bagian tersebut.
+ Setiap contoh di bawah ini menunjukkan konfigurasi pengujian Anda untuk dibagi dengan nama file pengujian, yang secara default. Ini mendistribusikan tes secara merata di seluruh lingkungan eksekusi paralel.

Sebelum Anda memulai, lihat [Jalankan tes paralel dalam build batch](parallel-test.md) untuk informasi lebih lanjut.

Untuk daftar lengkap opsi saat menggunakan perintah `codebuild-tests-run` CLI, lihat. [Gunakan perintah `codebuild-tests-run` CLI](parallel-test-tests-run.md)

**Topics**
+ [Konfigurasikan tes paralel dengan Django](sample-parallel-test-django.md)
+ [Konfigurasikan tes paralel dengan Elixir](sample-parallel-test-elixir.md)
+ [Konfigurasikan tes paralel dengan Go](sample-parallel-test-go.md)
+ [Konfigurasikan tes paralel dengan Java (Maven)](sample-parallel-test-java-maven.md)
+ [Konfigurasikan tes paralel dengan Javascript (Jest)](sample-parallel-test-javascript.md)
+ [Konfigurasikan tes paralel dengan Kotlin](sample-parallel-test-kotlin.md)
+ [Konfigurasikan tes paralel dengan PHPUnit](sample-parallel-test-phpunit.md)
+ [Konfigurasikan tes paralel dengan Pytest](sample-parallel-test-python.md)
+ [Konfigurasikan tes paralel dengan Ruby (Mentimun)](sample-parallel-test-ruby-cucumber.md)
+ [Konfigurasikan tes paralel dengan Ruby () RSpec](sample-parallel-test-ruby.md)

# Konfigurasikan tes paralel dengan Django
<a name="sample-parallel-test-django"></a>

Berikut ini adalah contoh dari sebuah `buildspec.yml` yang menunjukkan eksekusi uji paralel dengan Django pada platform Ubuntu:

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

Contoh di atas menunjukkan penggunaan variabel lingkungan`CODEBUILD_CURRENT_SHARD_FILES`. Di sini `CODEBUILD_CURRENT_SHARD_FILES` digunakan untuk mengambil jalur berkas notasi titik didukung oleh Django. Gunakan tanda kutip ganda `CODEBUILD_CURRENT_SHARD_FILES` di dalam seperti yang ditunjukkan di atas.

# Konfigurasikan tes paralel dengan Elixir
<a name="sample-parallel-test-elixir"></a>

Berikut ini adalah contoh dari sebuah `buildspec.yml` yang menunjukkan eksekusi uji paralel dengan Elixir pada platform Ubuntu:

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

# Konfigurasikan tes paralel dengan Go
<a name="sample-parallel-test-go"></a>

Berikut ini adalah contoh dari `buildspec.yml` yang menunjukkan eksekusi uji paralel dengan Go pada platform Linux:

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

Dalam contoh di atas, `calculator.go` fungsi berisi fungsi matematika sederhana untuk menguji dan semua file uji dan `calculator.go` file ada di dalam `calc` folder.

# Konfigurasikan tes paralel dengan Java (Maven)
<a name="sample-parallel-test-java-maven"></a>

Berikut ini adalah contoh dari `buildspec.yml` yang menunjukkan eksekusi uji paralel dengan Java pada platform Linux:

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

Dalam contoh yang diberikan, variabel lingkungan `CODEBUILD_CURRENT_SHARD_FILES` berisi file uji dalam pecahan saat ini, dipisahkan oleh baris baru. File-file ini diubah menjadi daftar nama kelas yang dipisahkan koma dalam format yang diterima oleh `-Dtest` parameter untuk Maven.

# Konfigurasikan tes paralel dengan Javascript (Jest)
<a name="sample-parallel-test-javascript"></a>

Berikut ini adalah contoh dari `buildspec.yml` yang menunjukkan eksekusi uji paralel dengan Javascript pada platform Ubuntu:

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

# Konfigurasikan tes paralel dengan Kotlin
<a name="sample-parallel-test-kotlin"></a>

Berikut ini adalah contoh dari sebuah `buildspec.yml` yang menunjukkan eksekusi uji paralel dengan Kotlin pada platform Linux:

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

Dalam contoh di atas, `codebuild-tests-run` CLI digunakan dua kali. Selama proses pertama, kotlinc mengkompilasi file. `CODEBUILD_CURRENT_SHARD_FILES`Variabel mengambil file uji yang ditugaskan ke pecahan saat ini, yang kemudian diubah menjadi daftar yang dipisahkan spasi. Pada putaran kedua, JUnit jalankan tes. Sekali lagi, `CODEBUILD_CURRENT_SHARD_FILES` mengambil file uji yang ditugaskan ke pecahan saat ini, tetapi kali ini mereka diubah menjadi nama kelas.

# Konfigurasikan tes paralel dengan PHPUnit
<a name="sample-parallel-test-phpunit"></a>

Berikut ini adalah contoh dari `buildspec.yml` yang menunjukkan eksekusi uji paralel dengan PHPUnit pada platform Linux:

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

# Konfigurasikan tes paralel dengan Pytest
<a name="sample-parallel-test-python"></a>

Berikut ini adalah contoh dari `buildspec.yml` yang menunjukkan eksekusi uji paralel dengan Pytest pada platform Ubuntu:

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

Berikut ini adalah contoh dari `buildspec.yml` yang menunjukkan eksekusi uji paralel dengan Pytest pada platform Windows:

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

Dalam contoh di atas, variabel `CODEBUILD_CURRENT_SHARD_FILES` lingkungan digunakan untuk mengambil file uji yang ditugaskan ke pecahan saat ini dan diteruskan sebagai array ke perintah pytest.

# Konfigurasikan tes paralel dengan Ruby (Mentimun)
<a name="sample-parallel-test-ruby-cucumber"></a>

Berikut ini adalah contoh dari `buildspec.yml` yang menunjukkan eksekusi uji paralel dengan Cucumber pada platform Linux:

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

# Konfigurasikan tes paralel dengan Ruby () RSpec
<a name="sample-parallel-test-ruby"></a>

Berikut ini adalah contoh dari `buildspec.yml` yang menunjukkan eksekusi uji paralel dengan RSpec pada platform Ubuntu:

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