Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Выполнение тестов для проверки изменений кода является ключом к поддержанию качества. Для успешной интеграции важно иметь хороший набор тестов, выполняемый с каждой сборкой. Однако по мере роста базы кода набор тестов регрессии, как правило, растет, и выполнение полного регрессии теста может занять много времени. Иногда сами тесты могут быть длительными. Обычно это происходит при написании сквозных тестов. Это снижает скорость доставки клиентской ценности, так как конвейеры не могут быстро обрабатывать сборки.
Параллельное выполнение тестов — отличный способ повысить эффективность конвейеров CI/CD. Это можно сделать легко, используя дополнительную емкость, предлагаемую облаком. В этой статье описывается, как можно параллелизировать тесты с помощью нескольких агентов для обработки заданий.
Предварительные требования
Ознакомьтесь с понятиями агентов и заданий. Каждый агент может одновременно выполнять только одно задание. Для параллельного выполнения нескольких заданий необходимо настроить несколько агентов. Кроме того, вам потребуется достаточно параллельных заданий.
Настройка параллельных заданий
Укажите стратегию parallel в YAML и укажите, сколько заданий должно быть отправлено.
Переменные System.JobPositionInPhase и System.TotalJobsInPhase добавляются в каждое задание.
jobs:
- job: ParallelTesting
strategy:
parallel: 2
Подсказка
Чтобы увеличить масштаб тестирования для больших наборов тестов, можно указать до 99 агентов.
Срез набора тестов
Для параллельного выполнения тестов необходимо сначала выполнить срез (или секцию), чтобы каждый срез можно было выполнять независимо. Например, вместо выполнения большого набора тестов 1000 на одном агенте можно использовать два агента и параллельно запускать 500 тестов на каждом агенте. Кроме того, можно сократить время, затраченное на выполнение тестов, с помощью 8 агентов и параллельного выполнения 125 тестов на каждом агенте.
Шаг, выполняющий тесты в задании, должен знать, какой срез теста должен выполняться. Переменные System.JobPositionInPhase и System.TotalJobsInPhase могут использоваться для этой цели:
-
System.TotalJobsInPhaseуказывает общее количество срезов (вы можете подумать об этом как "totalSlices") -
System.JobPositionInPhaseидентифицирует определенный срез (вы можете подумать об этом как "sliceNum")
Если вы представляете все тестовые файлы в виде одномерного массива, каждое задание может выполнять тестовый файл, индексируемый по адресу [sliceNum + totalSlices], пока не будут запущены все тестовые файлы. Например, если у вас есть шесть тестовых файлов и два параллельных задания, первое задание (срез0) будет запускать тестовые файлы с нумерованным номером 0, 2 и 4, а второе задание (срез1) будет запускать тестовые файлы с номером 1, 3 и 5.
Если вместо этого используются три параллельных задания, первое задание (срез0) будет запускать тестовые файлы с нумерованным 0 и 3, то второй задание (срез1) будет запускать тестовые файлы с нумерованным 1 и 4, а третье задание (срез2) будет запускать тестовые файлы с нумерованным 2 и 5.
Пример кода
В этом примере .NET Core используются --list-tests и --filter параметры dotnet test для среза тестов.
Тесты выполняются с помощью NUnit. Результаты теста, созданные тестовой DotNetCoreCLI@2 задачей, затем публикуются на сервере.
Импортируйте (в Azure Repos или Azure DevOps Server) или вилку (в GitHub) этого репозитория:
https://github.com/idubnori/ParallelTestingSample-dotnet-core
В этом примере Python используется скрипт PowerShell для среза тестов. Тесты выполняются с помощью pytest. Результаты теста в стиле JUnit, созданные pytest, затем публикуются на сервере. Импортируйте (в Azure Repos или Azure DevOps Server) или вилку (в GitHub) этого репозитория:
https://github.com/PBoraMSFT/ParallelTestingSample-Python
В этом примере JavaScript используется скрипт bash для среза тестов. Тесты выполняются с помощью средства выполнения mocha. Результаты теста в стиле JUnit, созданные mocha, затем публикуются на сервере. Импортируйте (в Azure Repos или Azure DevOps Server) или вилку (в GitHub) этого репозитория:
https://github.com/PBoraMSFT/ParallelTestingSample-Mocha
Пример кода содержит файл azure-pipelines.yml в корне репозитория, который можно использовать для создания конвейера. Следуйте всем инструкциям из статьи "Создание первого конвейера ", чтобы создать конвейер и просмотреть тестовые срезы в действии.
Объединение параллелизма для массового параллельного тестирования
Если параллельные задания используются в конвейере, конвейер использует несколько компьютеров для параллельного выполнения каждого задания. Большинство тестовых модулей предоставляют возможность параллельного выполнения тестов на одном компьютере (обычно создавая несколько процессов или потоков, выполняемых параллельно). Два типа параллелизма можно объединить для массового параллельного тестирования, что делает тестирование в конвейерах чрезвычайно эффективным.
Помощь и поддержка
- См. нашу страницу устранения неполадок
- Получите советы по Stack Overflow и получите поддержку через сообщество разработчиков