Visual Studio Test görevini kullanarak testleri paralel ç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 derlemede çalışan iyi bir test paketine sahip olmanız önemlidir. Ancak kod tabanı büyüdükçe regresyon test paketi de büyümeye eğilimlidir ve tam regresyon testinin çalıştırılması uzun sürebilir. Bazen testlerin kendisi uzun süre çalışıyor olabilir. Uçtan uca testler yazarsanız bu durum genellikle böyle olur. İş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, birden çok aracı kullanarak testleri paralel olarak çalıştırmak için Visual Studio Test görevini nasıl yapılandırabileceğiniz açıklanır.
Önkoşul
Aracılar ve iş kavramları hakkında bilgi sahibi olun. 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.
Dilimleme testi
Visual Studio Test görevi (sürüm 2), paralel iş ayarlarıyla sorunsuz çalışacak şekilde tasarlanmıştır. Visual Studio Test görevini içeren bir işlem hattı işi (basitlik için "VSTest görevi" olarak adlandırılır) birden çok aracı üzerinde paralel olarak çalışacak şekilde yapılandırıldığında, birden çok aracının dahil olduğunu otomatik olarak algılar ve bu aracılar arasında paralel olarak çalıştırılabilir test dilimleri oluşturur.
Görev, test ve aracı sayısına, önceki test çalışma sürelerine veya derlemelerdeki testlerin konumuna göre toplu işlem gibi farklı gereksinimlere uyacak şekilde test dilimleri oluşturacak şekilde yapılandırılabilir.
Bu seçenekler aşağıdaki bölümlerde açıklanmıştır.
Test ve aracı sayısına göre basit dilimleme
Bu ayar, 'T' testlerinin sayısını 'N' aracıları arasında bölmek için basit bir dilimleme algoritması kullanır ve böylece her aracı T/N testleri çalıştırır. Örneğin, test paketiniz 1000 test içeriyorsa ve paralel işler için iki aracı kullanırsanız, her aracı 500 test çalıştırır. Ya da sekiz aracı kullanarak testleri çalıştırmak için geçen süreyi daha da azaltabilirsiniz; bu durumda her aracı paralel olarak 125 test çalıştırır.
Bu seçenek genellikle tüm testlerin benzer çalışma süreleri olduğunda kullanılır. Test çalıştırma süreleri benzer değilse, aracılar etkili bir şekilde kullanılamayabilir çünkü bazı aracılar birkaç uzun süre çalışan test içeren dilimler alabilirken, diğer aracılar kısa süreli testlerle dilimler alabilir ve aracıların geri kalanından çok daha erken tamamlanabilir.
Testlerin geçmiş çalışma süresine göre dilimleme
Bu ayar, her dilimin yaklaşık olarak aynı çalışma süresine sahip olması için test dilimleri oluşturmak için geçmiş çalışma sürelerini dikkate alır. Kısa süreli testler birlikte toplu olarak çalıştırılırken, uzun süre çalışan testler ayrı dilimlere ayrılır.
Bu seçenek, bir derlemedeki testlerin bağımlılıkları olmadığında ve aynı aracıda çalıştırılması gerekmediğinde kullanılmalıdır. Bu seçenek, aracıların en verimli şekilde kullanılmasına neden olur çünkü her aracı aynı miktarda 'iş' alır ve hepsi yaklaşık olarak aynı zamanda biter.
Test derlemelerine göre dilimleme
Bu ayar, 'A' test derlemelerinin (veya dosyalarının) sayısını 'N' aracılarına bölen basit bir dilimleme algoritması kullanır, böylece her aracı A/N derlemelerinden testleri çalıştırır. Bu seçenek kullanılırken derleme içindeki test sayısı dikkate alınmaz. Örneğin, test paketiniz on test derlemesi içeriyorsa ve paralel işler için iki aracı kullanırsanız, her aracı çalıştırılacak beş test derlemesi alır. Beş aracı kullanarak testleri çalıştırmak için geçen süreyi daha da azaltabilirsiniz. Bu durumda her aracı çalıştırılacak iki test derlemesi alır.
Bu seçenek, bir derlemedeki testlerin bağımlılıkları olduğunda veya test kodunuzdaki durumu yönetmek için ve AssemblyCleanup
veya ClassInitialize
ClassCleanup
yöntemlerini kullandığında AssemblyInitialize
kullanılmalıdır.
Klasik derleme işlem hatlarında testleri paralel olarak çalıştırma
Klasik derleme işlem hattınızda çalıştırılacak büyük bir test paketiniz veya uzun süre çalışan tümleştirme testleriniz varsa aşağıdaki adımları kullanın.
Not
Derleme işlem hatlarında çoklu aracı özelliğini şirket içi TFS sunucusuyla kullanmak için TFS 2018 Güncelleştirme 2 veya sonraki bir sürümü kullanmanız gerekir.
Tek bir aracı kullanarak iş oluşturun. Aşağıdaki görüntüde gösterilen görevleri kullanarak Visual Studio projeleri oluşturun ve derleme yapıtları yayımlayın. Bu, varsayılan iş ayarlarını kullanır (tek aracı, paralel iş yok).
Testleri birden çok aracı kullanarak paralel olarak çalıştırın:
Aracı işi ekleme
İşi birden çok aracıyı paralel olarak kullanacak şekilde yapılandırın. Buradaki örnekte üç aracı kullanılır.
İpucu
Yüksek düzeyde paralel test için en fazla 99 aracı belirtebilirsiniz.
İşe Derleme Yapıtlarını İndir görevi ekleyin. Bu adım, derleme işi ile test işi arasındaki bağlantıdır ve derleme işinde oluşturulan ikili dosyaların test işi tarafından testleri çalıştırmak için kullanılan aracılarda kullanılabilir olduğundan emin olmak için gereklidir. Görevin 'Geçerli derleme' tarafından üretilen yapıtları indirecek şekilde ayarlandığından ve yapıt adının derleme işinde Derleme Yapıtlarını Yayımla görevinde kullanılan yapıt adıyla aynı olduğundan emin olun.
Visual Studio Test görevini ekleyin ve gerekli dilimleme stratejisini kullanacak şekilde yapılandırın.
YAML işlem hatlarında paralel test için işleri ayarlama
içindeki job
stratejisini parallel
belirtin ve kaç işin gönderilmesi gerektiğini belirtin. Büyük test paketlerinin ölçeğini genişletmek için en fazla 99 aracı belirtebilirsiniz.
jobs:
- job: ParallelTesting
strategy:
parallel: 2
Daha fazla bilgi için bkz . YAML şeması - İş.
Klasik yayın işlem hatlarında testleri paralel olarak çalıştırma
Uygulamanızı dağıtdıktan sonra çalıştırılacak büyük bir test paketiniz veya uzun süre çalışan işlevsel testleriniz varsa aşağıdaki adımları kullanın. Örneğin, uygulama işlevselliğini doğrulamak için bir web uygulaması dağıtmak ve tarayıcıda Selenium testleri çalıştırmak isteyebilirsiniz.
Not
Çoklu aracı özelliğini şirket içi TFS sunucusuyla yayın işlem hatlarında kullanmak için TFS 2017 Güncelleştirme 1 veya sonraki bir sürümü kullanmanız gerekir.
Uygulamayı tek bir aracı kullanarak dağıtın. Bir web uygulamasını Azure Uygulaması hizmetlere dağıtmak için Azure Dağıtımı: Kaynak Grubu Oluşturma veya Güncelleştirme veya Azure Uygulaması Hizmet Dağıtımı görevini kullanın. Bu, varsayılan iş ayarlarını kullanır (tek aracı, paralel iş yok).
Testleri birden çok aracı kullanarak paralel olarak çalıştırın:
Aracı işi ekleme
İşi birden çok aracıyı paralel olarak kullanacak şekilde yapılandırın. Buradaki örnekte üç aracı kullanılır.
İpucu
Yüksek düzeyde paralel test için en fazla 99 aracı belirtebilirsiniz.
Visual Studio test görevi çalıştırilmeden önce çalışması gereken ek görevleri ekleyin. Örneğin, testlerinizin gerektirdiği tüm verileri ayarlamak için bir PowerShell betiği çalıştırın.
İpucu
Yayın işlem hatlarındaki işler, yayın işlem hattına bağlı tüm yapıtları varsayılan olarak indirir. Zaman kazanmak için, işi yalnızca işin gerektirdiği test yapıtlarını indirecek şekilde yapılandırabilirsiniz. Örneğin, web uygulaması ikili dosyalarının Selenium testlerini çalıştırması gerekmez ve uygulama ve test yapıtları derleme işlem hattınız tarafından ayrı olarak yayımlanırsa bunlar atlanabilir.
Visual Studio Test görevini ekleyin ve gerekli dilimleme stratejisini kullanacak şekilde yapılandırın.
İpucu
Test makinelerinde Visual Studio yüklü değilse, test platformunun gerekli sürümünü almak için Visual Studio Test Platformu Yükleyicisi görevini kullanabilirsiniz.
Paralel işlem hattı işlerini paralel test yürütme ile birleştirerek yüksek düzeyde paralel test
İşlem hattında paralel işler kullanıldığında, her işi paralel olarak çalıştırmak için birden çok makine (aracı) kullanır. Test çerçeveleri ve çalıştırıcılar, genellikle paralel olarak çalıştırılan birden çok işlem veya iş parçacığı oluşturarak testleri tek bir makinede paralel olarak çalıştırma özelliği de sağlar. Paralellik özellikleri, yüksek düzeyde paralel testlere ulaşmak için katmanlı bir şekilde birleştirilebilir. Visual Studio Test görevi bağlamında paralellik aşağıdaki yollarla birleştirilebilir:
Test çerçeveleri tarafından sunulan paralellik. MSTest v2, NUnit, xUnit ve diğerleri gibi tüm modern test çerçeveleri testleri paralel olarak çalıştırma olanağı sağlar. Genellikle, bir derlemedeki testler paralel olarak çalıştırılır. Bu test çerçeveleri, karşılık gelen bağdaştırıcıyla birlikte bir test bağdaştırıcısı ve test çerçevesi kullanan Visual Studio Test platformu ile arabirim oluşturur ve testler çalıştırıldığında Visual Studio Test Platformu tarafından oluşturulan bir test ana bilgisayar işlemi içinde çalışır. Bu nedenle, bu katmandaki paralelleştirme tüm çerçeveler ve bağdaştırıcılar için bir işlem içindedir.
Visual Studio Test Platformu (vstest.console.exe) tarafından sunulan paralellik. Visual Studio Test Platformu, test derlemelerini paralel olarak çalıştırabilir. vstest.console.exe kullanıcıları bunu /parallel anahtarı olarak tanır. Bunu yapmak için kullanılabilir her çekirdekte bir test konağı işlemi başlatır ve yürütülecek bir derlemede test eder. Paralelleştirme birimi bir test derlemesi veya test dosyası olduğundan bu, Visual Studio test platformu için bir test bağdaştırıcısı olan tüm çerçevelerde çalışır. Bu, test çerçeveleri tarafından sunulan paralellik (yukarıda açıklanmıştır) ile birleştirildiğinde, testler işlem hattındaki tek bir aracıda çalıştırıldığında en yüksek paralelleştirme derecesini sağlar.
Visual Studio Test (VSTest) görevi tarafından sunulan paralellik. VSTest görevi, testleri birden çok aracı (veya makine) arasında paralel olarak çalıştırmayı destekler. Test dilimleri oluşturulur ve her aracı bir kerede bir dilim yürütür. Üç farklı dilimleme stratejisi, test platformu ve test çerçevesi tarafından sunulan paralellikle birleştirildiğinde (yukarıda açıklandığı gibi) aşağıdaki sonuçlara neden olur:
Test ve aracı sayısına göre dilimleme. Testlerin eşit boyutlu dilimlerde gruplandırıldığı basit dilimleme. Dilim, bir veya daha fazla derlemeden testler içerir. Aracıda test yürütmesi daha sonra yukarıdaki 1 ve 2'de açıklanan paralellik ile uyumlu olur.
Geçmiş çalışma süresine göre dilimleme. Testleri çalıştırmak için önceki zamanlamalara ve kullanılabilir aracı sayısına bağlı olarak, testler dilimler halinde gruplandırılır ve her dilim için yaklaşık eşit yürütme süresi gerekir. Dilim, bir veya daha fazla derlemeden testler içerir. Aracıda test yürütmesi daha sonra yukarıdaki 1 ve 2'de açıklanan paralellik ile uyumlu olur.
Derlemelere göre dilimleme. Dilim bir test derlemesidir ve bu nedenle tümünün aynı derlemeye ait testleri içerir. Aracı üzerinde yürütme daha sonra yukarıdaki 1 ve 2'de açıklanan paralellik ile uyumlu olur. Ancak, bir aracı çalıştırılacak tek bir derleme alırsa 2 gerçekleşmeyebilir.
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