Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Serviços de DevOps do Azure | Azure DevOps Server | Azure DevOps Server 2022
A cobertura de código ajuda a determinar a proporção do código do seu projeto que está efetivamente a ser testada, como através de testes de unidade. Para aumentar sua confiança nas alterações de código e proteger eficazmente contra bugs, seus testes devem exercitar ou cobrir uma grande proporção do seu código.
Ao revisar os resultados da cobertura de código, você pode identificar caminhos de código que os testes não cobrem. Estas informações ajudam-no a melhorar a cobertura dos testes ao longo do tempo, reduzindo a dívida dos testes.
Este artigo mostra como exibir, configurar e solucionar problemas de cobertura de código no Azure Pipelines. Aprende a configurar a diff coverage para pull requests, configurar políticas de cobertura e resolver problemas comuns.
Observação
Embora você possa criar código de vários sistemas de controle de versão suportados pelo Azure Pipelines, a cobertura de código para o recurso de solicitações pull discutido neste artigo está atualmente disponível apenas para o Azure Repos.
Formatos, tarefas e artefatos suportados
Formatos suportados
Os Pipelines do Azure podem publicar resultados de cobertura por meio da tarefa Publicar Resultados de Cobertura de Código v2. A tarefa pode exibir os resultados em 2 modos de exibição diferentes:
- Para cobertura, jacoco, trevo, gcov, pcov e outros formatos xml, gera-se uma visualização HTML que contém mais detalhes do relatório de cobertura de código e é preferida pela maioria dos clientes.
- Para
.coverage/.cjson/.covx– gera uma vista tabular, contendo menos detalhes do que a vista HTML.
Artefatos e resultados
Você pode visualizar os artefatos de cobertura de código publicados durante a compilação na guia Resumo no resumo da execução do pipeline.
Além disso, você pode revisar os resultados do relatório de cobertura de código na guia Cobertura de código :
- Se você publicar cobertura de código usando os formatos de cobertura Cobertura ou JaCoCo, o artefato de cobertura de código conterá um
.htmlarquivo que você poderá visualizar offline para análise posterior.
- Para .NET e .NET Core, você pode acessar o link para baixar o artefato escolhendo o marco de cobertura de código no resumo da compilação.
-
O Visual Studio Test pode coletar cobertura para aplicativos .NET e .NET Core. Ele produz
.coveragearquivos que você pode baixar e usar para análise adicional no Visual Studio.
Tasks
Publicar Resultados da Cobertura de Código publica os resultados da cobertura de código para o Azure Pipelines, que foram produzidos por uma build no formato Cobertura ou JaCoCo.
Tarefas internas, como Visual Studio Test, .NET Core, Ant, Maven, Gulp, Grunt e Gradle , oferecem a opção de publicar dados de cobertura de código no pipeline.
Considerações sobre o Docker
Para aplicativos que usam o Docker, você pode executar compilações e testes dentro do contêiner e gerar resultados de cobertura de código dentro do contêiner. Para publicar os resultados no pipeline, disponibilize os artefatos gerados para a tarefa Publicar resultados de cobertura de código. Para referência, consulte um exemplo semelhante para publicar resultados de teste na seção Compilar, testar e publicar resultados com um arquivo do Docker para o Docker.
Considerações importantes
- Em um pipeline YAML de vários estágios, os resultados da cobertura de código só estão disponíveis após a conclusão de todo o pipeline. Talvez seja necessário separar o estágio de compilação em seu próprio pipeline se quiser revisar os resultados da cobertura de código antes de implantar na produção.
- Atualmente, a mesclagem dos resultados de cobertura de código de múltiplos testes funciona apenas para .NET e .NET Core. Não há planos para suportar outros formatos.
Cobertura total vs cobertura diferencial
A cobertura total mede a cobertura de toda a base de código de um projeto. No contexto de solicitações pull, os desenvolvedores se concentram nas alterações que estão fazendo e querem saber se as linhas específicas de código que adicionaram ou alteraram são cobertas. Este tipo de cobertura é a cobertura diff.
As definições de cobertura em YAML diferem de um pipeline YAML porque as definições de cobertura se aplicam ao seu repositório e são utilizadas independentemente do pipeline que constrói o seu código. Esta separação também significa que, se utilizares pipelines de compilação clássicos baseados em designer, receberás a verificação do estado de cobertura de código para pull requests.
Os indicadores de cobertura aparecem na visualização de arquivos alterados, independentemente de os detalhes do comentário da solicitação pull estarem ativados.
Configurar a cobertura de diferença
Para alterar as configurações padrão da experiência de cobertura de código para solicitações pull, inclua um arquivo YAML de configuração nomeado azurepipelines-coverage.yml na raiz do repositório. Defina os valores desejados nesse arquivo e o Azure DevOps os usará automaticamente na próxima vez que o pipeline for executado.
Também pode alterar as seguintes definições:
Exemplo de configuração
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
Pode encontrar mais exemplos detalhados no repositório de exemplos YAML de cobertura de código.
Status da cobertura, detalhes e indicadores
Quando você configura um pipeline para coletar e publicar cobertura de código, ele publica um status de cobertura de código quando você cria uma solicitação pull. Por padrão, o servidor verifica se os testes cobrem pelo menos 70% de linhas alteradas. Você pode alterar o limiar de cobertura de diferença para um valor à sua escolha modificando o parâmetro de destino mencionado anteriormente.
A verificação do estado calcula a cobertura de diferenças para todos os ficheiros no pull request. Para ver a porcentagem de cada arquivo, habilite Detalhes conforme descrito na seção anterior. Quando ativado, o sistema publica os detalhes como um comentário na solicitação pull.
Na visualização de arquivos alterados de uma solicitação pull, as linhas alteradas também são anotadas com indicadores de cobertura para mostrar se essas linhas são cobertas.
Aplique a proteção de ramificação com uma política de cobertura de código
Por padrão, a verificação do status de cobertura de código em solicitações pull é consultiva - não bloqueia mesclagens com baixa cobertura. Para garantir que as alterações atendam a um limite mínimo de cobertura antes da fusão, configure uma política de filial que use a verificação de status da cobertura.
O status de cobertura de código postado de um pipeline segue a convenção {name-of-your-pipeline/codecoverage}de nomenclatura.
Observação
- As políticas de filial no Azure Repos (mesmo políticas opcionais) impedem que as solicitações pull sejam concluídas automaticamente se falharem. Esse comportamento não é específico da política de cobertura de código.
- A política de cobertura de código não é alterada para "Falhado" se a compilação falhar.
Guia de resolução de problemas
Porque é que vejo DLLs duplicadas na vista de cobertura do separador Cobertura de Código?
Você pode ver DLLs duplicadas quando o .NET Core e o .NET Framework são usados no pipeline. Espere DLLs duplicadas quando ambas forem usadas, o que é por design, já que o mesmo módulo vem de caminhos diferentes.
Por que não há dados de cobertura na guia Cobertura de código?
Vários motivos podem causar esse problema:
Nenhum teste ou DLLs presente: Se os arquivos não contiverem testes ou DLLs, o valor de cobertura será 0. O Azure DevOps não exibe dados de cobertura de código na guia quando o valor de cobertura é 0. Em vez disso, mostra uma mensagem no separador Cobertura de código explicando por que não há dados de cobertura.
XML de cobertura vazio: Quando utiliza tarefas de Publicação de Cobertura de Código, se a cobertura
.xmlfornecida como entrada não contenha qualquer informação ou tenha zero linhas cobertas, nenhum dado de cobertura será exibido na aba. Verifique por que o ficheiro de cobertura.xml(ficheiro de entrada) está vazio ou não tem informações.Falhas de compilação: Se a compilação falhar, a guia de cobertura de código aparecerá com uma mensagem apropriada.
Configuração da tarefa VSTest: Quando você usa a tarefa VSTest, se você não habilitar a verificação de cobertura de código ou se mencionar DLLs incorretas ou caminhos incorretos para testar arquivos no campo Filtro de teste, os dados de cobertura não serão exibidos.
Problemas de configuração de compilação: Às vezes, existem vários valores de configuração de compilação e você não define todos os valores, como BuildFlavour ou BuildPlatform. A interface do usuário mostra apenas valores de configurações de compilação específicas, e é por isso que outros módulos estão faltando.
Arquivos HTML grandes: se o
.htmlarquivo tiver mais de 7 MB, o relatório não estará disponível na guia Cobertura de código. Como solução alternativa, baixe o artefato "Cobertura de código Report_*" dos artefatos publicados no Resumo.Mensagens de falha: Se a guia Cobertura de código contiver uma mensagem de falha relacionada a um erro específico do usuário, investigue o que disparou essa mensagem de erro.
O que devo fazer se a Verificação do Status da Cobertura do Código nunca for concluída ou falhar?
Para habilitar a verificação do status da cobertura de código, tente adicionar o azurepipelines-coverage.yml arquivo na raiz do repositório. Verifique se o nome do arquivo permanece exatamente o mesmo. Aqui está um exemplo:
coverage:
status:
comments: on
diff:
target: 50%
Se a verificação do status da cobertura estiver falhando:
- Verifique a percentagem de cobertura do diff. Se for menor do que o alvo, tente aumentar a porcentagem de cobertura de diferenças.
- Se a compilação falhou por qualquer motivo, essa falha também pode fazer com que a verificação de status de cobertura de código falhe.
- Verifique qual tarefa gera o arquivo de cobertura ou relatório no pipeline. Verifique se a tarefa está carregando corretamente o relatório ou arquivo de cobertura.
- Casos em que os comentários de cobertura de diferenças mostram "Sem alterações executáveis" ou "Nenhum dado de cobertura de código encontrado" podem ocorrer devido à remoção de linhas, inserção de espaços em branco ou adição de comentários. Esses casos são alterações não executáveis e não são significativas, portanto, a cobertura de código não os relata.
Como posso excluir algumas DLLs da cobertura de código?
Para excluir ficheiros da cobertura de código, use a classe ExcludeFromCodeCoverageAttribute.
Como publico o resumo de cobertura de código com detalhes adequados combinando vários ficheiros de resumo?
A tarefa Publicar Cobertura de Código V1 não suporta vários arquivos de resumo como entrada. Em vez disso, use a tarefa Publicar Code Coverage V2, que oferece suporte a vários formatos de arquivo.
Você também pode usar a tarefa Gerador de Relatórios para mesclar todos os .xml arquivos e, em seguida, passar o caminho XML gerado como entrada para a tarefa Publicar Cobertura de Código.
Como faço para acionar a verificação de cobertura do código?
Para .html ficheiros, as verificações do estado de cobertura não são suportadas. Use a tarefa de Verificação de Qualidade da Compilação para verificar os resultados da cobertura de código.
O relatório na guia Cobertura de código contém números imprecisos
Os dados exibidos no separador provêm do ficheiro de cobertura. Caso esteja a usar tarefas personalizadas para gerar o ficheiro de cobertura de código, verifique se estão faltando DLLs ou outros ficheiros no arquivo.
A política de cobertura de código está bloqueada — qual é a causa disso?
Vários fatores podem causar esse problema:
Formato incorreto do nome da política de ramificação: verifique se o nome do pipeline corresponde ao nome da política de ramificação e não tem caracteres extras.
Usando PublishCodeCoverage V1: A política de cobertura de código fica bloqueada e os comentários não são gerados. Em vez disso, use a tarefa PublishCodeCoverage V2.
Demasiados ficheiros em PR: Se o PR tiver mais de 100 ficheiros, a política de cobertura fica bloqueada.
Várias políticas de cobertura: se você configurar várias políticas de cobertura, uma delas ficará presa. Configure apenas uma política e exclua a outra política bloqueada.
Vejo cobertura de 0% nas diferenças para os meus PRs, mesmo após adicionar testes.
Se adicionar testes para cobrir linhas de código modificadas ou novas num PR e ainda assim vir 0% de cobertura de diferenças:
- Verifique se os testes recém-adicionados são executados como parte da compilação.
- Se os testes não forem executados, verifique e atualize a configuração para incluí-los na compilação, pois a cobertura não pode ser calculada se os testes não forem executados.
Eu não vejo o comentário de cobertura diferencial no PR, embora eu veja o relatório de cobertura sendo publicado.
Vários fatores podem causar esse problema:
- Versão da tarefa: os comentários de cobertura de diferenças são suportados apenas com a Publicação de Cobertura de Código V2.
- Sem alterações executáveis: Comentários de cobertura de diferenças são gerados para ficheiros com alterações de código executável. Se o PR tiver apenas atualizações de configuração, o Azure DevOps pode mostrar a cobertura de código com base em todos os testes executados durante a compilação, mas pode não haver nenhuma cobertura de diferença para calcular.
- Formato de cobertura: se houver alterações de código funcional e o comentário não gerar, verifique se o pipeline gera um relatório de cobertura em um dos formatos suportados mencionados no início deste artigo.
Na guia Cobertura de código, não vejo o relatório HTML correto
Quando há problemas na geração do .html relatório, o sistema volta para uma visão simplificada.
Quais ferramentas de cobertura e formatos de resultados podem ser usados para validar a cobertura de código em solicitações pull?
Atualmente, você só pode usar formatos de cobertura de código (.coverage) do Visual Studio para validar a cobertura de código para solicitações pull. Use esse formato se você publicar cobertura de código usando a tarefa Teste do Visual Studio, o verbo de teste da tarefa .NET Core e a opção TRX da tarefa Publicar Resultados do Teste.
Se vários pipelines forem acionados quando uma solicitação pull for gerada, a cobertura será mesclada entre os pipelines?
Se vários pipelines forem acionados quando uma solicitação pull for gerada, a cobertura de código não será mesclada. Esse recurso é atualmente projetado para um único pipeline que coleta e publica cobertura de código para solicitações pull. Se você precisar mesclar dados de cobertura entre pipelines, envie uma solicitação de recurso na Comunidade de desenvolvedores.