2013-08-18 2 views
1

Надеюсь использовать сонар, jacoco, testng, ant, чтобы продемонстрировать коэффициент успешности тестирования и тестирование тестового блока. И я могу создать отчет о покрытии jacoco и показать его в Sonar. Но Sonar не может показать показатель успеха Unit Test. «Успех тестирования устройства» всегда равен 0, как показано ниже. Невозможно прочитать показатель успешности теста на единицу измерения, можете прочитать поле тестирования устройства, созданное jacoco

Фактически testng может генерировать отчет об испытаниях (Включить количество общего тестового случая, неудачный тестовый пример и тестовый пример).

Как сонар читает эти отчеты и показывает нам на приборной панели сонара?

И мой build.xml показано ниже:

<!-- ========= Define the main properties of this project ========= --> 
<property name="src.dir" value="${basedir}/src" /> 
<property name="test.dir" value="${basedir}/test" /> 
<property name="lib.dir" value="${basedir}/lib" /> 
<property name="build.dir" value="${basedir}/build" /> 
<property name="classes.dir" value="${build.dir}/classes" /> 
<property name="dist.dir" value="${build.dir}/dist" /> 
<property name="resource" value="${basedir}/resource" /> 
<property name="jar-file" value="${dist.dir}/Calculate-1.0.jar" /> 
<property name="reports.dir" value="${build.dir}/reports" /> 
<property name="reports.jacoco.dir" value="${build.dir}/reports/jacoco" /> 

<path id="classpath"> 
    <fileset dir="${basedir}"> 
     <include name="lib/*.jar"/> 
    </fileset> 
    <fileset dir="${build.dir}"> 
     <include name="dist/*.jar" /> 
    </fileset> 
</path> 

<!-- ========= Define "regular" targets: clean, compile, ... ========= --> 
<target name="clean"> 
    <delete dir="${build.dir}" /> 
</target> 

<target name="init"> 
    <mkdir dir="${build.dir}" /> 
    <mkdir dir="${dist.dir}" /> 
    <mkdir dir="${classes.dir}" /> 
    <mkdir dir="${reports.dir}" /> 
    <mkdir dir="${reports.jacoco.dir}" /> 
</target> 

<target name="compile" depends="init"> 
    <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath" fork="true" debug="true" includeAntRuntime="true" /> 
    <javac srcdir="${test.dir}" destdir="${classes.dir}" classpathref="classpath" fork="true" debug="true" includeAntRuntime="true" /> 
</target> 

<target name="jar" depends="compile"> 
    <jar destfile="${jar-file}" basedir="${classes.dir}"/> 
</target> 

<target name="test" depends="jar"> 
    <taskdef name="testng" classname="com.beust.testng.TestNGAntTask"> 
      <classpath path="${lib.dir}/testng-6.8.5.jar"/> 
    </taskdef> 
    <taskdef uri="antlib:org.jacoco.ant" resource="resource/antlib.xml"> 
     <classpath path="${lib.dir}/jacoco-ant-task-core-agent.jar" /> 
    </taskdef> 
    <jacoco:coverage destfile="${reports.jacoco.dir}/jacoco.exec" xmlns:jacoco="antlib:org.jacoco.ant"> 
     <testng classpath="${lib.dir}/testng-6.8.5.jar" classpathref="classpath" outputDir="${reports.dir}" haltOnFailure="false" > 
      <xmlfileset dir="${basedir}" includes="testng.xml" /> 
      <sysproperty key="testdata" value="${test.dir}" /> 
      <jvmarg value="-Dtest.resources.dir=${test.dir}" /> 
     </testng> 
    </jacoco:coverage> 
</target> 
->
<!-- ========= Define Sonar target ========= --> 
<property name="sonar.projectKey" value="org.codehaus.sonar:example-java-ant" /> 
<property name="sonar.projectName" value="Simple Java Project analyzed with the Sonar Ant Task" /> 
<property name="sonar.projectVersion" value="1.0" /> 
<property name="sonar.language" value="java" /> 
<property name="sonar.sources" value="${src.dir}" /> 
<property name="sonar.tests" value="${test.dir}" /> 
<property name="sonar.binaries" value="${classes.dir}" /> 
<property name="sonar.sourceEncoding" value="UTF-8" /> 
<property name="sonar.dynamicAnalysis" value="reuseReports" /> 
<property name="sonar.java.coveragePlugin" value="jacoco" /> 
<property name="sonar.jacoco.reportPath" value="${reports.jacoco.dir}/jacoco.exec" /> 
<property name="sonar.host.url" value="http://localhost:9000" /> 
<property name="sonar.jdbc.url" value="jdbc:h2:tcp://localhost:9092/sonar" /> 
<!--<property name="sonar.surefire.reportsPath" value="${reports.dir}" />--> 
<!-- 
    <property name="sonar.jdbc.username" value="..." /> 
    <property name="sonar.jdbc.password" value="..." /> 
--> 
<target name="sonar" depends="compile"> 
    <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml"> 
     <!-- Update the following line, or put the "sonar-ant-task-*.jar" file in your "$HOME/.ant/lib" folder --> 
     <classpath path="${lib.dir}/sonar-ant-task-2.1.jar" /> 
    </taskdef>  
    <!-- Execute Sonar --> 
    <sonar:sonar /> 
</target> 
<target name="all" depends="clean,init,compile,jar,test,sonar" /> 

+0

У вас есть собственность контрольного чтения существующие отчеты закомментирована. Что случилось, когда вы раскопали его? -> –

+0

Насколько мне известно, это свойство предназначено только для отчета юнита, а не для tesng отчет. Когда я раскомментирую это, это не сработает. – habren

+0

Ах. Per [этот сайт] (https://wiki.cantara.no/display/dev/Code+coverage+using+Surefire,+TestNG,+Jacoco+and+Sonar), Sonar не поддерживает TestNG, но вы можете иметь testNG создает отчеты в формате JUnit. –

ответ

2

Спасибо за ответ Жанны. Я решил это сейчас. Как сказала Жанна, сонар не поддерживает TestNG, он поддерживает JUnit. Поэтому я использую ReportNG для создания отчета об испытаниях в формате xml. Файл отчета будет называться com.abc.classTest1.xml. Чтобы успешно продемонстрировать успешный успех модуля в гидролокаторе, мы должны изменить его имя на TEST-com.abc.classTest1.xml. Ниже приведена моя окончательная версия build.xml.

<!-- ========= Define the main properties of this project ========= --> 
<property name="src.dir" value="${basedir}/src" /> 
<property name="test.dir" value="${basedir}/test" /> 
<property name="lib.dir" value="${basedir}/lib" /> 
<property name="build.dir" value="${basedir}/build" /> 
<property name="classes.dir" value="${build.dir}/classes" /> 
<property name="dist.dir" value="${build.dir}/dist" /> 
<property name="resource" value="${basedir}/resource" /> 
<property name="jar-file" value="${dist.dir}/Calculate-1.0.jar" /> 
<property name="reports.dir" value="${build.dir}/reports" /> 
<property name="reports.jacoco.dir" value="${build.dir}/reports/jacoco" /> 
<property name="junitreport.dir" value="junitreport" /> 

<path id="classpath"> 
    <fileset dir="${basedir}"> 
     <include name="lib/*.jar"/> 
    </fileset> 
    <fileset dir="${build.dir}"> 
     <include name="dist/*.jar" /> 
    </fileset> 
</path> 

<!-- ========= Define "regular" targets: clean, compile, ... ========= --> 
<target name="clean"> 
    <delete dir=".sonar" /> 
    <delete dir="${build.dir}" /> 
    <delete dir="${junitreport.dir}" /> 
</target> 

<target name="init"> 
    <mkdir dir="${build.dir}" /> 
    <mkdir dir="${dist.dir}" /> 
    <mkdir dir="${classes.dir}" /> 
    <mkdir dir="${reports.dir}" /> 
    <mkdir dir="${reports.jacoco.dir}" /> 
    <mkdir dir="${junitreport.dir}" /> 
</target> 

<target name="compile" depends="init"> 
    <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath" fork="true" debug="true" includeAntRuntime="true" /> 
    <javac srcdir="${test.dir}" destdir="${classes.dir}" classpathref="classpath" fork="true" debug="true" includeAntRuntime="true" /> 
</target> 

<target name="jar" depends="compile"> 
    <jar destfile="${jar-file}" basedir="${classes.dir}"/> 
</target> 

<target name="test" depends="jar"> 
<!-- <taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"> 
     <classpath> 
      <path refid="classpath"/> 
     </classpath> 
    </taskdef> --> 
    <taskdef name="testng" classname="com.beust.testng.TestNGAntTask"> 
      <classpath path="${lib.dir}/testng-6.8.5.jar"/> 
    </taskdef> 
    <taskdef uri="antlib:org.jacoco.ant" resource="resource/antlib.xml"> 
     <classpath path="${lib.dir}/jacoco-ant-task-core-agent.jar" /> 
    </taskdef> 
    <jacoco:coverage destfile="${reports.jacoco.dir}/jacoco.exec" xmlns:jacoco="antlib:org.jacoco.ant"> 
     <testng classpath="${lib.dir}/testng-6.8.5.jar" classpathref="classpath" outputDir="${reports.dir}" 
     haltOnFailure="false" useDefaultListeners="false" listeners="org.uncommons.reportng.JUnitXMLReporter"> 
      <xmlfileset dir="${basedir}" includes="testng.xml" /> 
      <sysproperty key="testdata" value="${test.dir}" /> 
      <sysproperty key="org.uncommons.reportng.title" value="My Sonar Test Report" /> 
     </testng> 
<!--  <junit fork="yes" dir="" failureProperty="test.failed"> 
      <classpath location="${classes.dir}" /> 
      <classpath refid="classpath" /> 

      <formatter type="xml" /> 
      <batchtest todir="${junitreport.dir}"> 
       <fileset dir="${test.dir}"> 
        <include name="com/cisco/sonar/CalculateTestJunit.java" /> 
       </fileset> 
      </batchtest> 
     </junit> --> 
    </jacoco:coverage> 
</target> 

<!-- ========= Define Sonar target ========= --> 
<property name="sonar.projectKey" value="org.codehaus.sonar:example-java-ant" /> 
<property name="sonar.projectName" value="Simple Java Project analyzed with the Sonar Ant Task" /> 
<property name="sonar.projectVersion" value="1.0" /> 
<property name="sonar.language" value="java" /> 
<property name="sonar.sources" value="${src.dir}" /> 
<property name="sonar.tests" value="${test.dir}" /> 
<property name="sonar.binaries" value="${classes.dir}" /> 
<property name="sonar.sourceEncoding" value="UTF-8" /> 
<property name="sonar.dynamicAnalysis" value="reuseReports" /> 
<property name="sonar.java.coveragePlugin" value="jacoco" /> 
<property name="sonar.jacoco.reportPath" value="${reports.jacoco.dir}/jacoco.exec" /> 
<property name="sonar.host.url" value="http://1.2.3.4:9000" /> 
<property name="sonar.jdbc.url" value="jdbc:h2:tcp://1.2.3.4:9092/sonar" /> 
<property name="sonar.surefire.reportsPath" value="${reports.dir}/xml" /> 
<!-- 
    <property name="sonar.jdbc.username" value="..." /> 
    <property name="sonar.jdbc.password" value="..." /> 
--> 
<target name="sonar"> 
    <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml"> 
     <!-- Update the following line, or put the "sonar-ant-task-*.jar" file in your "$HOME/.ant/lib" folder --> 
     <classpath path="${lib.dir}/sonar-ant-task-2.1.jar" /> 
    </taskdef>  
    <!-- Execute Sonar --> 
    <sonar:sonar /> 
</target> 
<target name="all" depends="clean,init,compile,jar,test,sonar" />