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.

2 dilimde 6 test

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.

3 dilimde 6 test

Ö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