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.
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.
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
- Lihat halaman pemecahan masalah kami
- Dapatkan saran tentang Stack Overflow, dan dapatkan dukungan melalui Komunitas Pengembang