这篇日志的目的从标题里能够看出来。这也是我们实验须要,必须总结一下,方便其它师弟师妹在这个基础上做实验。
我已经介绍了非常多基于Kieker的监控方法,这里以Prefuse这个开源可视化Java框架为例,总结怎么基于JUnit和Ant实现对开源软件自带測试用例运行过程的监控。
在这个链接中,选择最新的版本号下载(Prefuse已经有些年头没更新了。只是这个框架确实还不错)。
解压之后用Eclipse打开其build.xml,发现这个项目的build.xml结构还比較奇葩。假设执行ant all,能够生成全部的class文件和JAR包(还得简单解决一下字符集的问题)。细致看一下,发现确实将全部代码编译了。可是build.xml里面没有target是关于測试的。我们注意到解压后有一个test目录。里面确实有些測试用例。比如这里:prefuse-beta est estprefuse的All_Prefuse_Tests.java,打开之后看到:import junit.framework.Test; 说明使用的是JUnit 3,随便找到一个JUnit 3的JAR包,放到lib文件夹下。然后我们就能够自己编译这些測试类了。
首先,我们自己在build.xml文件里添加一个target(须要相应地在build文件夹下建立一个testcase文件夹):
<target name="compile-testcase"> <javac classpath="lib/junit.jar:build/prefuse.jar:build/demos.jar" srcdir="test" destdir="build/testcase"/> </target>
这个target的详细配置非常easy,我就不介绍了。以下我们讲讲怎么用Kieker监控这些測试用例的运行。首先,像这篇日志里讲的这样:将”kieker-1.4″下”dist”目录下的”kieker-1.4.jar”和”lib”目录下的”aspectjweaver-1.6.11.jar”和”commons-logging-1.1.1.jar”三个jar包拷贝进解压后目录中的”lib”目录下。我们稍晚时候再说说META-INF目录的位置。
要实现监控事实上非常easy,我们新建一个target,名字随便起:
<target name="test2" depends="compile-testcase"> <junit printsummary="yes" errorProperty="test.failed" failureProperty="test.failed" fork="true" haltonfailure="yes"> <formatter type="plain"/> <jvmarg value="-XX:-UseSplitVerifier"/> <classpath path="lib/junit.jar:lib/commons-logging-1.1.1.jar:lib/kieker-1.4.jar:build/testcase:build/prefuse/classes:build/demos/classes"/> <jvmarg value="-javaagent:libaspectjweaver-1.6.11.jar"/> <test todir="test-results" name="test.prefuse.All_Prefuse_Tests"/> </junit> <fail message="Tests failed!" if="test.failed"/> </target>
这里有些细节我就不讲了,事实上都非常easy。
简单来讲,就是用aspectjweaver这个jar包做Javaagent,然后在classpath中包括kieker的jar包,以及測试类和被測试类。-XX:-UseSplitVerifier在这里使用的原因能够參看这篇日志。
须要指出的是,之前那篇日志里提到的META-INF目录,简单来讲,放到classpath中就能够。所以事实上我们放到build/demos/classes这种目录下即可(由于在上面target中已经将其包括到了classpath中),问题是,我们放到build.xml目录下能够吗?答案是能够的。将其放到解压后根目录下。然后再建立一个test-results目录(和这个相应:<test todir=”test-results”),执行ant test2,就能够看到測试用例的执行结果了。我们能够看到,执行了34个測试用例,当中fail了一个。同一时候也能够看到生成了监控数据。
最后总结一下META-INF这个问题。实践证明:在Windows系统中。在基于Ant运行Java class的时候,会自己主动将build.xml文件夹所在文件夹增加classpath,可是假设通过Java命令行,则须要增加“.”来增加当前文件夹。
可是。我又測试了一下在Mac OS X下的结果,发现必须增加“.”来增加当前文件夹,另外,Windows中路径的正反斜杠在Ant中我们能够。但在Mac OS X我们只能使用反斜杠“/”。这是一个小题外话,结论。
版权声明:本文博主原创文章。博客,未经同意不得转载。