Perguntas frequentes
Perguntas do alto da minha cabeça desde aquela época eu enlouqueci com o jacoco.
Meu servidor de aplicativos (jBoss, Glassfish ..) localizado no Iraque, na Síria, seja o que for. É possível obter cobertura de vários módulos ao executar testes de integração nele? Jenkins e Sonar também estão em servidores diferentes.
Sim. Você precisa usar o agente jacoco que roda no modo output=tcpserver
jacoco ant lib. Basicamente doisjar
s. Isso lhe dará 99% de sucesso.
Como o agente jacoco funciona?
Você anexa uma string
-javaagent:[your_path]/jacocoagent.jar=destfile=/jacoco.exec,output=tcpserver,address=*
para o servidor de aplicativos JAVA_OPTS e reinicie-o. Nesta cadeia, apenas [your_path]
deve ser substituído pelo caminho para jacocoagent.jar, armazenado (armazene-o!) Na sua VM onde o servidor de aplicativos é executado. Desde o momento em que você inicia o servidor de aplicativos, todos os aplicativos implantados serão monitorados dinamicamente e suas atividades (significando uso de código) estarão prontas para você entrar no formato jacocos .exec por solicitação tcl.
Posso redefinir o agente jacoco para começar a coletar dados de execução apenas desde o início do teste?
Sim, para esse propósito, você precisa do script jacocoant.jar e ant build, localizado no seu espaço de trabalho jenkins.
Então, basicamente, o que eu preciso de http://www.eclemma.org/jacoco/ é o jacocoant.jar localizado no meu espaço de trabalho jenkins e o jacocoagent.jar localizado na minha VM do servidor de aplicativos?
Está certo.
Eu não quero usar ant, ouvi dizer que o plugin jacoco maven também pode fazer todas as coisas.
Isso não está certo, o plug-in jacoco maven pode coletar dados de teste de unidade e alguns dados de testes de integração (consulte Arquillian Jacoco ), mas se você tiver, por exemplo, testes seguros como uma compilação separada no jenkins e quiser mostrar a cobertura de vários módulos, eu posso veja como o maven plugin pode ajudá-lo.
O que exatamente o agente jacoco produz?
Somente dados de cobertura em .exec
formato. O sonar pode então lê-lo.
O jacoco precisa saber onde estão minhas classes java?
Não, sonar faz, mas não jacoco. Quando você fazmvn sonar:sonar
caminho para as aulas, entra em jogo.
E o roteiro das formigas?
Ele deve ser apresentado no seu espaço de trabalho do jenkins. Meu script formiga, eu chamei jacoco.xml
assim:
<project name="Jacoco library to collect code coverage remotely" xmlns:jacoco="antlib:org.jacoco.ant">
<property name="jacoco.port" value="6300"/>
<property name="jacocoReportFile" location="${workspace}/it-jacoco.exec"/>
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="${workspace}/tools/jacoco/jacocoant.jar"/>
</taskdef>
<target name="jacocoReport">
<jacoco:dump address="${jacoco.host}" port="${jacoco.port}" dump="true" reset="true" destfile="${jacocoReportFile}" append="false"/>
</target>
<target name="jacocoReset">
<jacoco:dump address="${jacoco.host}" port="${jacoco.port}" reset="true" destfile="${jacocoReportFile}" append="false"/>
<delete file="${jacocoReportFile}"/>
</target>
</project>
Dois parâmetros obrigatórios que você deve passar ao chamar esse script,
-Dworkspace=$WORKSPACE
use-o para apontar para o espaço de trabalho do jenkins e para o -Djacoco.host=yourappserver.com
host semhttp://
Observe também que coloquei meu jacocoant.jar
em $ {workspace} /tools/jacoco/jacocoant.jar
O que eu devo fazer a seguir?
Você iniciou seu servidor de aplicativos com jacocoagent.jar?
Você colocou script ant e jacocoant.jar no seu espaço de trabalho de jenkins?
Se sim, a última etapa é configurar uma compilação do jenkins. Aqui está a estratégia:
- Invoque o alvo formiga
jacocoReset
para redefinir todos os dados coletados anteriormente.
- Execute seus testes
- Invoque o alvo formiga
jacocoReport
para obter o relatório
Se tudo estiver certo, você verá it-jacoco.exec
no seu espaço de trabalho de construção.
Olhe para a captura de tela, eu também ant
instalei no meu espaço de trabalho no $WORKSPACE/tools/ant
diretório, mas você pode usar um que esteja instalado no seu jenkins.
Como empurrar este relatório no sonar?
O Maven sonar:sonar
fará o trabalho (não esqueça de configurá-lo), aponte-o para o pom.xml principal para que ele execute todos os módulos. Use o sonar.jacoco.itReportPath=$WORKSPACE/it-jacoco.exec
parâmetro para informar ao sonar onde seu relatório de teste de integração está localizado. Toda vez que analisará novas classes de módulos, buscará informações sobre a cobertura no it-jacoco.exec
.
Eu já tenho o jacoco.exec no meu diretório `target`, o` mvn sonar: sonar` o ignora / remove
Por padrão, mvn sonar:sonar
faz clean
e exclui o diretório de destino, use sonar.dynamicAnalysis=reuseReports
para evitá-lo.