Uruchamianie testów równolegle dla dowolnego modułu uruchamiającego testy
Azure DevOps Services | Azure DevOps Server 2022 r. — Azure DevOps Server 2019 r.
Uruchamianie testów w celu zweryfikowania zmian w kodzie jest kluczem do utrzymania jakości. Aby ciągła integracja zakończyła się pomyślnie, niezbędne jest posiadanie dobrego zestawu testów uruchamianego przy każdej kompilacji. Jednak wraz ze wzrostem bazy kodu zestaw testów regresji również rośnie, a uruchamianie pełnego testu regresji może zająć dużo czasu. Czasami testy same w sobie mogą być długotrwałe — zwykle jest to przypadek, jeśli piszesz testy kompleksowe. Zmniejsza to szybkość dostarczania wartości klienta, ponieważ potoki nie mogą przetwarzać kompilacji wystarczająco szybko.
Równoległe uruchamianie testów to doskonały sposób na zwiększenie wydajności potoków ciągłej integracji/ciągłego wdrażania. Można to łatwo zrobić, stosując dodatkową pojemność oferowaną przez chmurę. W tym artykule omówiono sposób równoległego przetwarzania zadań przy użyciu wielu agentów.
Wymagania wstępne
Zapoznaj się z pojęciami dotyczącymi agentów i zadań. Każdy agent może uruchamiać tylko jedno zadanie naraz. Aby uruchomić wiele zadań równolegle, należy skonfigurować wielu agentów. Potrzebne są również wystarczające zadania równoległe.
Konfigurowanie zadań równoległych
Określ strategię "równoległą" w języku YAML i określ liczbę zadań, które mają zostać wysłane.
Zmienne System.JobPositionInPhase
i System.TotalJobsInPhase
są dodawane do każdego zadania.
jobs:
- job: ParallelTesting
strategy:
parallel: 2
Porada
Można określić maksymalnie 99 agentów, aby skalować testy w górę dla dużych zestawów testów.
Fragmentowanie zestawu testów
Aby uruchomić testy równolegle, należy najpierw wyciąć (lub podzielić) zestaw testów, aby każdy wycinek mógł być uruchamiany niezależnie. Na przykład zamiast uruchamiać duży pakiet 1000 testów na jednym agencie, można użyć dwóch agentów i uruchomić 500 testów równolegle na każdym agencie. Możesz też skrócić czas potrzebny na dalsze uruchamianie testów przy użyciu 8 agentów i równoległego uruchamiania 125 testów na każdym agencie.
Krok, który uruchamia testy w zadaniu, musi wiedzieć, który wycinek testu powinien zostać uruchomiony. Zmienne System.JobPositionInPhase
i System.TotalJobsInPhase
mogą być używane do tego celu:
-
System.TotalJobsInPhase
wskazuje całkowitą liczbę wycinków (można to traktować jako "totalSlices") -
System.JobPositionInPhase
identyfikuje konkretny wycinek (można to traktować jako "sliceNum")
Jeśli wszystkie pliki testowe są reprezentowane jako tablica jednowymiarowa, każde zadanie może uruchomić plik testowy indeksowany pod adresem [sliceNum + totalSlices], dopóki wszystkie pliki testowe nie zostaną uruchomione. Jeśli na przykład masz sześć plików testowych i dwa zadania równoległe, pierwsze zadanie (fragmentator0) uruchomi pliki testowe o numerze 0, 2 i 4, a drugie zadanie (wycinek1) uruchomi pliki testowe o numerze 1, 3 i 5.
Jeśli zamiast tego użyjesz trzech zadań równoległych, pierwsze zadanie (wycinek0) uruchomi pliki testowe o numerze 0 i 3, drugie zadanie (wycinek1) uruchomi pliki testowe o numerze 1 i 4, a trzecie zadanie (wycinek2) uruchomi pliki testowe o numerze 2 i 5.
Przykładowy kod
Ten przykład platformy .NET Core używa --list-tests
parametrów dotnet test
i --filter
do fragmentowania testów.
Testy są uruchamiane przy użyciu narzędzia NUnit. Wyniki testów utworzone przez DotNetCoreCLI@2
zadanie testowe są następnie publikowane na serwerze.
Zaimportuj (do Azure Repos lub Azure DevOps Server) lub rozwidlenie (do usługi GitHub) w tym repozytorium:
https://github.com/idubnori/ParallelTestingSample-dotnet-core
Ten przykładowy język Python używa skryptu programu PowerShell do fragmentowania testów. Testy są uruchamiane przy użyciu narzędzia pytest. Wyniki testów w stylu JUnit utworzone przez narzędzie pytest są następnie publikowane na serwerze. Zaimportuj (do Azure Repos lub Azure DevOps Server) lub rozwidlenie (do usługi GitHub) w tym repozytorium:
https://github.com/PBoraMSFT/ParallelTestingSample-Python
Ten przykładowy kod JavaScript używa skryptu powłoki bash do fragmentowania testów. Testy są uruchamiane przy użyciu mocha runner. Wyniki testów w stylu JUnit utworzone przez mocha są następnie publikowane na serwerze. Zaimportuj (do Azure Repos lub Azure DevOps Server) lub rozwidlenie (do usługi GitHub) w tym repozytorium:
https://github.com/PBoraMSFT/ParallelTestingSample-Mocha
Przykładowy kod zawiera plik azure-pipelines.yml
w katalogu głównym repozytorium, którego można użyć do utworzenia potoku. Postępuj zgodnie ze wszystkimi instrukcjami w temacie Tworzenie pierwszego potoku , aby utworzyć potok, i zobacz testowanie fragmentowania w akcji.
Łączenie równoległości na potrzeby masowego testowania równoległego
Gdy zadania równoległe są używane w potoku, potok używa wielu maszyn do równoległego uruchamiania każdego zadania. Większość modułów uruchamiających testy zapewnia możliwość równoległego uruchamiania testów na jednej maszynie (zazwyczaj przez utworzenie wielu procesów lub wątków, które są uruchamiane równolegle). Dwa typy równoległości można połączyć na potrzeby masowego testowania równoległego, co sprawia, że testowanie w potokach jest niezwykle wydajne.
Pomoc i obsługa techniczna
- Zobacz naszą stronę rozwiązywania problemów
- Uzyskaj porady w witrynie Stack Overflow i uzyskaj pomoc techniczną za pośrednictwem Developer Community