cobertura de código Java no Hudson
-
07-07-2019 - |
Pergunta
Eu estou migrando um par de projectos de uma construção Ant para um Maven. O servidor de compilação é, e continuará a ser, Hudson.
Eu tenho tido a cobertura de código de gravação problemas no hudson com cobertura devido aos testes href="https://stackoverflow.com/questions/732995/running-junits-and-cobertura-with-maven"> .
O projeto é multi-módulo e que seria bom, embora não seja obrigatório, para ter uma saída agregada dos dados de cobertura de código.
Ao todo, a solução que estou procurando deve:
- testes automatizados são executados para todos os módulos e registrar os resultados uma vez ;
- exibir a cobertura de código módulo individual em Hudson ;
- ser facilmente configurado uma vez para todo o projeto , e não em cada módulo.
A solução pode ser baseada em Cobertura, ou Emma, ??ou qualquer outra ferramenta de cobertura de código java.
Atualização :. Executando os testes com Emma ainda duplica os resultados e não há capacidade merge
, por isso não é realmente utilizável com multi-módulo constrói
Solução
Sonar é uma ferramenta muito legal que é facilmente integrado com Hudson, eu realmente gosto de sua organização com multi- projetos do módulo. Você deve dar-lhe uma tentativa
alt texto http://sonar.codehaus.org/ wp-content / uploads / 2009/08 / dashboard.png
Outras dicas
É um pouco hackish, mas a abordagem que eu estou usando é usar um versão modificada do Maven cobertura plug-in (que é disponível a partir de sua repo ). Ele fornece uma cobertura: alvo gerar-relatório, de modo que você pode inserir cobertura: instrumento e cobertura: gerar-relatório em seu ciclo de vida antes e depois de testes executados, respectivamente. Isso vai obter os dados de cobertura que você quer sem o duplicado a execução do teste / gravação.
O problema subjacente é que todos os não-trevo plugins cobertura Maven eu correr em são construídos em torno da idéia de executar os testes com cobertura separadamente do principal de execução de teste no ciclo de vida Maven. Isto, obviamente, resulta em dois conjuntos de execuções de teste. Se você estiver usando um projeto de estilo livre, você só vai ter um conjunto de testes gravados (uma vez que, mesmo com duas execuções de teste, há apenas uma cópia da saída de teste), mas o tipo de projeto Maven realmente intercepta execuções o Maven mojo e saída de teste registros / resultados em tempo de execução do teste, em vez de tudo de uma vez, no final da compilação como projetos de freestyle fazer. Isto tem muitas vantagens, mas também tem a desvantagem em vez gritantes que um único teste sendo executado duas vezes fica contado como dois testes.
Dito isto, enquanto eu vi argumentos fortes para executar testes contra ambos código não-instrumentado e instrumentado, prefiro executar apenas os testes de uma vez, contra o código instrumentado - e não apenas por causa das questões Maven / Hudson, mas porque quando você tem provas que levam 45 minutos, parece francamente bobo para executá-los duas vezes para gerar o mesmo resultado.
Robert,
Eu tive esse problema bem e descobriu que Hudson não relata o dobro se você configurar o projeto como um projeto de estilo livre, em vez de um projeto Maven2. Você perde um pouco da simpatia de ter um projeto maven2, mas para nós, foi um comercial que tínhamos de fazer.
Jeff
Nós usamos projectos estilo livre e não tem este problema, assim como indicado, esta pode ser a origem do problema.
Para fornecer as características que se fundem, criamos nosso próprio repositório de artefatos (nós não estamos usando Maven). No final de cada construção, nós copiar o arquivo cobertura.ser a um compartilhamento de rede, renomeá-lo no processo. Temos um trabalho visão consolidada que copia todos os arquivos de cobertura e os arquivos de código fonte (outro artefato construção copiados para o compartilhamento de rede) para o diretório de construção local e gerar o relatório de Cobertura.
A falta de um repositório de artefato padrão dentro Hudson é um pouco frustrante, mas faz sentido dar os autores normalmente usam Maven para essas necessidades. Nossos corridas processo de construção mais de múltiplos servidores por isso não podemos apenas usar caminhos relativos para os outros diretórios de trabalho.
Note, nós fazemos a mesma coisa para outras métricas: resultados dos testes, JavaNCSS, ect. e juntou-se ou usando as ferramentas corretas ou algum código personalizado.
Nós usamos o mesmo repositório de artefatos tradicionais de construção:. DLLs, JARs, scripts de instalação
Veja SD Java Cobertura de Teste para um extremamente baixo ferramenta de sobrecarga com um bom GUI. Eu não tenho certeza se entendi sua "correr duas vezes" problema, mas se você correu (o mesmo determinista) testa duas vezes com as ferramentas SD, você poderá obter os mesmos dados de cobertura de teste, por exemplo, a sua idempotent. Se os testes são não-determinístico, você vai ter duas corridas de teste diferentes, mas estas ferramentas se funde facilmente os resultados de várias corridas em um único resumo geral.
Eles também lidar com grandes aplicações, e múltipla punho roscado aplicações muito bem (pequenas lascas de tempo pode fazer a resposta um pouco imprecisa em teoria, mas praticar isso simplesmente não é um problema).
Você já considerou Clover da Atlassian ?
O maven-clover2-plugin tem uma nova meta: clover2:. configuração que simplesmente instrumento de seus testes sem bifurcação do ciclo de vida, ou executar os testes duas vezes
Você iria definir as metas para ser executado em Hudson assim:
mvn clover2:setup verify clover2:aggregate clover2:clover
A-clover2-plugin Maven é absolutamente livre para experimentar durante 30 dias.