<antcall target="_run-system-tests"/>
<cargo containerId="tomcat5x" action="stop"
refid="${tomcat-refid}"/>
</target>
清单 8 定义测试目标,称作 _run-system-tests。请注意此任务只 运行置于 test/system 目录下的系统测试。例如,清单 2 中定义的测试用例就位于这个目录下。
清单 8. 通过 Ant 运行 JUnit
<target name="_run-system-tests">
<mkdir dir="${testreportdir}"/>
<junit dir="./" failureproperty="test.failure"
printSummary="yes" fork="true"
haltonerror="true">
<sysproperty key="basedir" value="."/>
<formatter type="xml"/>
<formatter usefile="false" type="plain"/>
<classpath>
<path refid="build.classpath"/>
<pathelement path="${testclassesdir}"/>
<pathelement path="${classesdir}"/>
</classpath>
<batchtest todir="${testreportdir}">
<fileset dir="test/system">
<include name="**/**Test.java"/>
</fileset>
</batchtest>
</junit>
</target>
在 清单 7 中,完整地配置了 Ant 构建文件,从而将系统测试与 Cargo 部署封装在一起。清单 7 中的代码确保了清单 8 中 test/system 目录下的所有系统测试都是逻辑上可重复的。可以在任何时间里在任何机器上运行这些系统测试,对于连续集成环境尤佳。该测试对容器未做任何假设 —— 未对位置做假设,甚至未对其是否运行做假设!(当然,这些测试仍做了一个假设,我没有强调,即潜在的数据库是配置良好且在运行中的。但那又是另一个要讨论的主题了。)
可重复的结果
在清单 9 中,可以看到工作的成果。当将 system-test 命令发布到 Ant 构建后,就会执行系统测试。Cargo 处理管理所选容器的所有细节,不需要对测试环境作出绝对重复性假设。
清单 9. 增强的构建
war:
[war] Building war: C:\dev\projects\acme\target\widget.war
system-test:
_run-system-tests:
[mkdir] Created dir: C:\dev\projects\acme\target\test-reports
[junit] Running test.come.acme.widget.Web.RepeatableWordCreationTest
[junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 4.53 sec
[junit] Testcase: testWordCreation took 4.436 sec
BUILD SUCCESSFUL
Total time: 1 minute 2 seconds
请记住,Cargo 也在 Maven 构建中起作用。另外,从正常的应用程序到测试用例,Cargo Java API 都有助于容器的程序化管理。且 Cargo 不仅适用于 JUnit(尽管样例代码是用 JUnit 写的),TestNG 用户将会很高兴地了解到 Cargo 对其测试套件也起作用。事实上,测试用什么编写并不重要,重要的是将它们同 Cargo 封装起来,容器管理问题就会迎刃而解!
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/