Bagikan melalui


Menjalankan pengujian secara paralel untuk setiap runner pengujian

Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019

Menjalankan pengujian untuk memvalidasi perubahan pada kode adalah kunci untuk menjaga kualitas. Agar praktik integrasi berkelanjutan berhasil, penting bagi Anda untuk memiliki rangkaian pengujian yang baik yang dijalankan dengan setiap build. Namun, seiring pertumbuhan basis kode, rangkaian pengujian regresi cenderung tumbuh juga dan menjalankan tes regresi penuh dapat memakan waktu lama. Terkadang, pengujian itu sendiri mungkin berjalan lama - ini biasanya terjadi jika Anda menulis tes end-to-end. Ini mengurangi kecepatan pengiriman nilai pelanggan karena alur tidak dapat memproses build dengan cukup cepat.

Menjalankan pengujian secara paralel adalah cara yang bagus untuk meningkatkan efisiensi alur CI/CD. Ini dapat dilakukan dengan mudah dengan menggunakan kapasitas tambahan yang ditawarkan oleh cloud. Artikel ini membahas bagaimana Anda dapat memparalelkan pengujian dengan menggunakan beberapa agen untuk memproses pekerjaan.

Prasyarat

Biasakan diri Anda dengan konsep agen dan pekerjaan. Setiap agen hanya dapat menjalankan satu pekerjaan pada satu waktu. Untuk menjalankan beberapa pekerjaan secara paralel, Anda harus mengonfigurasi beberapa agen. Anda juga memerlukan pekerjaan paralel yang memadai.

Menyiapkan pekerjaan paralel

Tentukan strategi 'paralel' dalam YAML dan tunjukkan berapa banyak pekerjaan yang harus dikirim. Variabel System.JobPositionInPhase dan System.TotalJobsInPhase ditambahkan ke setiap pekerjaan.

jobs:
- job: ParallelTesting
  strategy:
    parallel: 2

Tip

Anda dapat menentukan sebanyak 99 agen untuk meningkatkan pengujian untuk rangkaian pengujian besar.

Mengiris rangkaian pengujian

Untuk menjalankan pengujian secara paralel, Anda harus terlebih dahulu mengpotong (atau partisi) rangkaian pengujian sehingga setiap iringan dapat dijalankan secara independen. Misalnya, alih-alih menjalankan rangkaian besar 1000 pengujian pada satu agen, Anda dapat menggunakan dua agen dan menjalankan 500 pengujian secara paralel pada setiap agen. Atau Anda dapat mengurangi jumlah waktu yang diperlukan untuk menjalankan pengujian lebih lanjut dengan menggunakan 8 agen dan menjalankan 125 pengujian secara paralel pada setiap agen.

Langkah yang menjalankan pengujian dalam pekerjaan perlu mengetahui poong pengujian mana yang harus dijalankan. Variabel System.JobPositionInPhase dan System.TotalJobsInPhase dapat digunakan untuk tujuan ini:

  • System.TotalJobsInPhase menunjukkan jumlah total irisan (Anda dapat menganggapnya sebagai "totalSlices")
  • System.JobPositionInPhase mengidentifikasi ikhtisar tertentu (Anda dapat menganggapnya sebagai "sliceNum")

Jika Anda mewakili semua file pengujian sebagai array dimensi tunggal, setiap pekerjaan dapat menjalankan file pengujian yang diindeks di [sliceNum + totalSlices], hingga semua file pengujian dijalankan. Misalnya, jika Anda memiliki enam file pengujian dan dua pekerjaan paralel, pekerjaan pertama (slice0) akan menjalankan file pengujian bernomor 0, 2, dan 4, dan pekerjaan kedua (slice1) akan menjalankan file pengujian bernomor 1, 3, dan 5.

6 tes dalam 2 irisan

Jika Anda menggunakan tiga pekerjaan paralel sebagai gantinya, pekerjaan pertama (slice0) akan menjalankan file pengujian bernomor 0 dan 3, pekerjaan kedua (slice1) akan menjalankan file pengujian bernomor 1 dan 4, dan pekerjaan ketiga (slice2) akan menjalankan file pengujian bernomor 2 dan 5.

6 tes dalam 3 irisan

Kode sampel

Sampel .NET Core ini menggunakan --list-tests dan --filter parameter dotnet test untuk mengpoting pengujian. Pengujian dijalankan menggunakan NUnit. Hasil pengujian yang dibuat oleh DotNetCoreCLI@2 tugas pengujian kemudian diterbitkan ke server. Impor (ke Azure Repos atau Azure DevOps Server) atau fork (ke GitHub) repositori ini:

https://github.com/idubnori/ParallelTestingSample-dotnet-core

Sampel Python ini menggunakan skrip PowerShell untuk mengpotong pengujian. Pengujian dijalankan menggunakan pytest. Hasil pengujian gaya JUnit yang dibuat oleh pytest kemudian diterbitkan ke server. Impor (ke Azure Repos atau Azure DevOps Server) atau fork (ke GitHub) repositori ini:

https://github.com/PBoraMSFT/ParallelTestingSample-Python

Sampel JavaScript ini menggunakan skrip bash untuk menggoreng pengujian. Tes dijalankan menggunakan pelari mocha. Hasil pengujian gaya JUnit yang dibuat oleh mocha kemudian dipublikasikan ke server. Impor (ke Azure Repos atau Azure DevOps Server) atau fork (ke GitHub) repositori ini:

https://github.com/PBoraMSFT/ParallelTestingSample-Mocha

Kode sampel menyertakan file azure-pipelines.yml di akar repositori yang dapat Anda gunakan untuk membuat alur. Ikuti semua instruksi di Membuat alur pertama Anda untuk membuat alur dan melihat pengujian pemotongan dalam tindakan.

Menggabungkan paralelisme untuk pengujian paralel besar-besaran

Ketika pekerjaan paralel digunakan dalam alur, alur menggunakan beberapa komputer untuk menjalankan setiap pekerjaan secara paralel. Sebagian besar runner pengujian menyediakan kemampuan untuk menjalankan pengujian secara paralel pada satu komputer (biasanya dengan membuat beberapa proses atau utas yang dijalankan secara paralel). Dua jenis paralelisme dapat dikombinasikan untuk pengujian paralel besar-besaran, yang membuat pengujian dalam alur sangat efisien.

Bantuan dan dukungan