Jmeter+Ant报告生成原理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/smj811504083/article/details/53157476

  Ant生成报告主要是build.xml,这里我们就来分析一下build.xml的结构

下面是一个完整的build.xml,然后我们来一句一句的详细解释

<?xml version="1.0" encoding="Gb2312"?>
build.xml中的第一句话,主要是编码格式
<project name="ant-jmeter-test" default="run" basedir=".">
ant的所有内容必须包含在这个里边,name是你给它取的名字,basedir故名思意就是工作的根目录 .代表当前目录。default代表默认要做的事情。
    <tstamp>
        <format property="time" pattern="yyyyMMddhhmm" />
    </tstamp>
定义的时间格式
    <property environment="env"/>
    <property name="ReportName" value="TestReport" />
    <property name="jmeter.home" value="D:\apache-jmeter-2.13\apache-jmeter-2.13" />
    <property name="jmeter.result.dir" value="${env.WORKSPACE}/results/${env.BUILD_ID}" />
    <!-- 生成的报告的前缀-->  
    <property name="jmeter.result.jtlName" value="${jmeter.result.dir}/${ReportName}.jtl" />
    <property name="jmeter.result.htmlName" value="${jmeter.result.dir}/${ReportName}.html" />
 property类似程序中的变量,为什么这么做想一下变量的作用   
    <target name="run">
        <echo message="start..."/>
        <antcall target="clean" />
        <antcall target="test" />
        <antcall target="report" />
    </target>
    把你想做的每一件事情写成一个target ,它有一个名字,depends是它所依赖的target,在执行这个target 例如这里的compile之前ant会先检查init是否曾经被执行过,如果执行  
过则直接直接执行compile,如果没有则会先执行它依赖的target例如这里的init,然后在执行这个target
如我们的计划  
编译:  
<target name="compile" depends="init">  
<javac srcdir="${src}" destdir="${dest}"/>  
</target>  
做jar包:  
<target name="build" depends="compile">  
<jar jarfile="${hello_jar}" basedir="${dest}"/>  
</target>  
运行:  
<target name="run" depends="build">  
<java classname="test.ant.HelloWorld" classpath="${hello_jar}"/>  
</target>  
为了不用拷贝,我们可以在最开始定义好目标文件夹,这样ant直接把结果就放在目标文件夹中了  
新建文件夹:  
<target name="init">  
<mkdir dir="${dest}"/>  
</target>  
为了更多一点的功能体现,又加入了两个target  
删除生成的文件  
<target name="clean">  
<delete dir="${dest}" />  
<delete file="${hello_jar}" />  
</target>  
再次运行,这里显示了如何在一个target里边调用其他的target  
<target name="rerun" depends="clean,run">  
<ant target="clean" />  
<ant target="run" />  
</target>  
好了,解释完成了,下边检验一下你的ant吧  
新建一个src的文件夹,然后把HelloWorld.java按照包目录放进去  
做好build.xml文件  
在命令行下键入ant ,你会发现一个个任务都完成了。每次更改完代码只需要再次键入ant  
有的时候我们可能并不想运行程序,只想执行这些步骤中的某一两个步骤,例如我只想重新部署而不想运行,键入  
ant build  
ant中的每一个任务都可以这样调用ant + target name  
好了,这样一个简单的ant任务完成了。 

    <target name="clean">
        <mkdir dir="${env.WORKSPACE}/results/${env.BUILD_ID}" />
    </target>
        
    <target name="test">
        <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
        <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
            <!-- 声明要运行的脚本"*.jmx"指包含此目录下的所有jmeter脚本-->
            <testplans dir="D:\apache-jmeter-2.13\apache-jmeter-2.13\bin\script" includes="*.jmx" />           
            <property name="jmeter.save.saveservice.output_format" value="xml"/>
        </jmeter>
    </target>
    
	<path id="xslt.classpath">
        <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
        <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
    </path>
	
    <target name="report">
        <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>
        <xslt 
		      classpathref="xslt.classpath"
		      in="${jmeter.result.jtlName}"
              out="${jmeter.result.htmlName}"
              style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" />

        <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 --> 
        <copy todir="${jmeter.result.dir}">
            <fileset dir="${jmeter.home}/extras">
                <include name="collapse.png" />
                <include name="expand.png" />
            </fileset>
        </copy>
    </target>
</project>


猜你喜欢

转载自blog.csdn.net/smj811504083/article/details/53157476