Równoległe uruchamianie testów przy użyciu zadania testowego programu Visual Studio

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

Uruchamianie testów w celu zweryfikowania zmian w kodzie jest kluczem do utrzymania jakości. Aby praktyka ciągłej integracji zakończyła się powodzeniem, niezbędne jest posiadanie dobrego zestawu testów, który jest uruchamiany przy każdej kompilacji. Jednak wraz ze wzrostem bazy kodu zestaw testów regresji również rośnie, a uruchomienie 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 kompleksowe testy. 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 konfigurowania zadania testowego programu Visual Studio w celu równoległego uruchamiania testów przy użyciu wielu agentów.

Wstępnie wymagane

Zapoznaj się z pojęciami dotyczącymi agentów i zadań. Aby uruchomić wiele zadań równolegle, należy skonfigurować wielu agentów. Potrzebne są również wystarczające zadania równoległe.

Fragmentowanie testów

Zadanie testowe programu Visual Studio (wersja 2) jest przeznaczone do bezproblemowej pracy z ustawieniami zadań równoległych. Gdy zadanie potoku zawierające zadanie testowe programu Visual Studio (nazywane "zadaniem VSTest" dla uproszczenia) jest skonfigurowane do równoległego uruchamiania na wielu agentach, automatycznie wykrywa, że wielu agentów jest zaangażowanych i tworzy wycinki testów, które mogą być uruchamiane równolegle przez tych agentów.

Zadanie można skonfigurować tak, aby tworzyć wycinki testowe zgodnie z różnymi wymaganiami, takimi jak dzielenie na partie na podstawie liczby testów i agentów, poprzednich czasów wykonywania testu lub lokalizacji testów w zestawach.

Opcje przetwarzania wsadowego

Te opcje zostały wyjaśnione w poniższych sekcjach.

Proste fragmentowanie na podstawie liczby testów i agentów

To ustawienie używa prostego algorytmu fragmentowania, aby podzielić liczbę testów "T" na agentów "N", aby każdy agent uruchamiał testy T/N. Jeśli na przykład zestaw testów zawiera 1000 testów i używasz dwóch agentów do zadań równoległych, każdy agent będzie uruchamiał 500 testów. Możesz też skrócić czas potrzebny na dalsze uruchamianie testów przy użyciu ośmiu agentów, w tym przypadku każdy agent uruchamia równolegle 125 testów.

Ta opcja jest zwykle używana, gdy wszystkie testy mają podobne czasy wykonywania. Jeśli czasy uruchamiania testu nie są podobne, agenci mogą nie być skutecznie wykorzystywani, ponieważ niektórzy agenci mogą otrzymywać wycinki z kilkoma długotrwałymi testami, podczas gdy inni agenci mogą otrzymywać wycinki z krótkimi testami i zakończyć znacznie wcześniej niż reszta agentów.

Fragmentowanie na podstawie wcześniejszego czasu wykonywania testów

To ustawienie uwzględnia wcześniejsze czasy wykonywania w celu utworzenia wycinków testów, dzięki czemu każdy wycinek ma mniej więcej taki sam czas działania. Testy krótkoterminowe zostaną podzielone na partie, podczas gdy długotrwałe testy zostaną przydzielone do oddzielnych wycinków.

Ta opcja powinna być używana, gdy testy w zestawie nie mają zależności i nie muszą być uruchamiane na tym samym agencie. Ta opcja powoduje najbardziej efektywne wykorzystanie agentów, ponieważ każdy agent otrzymuje taką samą ilość "pracy" i wszystkie zakończą się w przybliżeniu w tym samym czasie.

Fragmentowanie oparte na zestawach testowych

To ustawienie używa prostego algorytmu fragmentowania, który dzieli liczbę zestawów testowych (lub plików) "A" między agentów "N", dzięki czemu każdy agent uruchamia testy z zestawów A/N. Liczba testów w zestawie nie jest brana pod uwagę podczas korzystania z tej opcji. Jeśli na przykład zestaw testów zawiera dziesięć zestawów testowych i używasz dwóch agentów do zadań równoległych, każdy agent otrzyma pięć zestawów testowych do uruchomienia. Możesz skrócić czas potrzebny na dalsze uruchamianie testów przy użyciu pięciu agentów, w tym przypadku każdy agent pobiera dwa zestawy testowe do uruchomienia.

Ta opcja powinna być używana, gdy testy w zestawie mają zależności lub używają AssemblyInitialize metod i AssemblyCleanup, lub i ClassInitializeClassCleanup do zarządzania stanem w kodzie testowym.

Uruchamianie testów równolegle w klasycznych potokach kompilacji

Jeśli masz duży zestaw testów lub długotrwałe testy integracji do uruchomienia w klasycznym potoku kompilacji, wykonaj następujące kroki.

Uwaga

Aby korzystać z funkcji wielu agentów w potokach kompilacji z lokalnym serwerem TFS, należy użyć serwera TFS 2018 Update 2 lub nowszej wersji.

  1. Skompiluj zadanie przy użyciu jednego agenta. Kompiluj projekty programu Visual Studio i publikuj artefakty kompilacji przy użyciu zadań przedstawionych na poniższej ilustracji. Używa to domyślnych ustawień zadania (pojedynczego agenta, bez zadań równoległych).

    buildJobSingleAgent

  2. Uruchom testy równolegle przy użyciu wielu agentów:

    • Dodawanie zadania agenta

      AddAgentJobBuild

    • Skonfiguruj zadanie do równoległego używania wielu agentów. W tym przykładzie użyto trzech agentów.

      ParallelTestJobBuild

      Napiwek

      W przypadku masowego testowania równoległego można określić aż 99 agentów.

    • Dodaj zadanie Pobierz artefakty kompilacji do zadania. Ten krok jest linkiem między zadaniem kompilacji a zadaniem testowym i jest niezbędny, aby upewnić się, że pliki binarne wygenerowane w zadaniu kompilacji są dostępne dla agentów używanych przez zadanie testowe do uruchamiania testów. Upewnij się, że zadanie jest ustawione na pobieranie artefaktów utworzonych przez "Bieżąca kompilacja", a nazwa artefaktu jest taka sama jak nazwa artefaktu używana w zadaniu Publikowania artefaktów kompilacji w zadaniu kompilacji.

      DownloadBuildArtifacts

    • Dodaj zadanie Test programu Visual Studio i skonfiguruj je tak, aby korzystał z wymaganej strategii fragmentowania.

Konfigurowanie zadań na potrzeby testowania równoległego w potokach YAML

Określ strategię w elemecie paralleljob i wskaż liczbę zadań, które mają zostać wysłane. Można określić maksymalnie 99 agentów, aby skalować testy w górę dla dużych zestawów testów.

jobs:
- job: ParallelTesting
  strategy:
    parallel: 2

Aby uzyskać więcej informacji, zobacz SCHEMAT YAML — Zadanie.

Uruchamianie testów równolegle w klasycznych potokach wydania

Wykonaj poniższe kroki, jeśli masz duży zestaw testów lub długotrwałe testy funkcjonalne do uruchomienia po wdrożeniu aplikacji. Na przykład możesz wdrożyć aplikację internetową i uruchomić testy Selenium w przeglądarce, aby zweryfikować funkcjonalność aplikacji.

Uwaga

Aby korzystać z funkcji wielu agentów w potokach wydania z lokalnym serwerem TFS, należy użyć serwera TFS 2017 Update 1 lub nowszej wersji.

  1. Wdrażanie aplikacji przy użyciu jednego agenta. Użyj wdrożenia platformy Azure: utwórz lub zaktualizuj grupę zasobów lub zadanie wdrażania usługi aplikacja systemu Azure, aby wdrożyć aplikację internetową w usługach aplikacja systemu Azure. Używa to domyślnych ustawień zadania (pojedynczego agenta, bez zadań równoległych).

    Wdrażanie aplikacjiApp1Agent

  2. Uruchom testy równolegle przy użyciu wielu agentów:

    • Dodawanie zadania agenta

      AddAgentJobRM

    • Skonfiguruj zadanie do równoległego używania wielu agentów. W tym przykładzie użyto trzech agentów.

      ParallelTestJobRM

      Napiwek

      W przypadku masowego testowania równoległego można określić aż 99 agentów.

    • Dodaj wszelkie dodatkowe zadania , które muszą zostać uruchomione przed uruchomieniem zadania testowego programu Visual Studio. Na przykład uruchom skrypt programu PowerShell, aby skonfigurować wszystkie dane wymagane przez testy.

      Napiwek

      Zadania w potokach wydania domyślnie pobierają wszystkie artefakty połączone z potokiem wydania. Aby zaoszczędzić czas, możesz skonfigurować zadanie w celu pobrania tylko artefaktów testowych wymaganych przez zadanie. Na przykład pliki binarne aplikacji internetowej nie są wymagane do uruchamiania testów Selenium i pobierania tych danych można pominąć, jeśli aplikacja i artefakty testowe są publikowane oddzielnie przez potok kompilacji.

    • Dodaj zadanie Test programu Visual Studio i skonfiguruj je tak, aby korzystał z wymaganej strategii fragmentowania.

      Napiwek

      Jeśli maszyny testowe nie mają zainstalowanego programu Visual Studio, możesz użyć zadania Instalator platformy testowej programu Visual Studio, aby uzyskać wymaganą wersję platformy testowej.

Masowe testowanie równoległe przez połączenie równoległych zadań potoku z równoległym wykonywaniem testów

Gdy zadania równoległe są używane w potoku, używa wielu maszyn (agentów) do równoległego uruchamiania każdego zadania. Struktury testowe i moduły uruchamiające zapewniają również 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. Funkcje równoległości można łączyć w sposób warstwowy w celu osiągnięcia masowego testowania równoległego. W kontekście zadania testowego programu Visual Studio równoległość można łączyć w następujący sposób:

  1. Równoległość oferowana przez struktury testowe. Wszystkie nowoczesne struktury testów, takie jak MSTest v2, NUnit, xUnit i inne, zapewniają możliwość równoległego uruchamiania testów. Zazwyczaj testy w zestawie są uruchamiane równolegle. Te struktury testowe łączą się z platformą Test programu Visual Studio przy użyciu adaptera testowego i platformy testowej wraz z odpowiednią kartą oraz działają w ramach procesu hosta testowego tworzonego przez platformę testową programu Visual Studio podczas uruchamiania testów. W związku z tym przetwarzanie równoległe w tej warstwie jest procesem dla wszystkich struktur i kart.

  2. Równoległość oferowana przez platformę testową programu Visual Studio (vstest.console.exe). Platforma testowa programu Visual Studio może równolegle uruchamiać zestawy testowe. Użytkownicy vstest.console.exe rozpoznają to jako przełącznik /parallel. Robi to, uruchamiając proces hosta testowego na każdym dostępnym rdzeniu i przekazując testy w zestawie do wykonania. Działa to w przypadku każdej struktury, która ma kartę testową dla platformy testowej programu Visual Studio, ponieważ jednostka równoległości jest zestawem testowym lub plikiem testowym. W połączeniu z równoległością oferowaną przez struktury testowe (opisane powyżej) zapewnia maksymalny stopień równoległości podczas uruchamiania testów na jednym agencie w potoku.

  3. Równoległość oferowana przez zadanie Visual Studio Test (VSTest). Zadanie VSTest obsługuje równoległe uruchamianie testów między wieloma agentami (lub maszynami). Tworzone są wycinki testowe, a każdy agent wykonuje jeden wycinek naraz. Trzy różne strategie fragmentowania, w połączeniu z równoległością oferowaną przez platformę testową i platformę testową (zgodnie z powyższym opisem), powodują wykonanie następujących czynności:

    • Fragmentowanie na podstawie liczby testów i agentów. Proste fragmentowanie, w którym testy są pogrupowane w wycinki o równym rozmiarze. Wycinek zawiera testy z co najmniej jednego zestawu. Wykonanie testu na agencie jest następnie zgodne z równoległością opisaną w 1 i 2 powyżej.

    • Fragmentowanie na podstawie wcześniejszego czasu wykonywania. Na podstawie poprzednich terminów uruchamiania testów oraz liczby dostępnych agentów testy są pogrupowane w wycinki, tak aby każdy wycinek wymagał mniej więcej równego czasu wykonywania. Wycinek zawiera testy z co najmniej jednego zestawu. Wykonanie testu na agencie jest następnie zgodne z równoległością opisaną w 1 i 2 powyżej.

    • Fragmentowanie oparte na zestawach. Wycinek jest zestawem testowym i zawiera testy, które należą do tego samego zestawu. Wykonanie agenta jest następnie zgodne z równoległością opisaną w 1 i 2 powyżej. Jednak 2 może nie wystąpić, jeśli agent odbiera tylko jeden zestaw do uruchomienia.

Pomoc i obsługa techniczna