我的构建脚本配置了多个测试文件夹,每个文件夹包含数百个测试用例。 junit任务在每个文件夹上执行.'haltonfailure'和'haltonerror'设置为false,以便在失败的情况下继续执行。
但是,一旦从该文件夹执行所有测试用例,构建就会停止(由于某些测试从该文件夹失败),并且不会继续执行剩余文件夹中的测试。 所以我要找的是,无论测试失败发生在哪个文件夹,剩余文件夹中的测试用例也应该被执行。
我该怎么做(假设我必须保留多个测试文件夹结构)?
以下是我的相关蚂蚁脚本:
<target name="test">
<junit_tests />
<antcall target="generatetxtreport"/>
<antcall target="generatexmlreport"/>
<fail message="folder1 test(s) failed" if="junit.folder1.failed"/>
<fail message="folder2 test(s) failed" if="junit.folder2.failed"/>
<fail message="folder3 test(s) failed" if="junit.folder3.failed"/>
<fail message="folder4 test(s) failed" if="junit.folder4.failed"/>
<fail message="folder1 test(s) error" if="junit.folder1.error"/>
<fail message="folder2 test(s) error" if="junit.folder2.error"/>
<fail message="folder3 test(s) error" if="junit.folder3.error"/>
<fail message="folder4 test(s) error" if="junit.folder4.error"/>
</target>
<macrodef name="junit_tests">
<sequential>
<junit_test testfolder="folder1"/>
<junit_test testfolder="folder2"/>
<junit_test testfolder="folder3"/>
<junit_test testfolder="folder4"/>
</sequential>
</macrodef>
<macrodef name="junit_test">
<attribute name="testfolder"/>
<attribute name="testMode" default="once"/>
<sequential>
<junit printsummary="true"
haltonfailure="false"
haltonerror="false"
fork="on"
forkmode="@{testMode}"
failureproperty="junit.@{testfolder}.failed"
errorproperty="junit.@{testfolder}.error"
showoutput="false"
outputtoformatters="true">
<formatter type="brief" usefile="false"/>
<formatter type="xml"/>
<classpath>
<path refid="some.classpath"/>
</classpath>
<batchtest todir="some.dir">
<fileset dir="some.root\@{testfolder}\">
<include name="**/Test*.class"/>
</fileset>
</batchtest>
</junit>
</sequential>
</macrodef>
答案 0 :(得分:0)
我认为你的所有测试都在运行,但是你的第一个显式fail
正在退出,即
<fail message="folder1 test(s) failed" if="junit.folder1.failed"/>
Ant不会继续失败,因此您无法使用这些语句打印所有结果。
以下是使用ant:if
(Ant 1.9.3+)并将fail
块更改为条件echo
的方法,您可以通过这种方式实现我的想法。块。
<project name="test" default="test" xmlns:if="ant:if" xmlns:unless="ant:unless">
<target name="test">
<junit_tests />
<condition property="junit.overall.failed">
<or>
<istrue value="${junit.folder1.failed}"/>
<istrue value="${junit.folder2.failed}"/>
</or>
</condition>
<condition property="junit.overall.error">
<or>
<istrue value="${junit.folder1.error}"/>
<istrue value="${junit.folder2.error}"/>
</or>
</condition>
<echo message="folder folder1 test(s) failed" if:true="${junit.folder1.failed}"/>
<echo message="folder folder2 test(s) failed" if:true="${junit.folder2.failed}"/>
<echo message="folder folder1 test(s) error" if:true="${junit.folder1.error}"/>
<echo message="folder folder2 test(s) error" if:true="${junit.folder2.error}"/>
<fail message="some tests had errors" if="junit.overall.error"/>
<fail message="some tests failed" if="junit.overall.failed"/>
</target>