Поделиться через


Покрытие кода для пулл-реквестов

Azure DevOps Services

Покрытие кода является важной метрикой качества и помогает оценить процент протестированного кода проекта. Чтобы гарантировать, что качество проекта улучшается с течением времени (или, по крайней мере, не регрессия), новый код, передаваемый в систему, должен быть хорошо протестирован. Когда разработчики создают запросы на вытягивание, знание о том, охватываются ли их изменения тестами, помогает устранить все пробелы в тестировании до объединения изменений в целевую ветвь. Владельцы репозитория также могут захотеть установить политики, чтобы предотвратить слияние больших непроверенных изменений.

Полное покрытие, покрытие диффа

Полный охват заключается в том, что покрытие измеряется для всей базы кода проекта. В контексте pull-запросов разработчики сосредоточены на изменениях, которые они вносят, и хотят знать, охвачены ли конкретные строки кода, которые они добавили или изменили. Этот тип покрытия — это покрытие diff.

Предварительные требования

Чтобы получить метрики покрытия для запроса на вытягивание, сначала настройте конвейер, который проверяет запросы на вытягивание. В этом конвейере настройте средство тестирования, используемое для сбора метрик покрытия кода. Затем результаты покрытия должны быть опубликованы на сервере для отчетности.

Дополнительные сведения о сборе и публикации результатов покрытия кода для выбранного языка см. в разделе "Экосистемы ". Например, соберите и опубликуйте покрытие кода для приложений .NET Core.

Примечание.

Хотя вы можете собирать и публиковать результаты покрытия кода для многих разных языков с помощью Azure Pipelines, покрытие кода для pull request'ов, обсуждаемое в этом документе, в настоящее время доступно только для проектов .NET и .NET core с использованием формата результатов покрытия кода Visual Studio (расширение файла .coverage). Поддержка других языков и форматов покрытия будет добавлена в будущие вехи.

Состояние покрытия, сведения и индикаторы

После настройки конвейера, который собирает и публикует покрытие кода, он публикует состояние покрытия кода при создании pull request. По умолчанию сервер проверяет наличие по крайней мере 70% измененных строк, охватываемых тестами. Целевое значение порога покрытия diff можно изменить на любое значение по вашему выбору. Для получения дополнительной информации см. раздел конфигурации параметров далее в этой статье.

Снимок экрана: проверка состояния покрытия.

Проверка состояния оценивает значение покрытия изменений (диффа) для всех исходных файлов в pull request. Если вы хотите просмотреть значение покрытия % diff для каждого из файлов, включите подробные сведения, как указано в разделе конфигурации. Включение данной функции размещает сведения в виде комментария в запросе на вытягивание.

Снимок экрана: комментарии о подробностях охвата.

В измененном представлении файлов в запросе на вытягивание измененные строки также аннотируются индикаторами покрытия, чтобы показать, охватываются ли эти строки.

Снимок экрана: индикаторы покрытия.

Примечание.

Хотя вы можете создать код из широкого спектра систем управления версиями, поддерживаемых Azure Pipelines, покрытие кода для pull requests, рассмотренное в этом документе, на данный момент доступно только для Azure Repos.

Настройка параметров покрытия

Если вы хотите изменить настройки по умолчанию для опыта покрытия кода в запросах на вытягивание, необходимо добавить файл конфигурации YAML с именем azurepipelines-coverage.yml в корневую директорию вашего репозитория. Задайте требуемые значения в этом файле и будет использоваться автоматически при следующем запуске конвейера.

Параметры, которые можно изменить, :

Настройка Описание По умолчанию Допустимые значения
статус Указывает, следует ли публиковать проверку состояния покрытия кода на pull requests.
Отключение не публикует никаких проверок покрытия, и заметки покрытия не отображаются в изменённом представлении файлов.
включен включено, выключено
целевой объект Целевое пороговое значение для покрытия диффа должно быть выполнено для успешного размещения состояния покрытия. 70 % Требуемое % числа
комментарии Указывает, должен ли комментарий, содержащий сведения об охвате для каждого файла кода, размещаться в пул-реквесте. выключен включено, выключено

Пример конфигурации:

coverage:
  status:           # Code coverage status will be posted to pull requests based on targets defined below.
    comments: on    # Off by default. When on, details about coverage for each file changed will be posted as a pull request comment. 
    diff:           # Diff coverage is code coverage only for the lines changed in a pull request.
      target: 60%   # Set this to a desired percentage. Default is 70 percent

Дополнительные примеры с подробными сведениями можно найти в примерах YAML для анализа покрытия кода в репозитории.

Примечание.

Индикаторы покрытия отображаются в измененном виде файлов независимо от того, включены ли сведения о комментарии пулл-реквеста.

Совет

Настройки покрытия YAML отличаются от конвейера YAML. Это связано с тем, что параметры покрытия применяются к репозиторию и будут использоваться независимо от того, какой конвейер создает код. Это разделение также означает, что при использовании классических конвейеров сборки, основанных на дизайне, вы получите проверку статуса покрытия кода для pull-запросов.

Защита ветви с помощью политики покрытия кода

Проверка покрытия кода для запросов на вытягивание является лишь рекомендацией для разработчиков и не препятствует объединению запросов на вытягивание с низким уровнем покрытия кода в целевую ветвь. Чтобы предотвратить слияние изменений, которые не соответствуют пороговой отметке охвата, необходимо настроить политику ветви с помощью проверки состояния покрытия.

Совет

Состояние покрытия кода, размещенное из конвейера, следует соглашению {name-of-your-pipeline/codecoverage} об именовании.

Примечание.

Политики ветви в Azure Repos (даже необязательные политики) не позволяют автоматически выполнять pull-запросы, если они не проходят проверку. Данное поведение не является специфичным для политики покрытия кода.

Начиная с сентября 2023 года политика покрытия кода не будет переопределена на "Сбой ", если сборка завершается ошибкой. Эта функция будет включена для всех клиентов.

Вопросы и ответы

Какие средства покрытия и форматы результатов можно использовать для проверки покрытия кода в пул-реквестах?

Покрытие кода для pull-запросов в настоящее время доступно только для покрытия в Visual Studio Code, .coverage, форматов. Используйте его при публикации покрытия кода с помощью задачи тестирования Visual Studio, команды тестирования задачи dotnet core и параметра TRX в задаче публикации результатов теста. Поддержка других средств покрытия и форматов результатов будет добавлена в будущие вехи.

Если при создании pull request активируется несколько конвейеров, объединится ли покрытие между конвейерами?

Если несколько конвейеров активируются при возникновении запроса на вытягивание, покрытие кода не объединяется. В настоящее время эта функция предназначена для одного конвейера, который собирает и публикует покрытие кода для pull-реквестов. Если необходимо объединить данные покрытия по конвейерам, отправьте запрос функции на Сообщество разработчиков.

Справка и поддержка