软件测试软件测试软件测试职业探索

Jmeter+ant 报告优化

2018-07-20  本文已影响6人  粥一样温柔

最近在做接口测试,对之前的ant的build文档做了进一步优化,配置了自动发送报告邮件,提供了测试报告的详细模板(包含request和response的详细信息),分享给大家。
其中生成详细测试报告需要下载 jmeter.results.shanhe.me.xsl至jmeter\extras 目录下
发送邮件需要下载javax.mail-1.4.4.jar依赖包至ant的lib文件夹下

<?xml version="1.0" encoding="GB2312"?>
<project name="ant-jmeter-test" default = "run">
    <description>
        This is jmeter build
    </description>
    <tstamp>
        <format property="time" pattern="yyyyMMddhhmm" />
    </tstamp>

    <!-- jmeter目录 -->
    <property name="jmeter.home" Value ="F:\apache-jmeter-3\apache-jmeter-3.2"/>
    <property name="jmeter.basedir" Value ="${jmeter.home}\extras"/>

    <!-- 需要执行的jmx文件,多个文件逗号隔开 -->
    <property name="execut.dir" Value ="${jmeter.home}\script"/>
    <property name="execut.jmx" Value ="News.jmx"/>

   <!-- 邮件配置 -->
   <property name="mail.host" Value ="smtp.mxhichina.com"/>
   <property name="mail.port" Value ="25"/>
   <property name="mail.sender" Value ="123@123.com"/>
   <property name="mail.sender.password" Value ="密码"/>
   <property name="mail.to" Value ="123@123.com"/>
   <property name="mail.title" Value ="接口测试报告"/>
   
   <!--生成测试报告的文件名及路径-->
   <property name="jmeter.result" Value ="${jmeter.home}\result"/>
   <property name="jmeter.report.name" Value ="JmeterReport"/>
   <property name="jmeter.result.jtlName" value="${jmeter.result}\${jmeter.report.name}.jtl" />
   <property name="jmeter.result.htmlName1" value="${jmeter.result}\${jmeter.report.name}${time}-detail.html" />
   <property name="jmeter.result.htmlName2" value="${jmeter.result}\${jmeter.report.name}${time}-simple.html" />
    
    
    <!--申明jmeter按序执行的target-->
    <target name="run">
        <echo message ="jmeter start..."/>
        <antcall target="init"/>
        <antcall target="copy-images"/>
        <antcall target="report-detail"/>
        <antcall target="report-simple"/>
        <antcall target="sendEmail"/>
        <antcall target="sendErrorEmail"/>
    </target>
    

    <!--生成测试结果的中间产物 .jtl文件-->
    <target name="init">
        <!-- 每次执行先删除.jtl文件,不然会将这次的报告累加上一次报告 -->
        <delete file="${jmeter.result.jtlName}"/>
        <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
        <jmeter jmeterhome="${jmeter.home}" jmeterproperties="${jmeter.home}\bin\jmeter.properties" resultlog="${jmeter.result.jtlName}">
            <testplans dir="${execut.dir}" includes="${execut.jmx}" />
            <property name="jmeter.save.saveservice.output_format" value="xml"/>
        </jmeter>
    </target>

    <!-- 手动复制html文件需要的图标  expand.png展开图标  collapse.png收起图标-->
    <target name="copy-images">
        <copy file="${jmeter.basedir}\expand.png" tofile="${jmeter.result}\expand.png"/>
        <copy file="${jmeter.basedir}\collapse.png" tofile="${jmeter.result}\collapse.png"/>
    </target>
    
    <!-- 获取生成测试报告的jar包 -->
    <path id="xslt.classpath">
            <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
            <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
    </path>
    
    <!--判断执行init后.jtl文件是否生成-->
    <target name="jtl-check">
    <condition property="jtl-not-null">
        <and>
            <available file="${jmeter.result.jtlName}"/>
        </and>
    </condition>
    </target>


    <!--生成详细的测试结果文件-->
    <!--需要下载 jmeter.results.shanhe.me.xsl 放在 extras 目录 ,打开 jmeter.properties 中 jmeter.save.saveservice.* 开头的配置 并将值设置为true-->
    <target name="report-detail" depends="jtl-check" if="jtl-not-null">
        <tstamp> 
                <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" />
        </tstamp>
        <xslt 
            classpathref="xslt.classpath"
            force="true"
            in="${jmeter.result.jtlName}"
            out="${jmeter.result.htmlName1}"
            style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
            <param name="dateReport" expression="${report.datestamp}"/>
        </xslt>
    </target>
    
    <!--生成简要的测试结果文件-->
    <target name="report-simple" depends="jtl-check" if="jtl-not-null">
        <tstamp>
                <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" />
        </tstamp>
        <xslt 
            classpathref="xslt.classpath"
            force="true"
            in="${jmeter.result.jtlName}"
            out="${jmeter.result.htmlName2}"
            style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
            <param name="dateReport" expression="${report.datestamp}"/>
        </xslt>
    </target>

    <!--jmeter生成测试报告成功,则发送邮件及测试报告-->
    <target name="sendEmail" depends="jtl-check" if="jtl-not-null">
        <mail mailhost="${mail.host}" mailport="${mail.port}" user="${mail.sender}"  password="${mail.sender.password}" ssl="false"  from="${mail.sender}"
              subject="${mail.title}" messagemimetype="text/html" tolist="${mail.to}">
            <fileset dir="${jmeter.result}">
                <include name="${jmeter.report.name}${time}-simple.html"/>
                <include name="${jmeter.report.name}${time}-detail.html"/>
                <include name="${jmeter.report.name}.jtl"/>
            </fileset>
           <message>jmeter-build-success</message>
        </mail>
     </target>

     <!--jmeter生成测试报告失败,则发送告知失败的邮件-->
    <target name="sendErrorEmail"  depends="jtl-check" unless="jtl-not-null">
        <mail mailhost="${mail.host}" mailport="${mail.port}" user="${mail.sender}"  password="${mail.sender.password}" ssl="false"  from="${mail.sender}"
              subject="${mail.title}" messagemimetype="text/html" tolist="${mail.to}">
           <message>jmeter-build-fail</message>
        </mail>
     </target>

</project>

上一篇 下一篇

猜你喜欢

热点阅读