Herhangi bir test çalıştırıcısı için testleri paralel olarak çalıştırma
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Kodda yapılan değişiklikleri doğrulamak için testler çalıştırmak, kaliteyi korumanın anahtarıdır. Sürekli tümleştirme uygulamasının başarılı olması için, her derlemeyle çalışan iyi bir test paketine sahip olmanız önemlidir. Ancak kod tabanı büyüdükçe regresyon test paketi de büyüme eğilimindedir ve tam regresyon testinin çalıştırılması uzun sürebilir. Bazen testlerin kendisi uzun süre çalışıyor olabilir. Uçtan uca testler yazdığınızda bu durum genellikle böyledir. İşlem hatları derlemeleri yeterince hızlı işleyemediğinden bu, müşteri değerinin teslim edilme hızını azaltır.
Testleri paralel çalıştırmak, CI/CD işlem hatlarının verimliliğini artırmanın harika bir yoludur. Bu, bulut tarafından sunulan ek kapasiteyi kullanarak kolayca yapılabilir. Bu makalede, işleri işlemek için birden çok aracı kullanarak testleri nasıl paralelleştirebileceğiniz açıklanır.
Önkoşul
Aracılar ve işler kavramları hakkında bilgi sahibi olursunuz. Her aracı aynı anda yalnızca bir iş çalıştırabilir. Birden çok işi paralel olarak çalıştırmak için birden çok aracı yapılandırmanız gerekir. Ayrıca yeterli paralel iş gerekir.
Paralel işleri ayarlama
YAML'de 'paralel' strateji belirtin ve kaç işin gönderilmesi gerektiğini belirtin.
ve System.TotalJobsInPhase
değişkenleri System.JobPositionInPhase
her işe eklenir.
jobs:
- job: ParallelTesting
strategy:
parallel: 2
İpucu
Büyük test paketleri için testin ölçeğini genişletmek için en fazla 99 aracı belirtebilirsiniz.
Test paketini dilimleme
Testleri paralel çalıştırmak için her dilimin bağımsız olarak çalıştırılabilmesi için önce test paketini dilimlemeniz (veya bölümlemeniz) gerekir. Örneğin, tek bir aracıda büyük bir 1000 test paketi çalıştırmak yerine iki aracı kullanabilir ve her aracıda paralel olarak 500 test çalıştırabilirsiniz. Ya da 8 aracı kullanarak ve her aracıda paralel olarak 125 test çalıştırarak testleri çalıştırmak için geçen süreyi daha da azaltabilirsiniz.
Bir işte testleri çalıştıran adımın hangi test diliminin çalıştırılması gerektiğini bilmesi gerekir. ve System.TotalJobsInPhase
değişkenleri System.JobPositionInPhase
bu amaçla kullanılabilir:
-
System.TotalJobsInPhase
dilimlerin toplam sayısını gösterir (bunu "totalSlices" olarak düşünebilirsiniz) -
System.JobPositionInPhase
belirli bir dilimi tanımlar (bunu "sliceNum" olarak düşünebilirsiniz)
Tüm test dosyalarını tek boyutlu bir dizi olarak temsil ediyorsanız, tüm test dosyaları çalıştırılana kadar her iş [sliceNum + totalSlices] konumunda dizinlenmiş bir test dosyası çalıştırabilir. Örneğin, altı test dosyanız ve iki paralel işiniz varsa, ilk iş (dilim0) 0, 2 ve 4 numaralı test dosyalarını çalıştırır ve ikinci iş (dilim1) 1, 3 ve 5 numaralı test dosyalarını çalıştırır.
Bunun yerine üç paralel iş kullanırsanız, ilk iş (dilim0) 0 ve 3 numaralı test dosyalarını çalıştırır, ikinci iş (dilim1) 1 ve 4 numaralı test dosyalarını çalıştırır ve üçüncü iş (dilim2) 2 ve 5 numaralı test dosyalarını çalıştırır.
Örnek kod
Bu .NET Core örneği, testleri dilimlerken ve --filter
parametrelerini dotnet test
kullanır--list-tests
.
Testler NUnit kullanılarak çalıştırılır. Test görevi tarafından DotNetCoreCLI@2
oluşturulan test sonuçları daha sonra sunucuda yayımlanır.
Bu depoya (Azure Repos veya Azure DevOps Server) veya çatalı (GitHub'a) aktar:
https://github.com/idubnori/ParallelTestingSample-dotnet-core
Bu Python örneği, testleri dilimlerken bir PowerShell betiği kullanır. Testler pytest kullanılarak çalıştırılır. Daha sonra pytest tarafından oluşturulan JUnit stili test sonuçları sunucuda yayımlanır. Bu depoya (Azure Repos veya Azure DevOps Server) veya çatalı (GitHub'a) aktar:
https://github.com/PBoraMSFT/ParallelTestingSample-Python
Bu JavaScript örneği, testleri dilimlerken bash betiği kullanır. Testler mocha çalıştırıcısı kullanılarak çalıştırılır. Mocha tarafından oluşturulan JUnit stili test sonuçları daha sonra sunucuda yayımlanır. Bu depoya (Azure Repos veya Azure DevOps Server) veya çatalı (GitHub'a) aktar:
https://github.com/PBoraMSFT/ParallelTestingSample-Mocha
Örnek kod, deponun kökünde işlem hattı oluşturmak için kullanabileceğiniz bir dosya azure-pipelines.yml
içerir. bir işlem hattı oluşturmak ve test dilimlemenin nasıl çalıştığını görmek için İlk işlem hattınızı oluşturma başlığındaki tüm yönergeleri izleyin.
Yüksek düzeyde paralel test için paralelliği birleştirme
İşlem hattında paralel işler kullanıldığında, işlem hattı her işi paralel olarak çalıştırmak için birden çok makine kullanır. Çoğu test çalıştırıcısı, testleri tek bir makinede paralel olarak çalıştırma özelliği sağlar (genellikle paralel olarak çalıştırılan birden çok işlem veya iş parçacığı oluşturarak). İki paralellik türü, işlem hatlarında testi son derece verimli hale getiren yüksek düzeyde paralel test için birleştirilebilir.
Yardım ve destek
- Sorun giderme sayfamıza bakın
- Stack Overflow hakkında öneri alın ve Geliştirici Topluluğu aracılığıyla destek alın