接下来,如果尚未安装容器,可以使用 Cargo 来下载并安装一个特定的容器。为此,需要提供给 Cargo 一个下载 URL。一旦安装了容器,Cargo 也会允许使用配置选项 来对其进行配置。这些选项以名称-值对的形式存在。
最后,要介绍可部署资源 的概念,在我的例子中即 WAR 文件。请注意 EAR 文件也是一样的简单。
将这些概念记住,让我们来看一下可以用 Cargo 来完成什么任务。
Cargo 实践
本文中的例子涉及到在 Ant 中使用 Cargo,这就必需将之前定义的系统测试和 Cargo Ant 任务包装在一起。这些任务随后安装、启动、部署并停止容器。我们将首先进行安装设置,运行测试然后停止容器。
在 Ant 构建中使用 Cargo 所需的第一步是提供一个针对所有的 Cargo 任务的任务定义。这一步允许随后在构建文件中引用 Cargo 任务。应付这一步有很多的方法。清单 3 简单地装载了来自 Cargo JAR 文件中的属性文件的任务:
清单 3. 在 Ant 中装载所有的 Cargo 任务
<taskdef resource="cargo.tasks">
<classpath>
<pathelement location="${libdir}/${cargo-jar}"/>
<pathelement location="${libdir}/${cargo-ant-jar}"/>
</classpath>
</taskdef>
一但定义了 Cargo 的任务,真正的行动就开始了。清单 4 定义了下载、安装及启动 Tomcat 容器的 Cargo 任务。zipurlinstaller 任务将 Tomcat 从http://www.apache.org/dist/tomcat/tomcat-5/v5.0.28/bin/jakarta-tomcat-5.0.28.zip 中下载并安装到一个本地临时目录中。
清单 4. 下载并启动 Tomcat 5.0.28
<cargo containerId="tomcat5x" action="start"
wait="false" id="${tomcat-refid}">
<zipurlinstaller installurl="${tomcat-installer-url}"/>
<configuration type="standalone" home="${tomcatdir}">
<property name="cargo.remote.username" value="admin"/>
<property name="cargo.remote.password" value=""/>
<deployable type="war" file="${wardir}/${warfile}"/>
</configuration>
</cargo>
请注意要想如您所愿,从不同的任务中启动和停止一个容器,必需将容器同一个惟一的 id 联系起来,此 id 是 cargo 任务的 id="${tomcat-refid}"。
还要注意的是,Tomcat 的配置是在 cargo 任务内处理的。在 Tomcat 中,必需设置 username 和 password 属性。最后,使用 deployable 元素定义一个指向 WAR 文件的指针。
Cargo 属性
Cargo 任务中用到的所有属性都显示在清单 5 中。例如,tomcatdir 定义 Tomcat 将安装的两个位置中的一个。这个特别的位置是一个镜像结构,该位置将被实际下载并安装的 Tomcat 实例(在临时目录中找到的)所引用。tomcat-refid 属性则帮助将容器中惟一的实例与其镜像关联起来。
清单 5. Cargo 属性
<property name="tomcat-installer-url"
value="http://www.apache.org/dist/tomcat/tomcat-5/v5.0.28/bin/
jakarta-tomcat-5.0.28.zip"/>
<property name="tomcatdir" value="target/tomcat"/>
<property name="tomcat.username" value="admin"/>
<property name="tomcat.passwrd" value=""/>
<property name="wardir" value="target/war"/>
<property name="warfile" value="words.war"/>
<property name="tomcat-refid" value="tmptmct01"/>
为停止一个容器,可以定义一个引用 tomcat-refid 属性的任务,如清单 6 所示。
清单 6. 按 Cargo 方式停止容器
<cargo containerId="tomcat5x" action="stop"
refid="${tomcat-refid}"/>
用 Cargo 封装
清单 7 将 清单 4 和清单 6 中的代码联合起来,用两个 Cargo 任务封装了一个测试目标:一个用于启动 Tomcat,另一个用于停止 Tomcat。antcall 任务调用在清单 8 中定义的名为 _run-system-tests 的目标。
清单 7. 用 Cargo 封装测试目标
<target name="system-test" if="Junit.present"
depends="init,junit-present,compile-tests,war">
<cargo containerId="tomcat5x" action="start"
wait="false" id="${tomcat-refid}">
<zipurlinstaller installurl="${tomcat-installer-url}"/>
<configuration type="standalone" home="${tomcatdir}">
<property name="cargo.remote.username" value="admin"/>
<property name="cargo.remote.password" value=""/>
<deployable type="war" file="${wardir}/${warfile}"/>
</configuration>
文章来源于领测软件测试网 https://www.ltesting.net/