Junit / Ant重新运行失败的测试

时间:2011-10-11 18:37:55

标签: ant junit hudson

我想知道是否有人知道如何在同一次运行中重新运行失败的Junit测试。例如,运行测试1-5,然后在运行测试6时全部通过,并且第一次失败。然后它将再次自动运行第二次,然后再进行测试7.我使用的是运行所有测试的ant脚本。   测试在Hudson盒子上运行,如果这有帮助的话。我读到了能够选择失败的测试并将它们放在一个新的文件中,在第二次运行套装时它们运行,但那不是我想要的。

任何正确方向的帮助或指示都会有所帮助。谢谢。

<!-- ============================= -->
<!--   target: test-regression-all -->
<!-- ============================= -->
<!--
<target name="test-regression-all" description="Runs all tests tagged as regression" depends="compile">
    <mkdir dir="${target.reports.dir}"/>
    <junit printsummary="yes" haltonerror="no" haltonfailure="no" fork="yes"
               failureproperty="junit.failure" errorproperty="junit.error" showoutput="true">           
        <formatter type="xml"/>
        <classpath>
            <pathelement location="${target.build.classes.dir}"/>
            <path refid="classpath"/>
        </classpath>
        <batchtest todir="${target.reports.dir}">
           <fileset dir="${src.dir}">
              <include name="emailMarketing/AssetLibrary/*.java" />
              <include name="emailMarketing/attributes/*.java" />
              <include name="emailMarketing/contacts/*.java" />
              <include name="emailMarketing/DomainKeys/*.java" />
              <include name="emailMarketing/lists/*.java" />
              <include name="emailMarketing/messages/*.java" />
              <include name="emailMarketing/Segments/*.java" />
              <include name="emailMarketing/UploadContact/*.java" />
              <exclude name="emailMarketing/lists/ListArchive.java"/>
              <exclude name="emailMarketing/messages/MessageCreation.java" />
           </fileset>
        </batchtest>
        <jvmarg value="-Duser=${user}"/>
        <jvmarg value="-Dpw=${pw}"/>
        <jvmarg value="-Dbrowser=${browser}"/>
        <jvmarg value="-Dserver=${server}"/>
        <jvmarg value="-Dopen=${open}"/>
        <jvmarg value="-DtestType=regression"/>
    </junit>
    <junitreport todir="${target.reports.dir}">
        <fileset dir="${target.reports.dir}">
            <include name="TEST-*.xml"/>
        </fileset>
        <report todir="${target.reports.dir}"/>
    </junitreport>
    <fail if="junit.failure" message="Test(s) failed.  See reports!"/>
    <fail if="junit.error" message="Test(s) errored.  See reports!"/>
</target>

4 个答案:

答案 0 :(得分:3)

查看Ant Retry任务。

<target name="myTest1">
    <mkdir dir="${junit.output.dir}" />
    <retry retrycount="3">
      <junit haltonerror="yes" haltonfailure="yes" 
             fork="no" printsummary="withOutAndErr" 
             showoutput="true" tempdir="c:/tmp">
      <formatter type="xml" />
      <test name="MyPackage.myTest1" todir="${junit.output.dir}" />
      <classpath refid="Libs.classpath" />
      <formatter type="brief" usefile="false"/>
      </junit>
    </retry>
</target>

答案 1 :(得分:2)

测试应确定性,以便错误可重现。因此,立即重新运行失败的测试将再次失败。

测试应该独立,即每个人都应该自己设置(并且拆除)。对于junit,您通常没有执行测试的特定顺序。因此,没有必要重新运行test6来为test7设置环境。

如果您想要测试用例优先级划分,即在代码修复后重新运行测试时从失败的测试开始:

答案 2 :(得分:0)

答案 3 :(得分:0)

JUnit 1.8.0有一个junit的“失败”格式化程序,可以用来创建一个只包含失败测试的TestCase。见http://ant.apache.org/manual/Tasks/junit.html

The fourth formatter named failure (since Ant 1.8.0) collects all failing testXXX()
methods and creates a new TestCase which delegates only these failing methods.
The name and the location can be specified via Java System property or Ant property
ant.junit.failureCollector. The value has to point to the directory and the name of
the resulting class (without suffix). It defaults to java-tmp-dir/FailedTests.