一
下載並解壓縮cactus
下載地址為
將cactus的lib目錄下的cactus
ant
jar復制到ant的lib目錄
二
配置cactus
cactus的配置很簡單
新建一個cactus
properties文件
並把它放在ant腳本中的cactus任務的classpath下
文件中包括如下內容
cactus
sysproperties=ntextURL
#cactus
sample
servlet
cactified就是你的測試應用所在路徑
是端口號
ntextURL =//localhost:
/cactus
sample
servlet
cactified
cactus
servletRedirectorName = ServletRedirector
cactus
jspRedirectorName = JspRedirector
cactus
filterRedirectorName = FilterRedirector
具體的做法結合ant腳本再進一步解釋
三
運行ant腳本
ant腳本主要執行以下任務
設定classpath
<path id=
project
classpath
>
<fileset dir=
${lib
dir}
>
<include name=
*
jar
/>
</fileset>
<!
cactus
properties文件就需要放在lib
dir所對應的路徑中
>
<pathelement location=
${lib
dir}
/>
<pathelement location=
${tomcat
home}/common/lib/jsp
api
jar
/>
<pathelement location=
${tomcat
home}/common/lib/servlet
api
jar
/>
</path>
定義相關任務
<taskdef resource=
cactus
tasks
classpat/>
<taskdef name=
runservertests
classname=
org
apache
cactus
integration
ant
RunServerTestsTask
>
<classpath>
<path refid=
project
classpath
/>
</classpath>
</taskdef>
編譯應用的類文件和測試的類文件
打包整個應用為war文件
需要注意的是
不僅要打包應用類
測試類也要打包
<target name=
war
depends=
compile
java
description=
Generate the runtime war
>
<war warfile=
${target
dir}/${project
name}
war
webxml=
${src
webapp
dir}/WEB
INF/web
xml
>
<fileset dir=
${src
webapp
dir}
>
<exclude name=
cactus
report
xsl
/>
<exclude name=
WEB
INF/cactus
web
xml
/>
<exclude name=
WEB
INF/web
xml
/>
</fileset>
<classes dir=
${target
classes
java
dir}
/>
<!
別忘了打包測試類
>
<classes dir=
${target
classes
test
dir}
/>
<!
別忘了打包各種相關的jar文件
>
< lib dir=
project
classpath
/>
</war>
</target>
在應用的web
xml文件中添加測試所需的各種映射
cactus提供了兩個task來完成這個工作
CactifyWar和WebXmlMerge
CactifyWar的功能是自動在已經打包的應用的web
xml文件中添加所需的映射
WebXmlMerge是提供合並兩個web
xml文件的功能
<target name=
test
prepare
depends=
war
compile
cactus
test
prepare
logging
>
<!
Cactify the web
app archive
>
<cactifywar srcfile=
${target
dir}/${project
name}
war
destfile=
${tomcat
home}/webapps/${project
name}
cactified
war
>
<classes dir=
${target
classes
java
dir}
/>
<classes dir=
${target
classes
test
dir}
/>
<lib dir=
project
classpath
/>
</cactifywar>
</target>
運行測試
cactus提供了cactus和RunServerTests兩個task來運行測試
cactus
task是通過復制容器服務器的最小文件並運行來運行測試
因此需要制定容器服務器的類型
啟動速度稍快點
另外配置比較方便
但是無法測試象tomcat連接池等資源
另外對tomcat
的支持也不好
RunServerTests
是通過直接啟動容器服務起來運行測試
因此速度稍慢
且配置較麻煩
但能測試各種資源
<target name=
test
depends=
test
prepare
description=
Run tests on Tomcat
>
<!
Start the servlet engine
wait for it to be started
run the
unit tests
stop the servlet engine
wait for it to be stopped
The servlet engine is stopped if the tests fail for any reason
>
<!
是服務器的端口號
${project
name}
cactified是項目的路徑
和上一步的cactifywar 的destfile相對應
>
<runservertests
testURL=//localhost:
/${project
name}
cactified/ServletRedirector?Cactus_Service=RUN_TEST
startTarget=
_StartTomcat
stopTarget=
_StopTomcat
testTarget=
_Test
/>
</target>
<!
_Test就是一個普通的junit任務
>
<target name=
_Test
>
<junit printsummary=
yes
fork=
yes
>
<classpath>
<path refid=
project
classpath
/>
<pathelement location=
${target
classes
java
dir}
/>
<pathelement location=
${target
classes
test
dir}
/>
</classpath>
<formatter type=
brief
usefile=
false
/>
<formatter type=
xml
/>
<batchtest>
<fileset dir=
${src
test
dir}
>
<!
Due to some Cactus synchronization bug
the
unit
tests need
to run before the
sample
tests
>
<include name=
**/Test*
java
/>
<exclude name=
**/Test*All
java
/>
</fileset>
</batchtest>
</junit>
</target>
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28518.html