zoukankan      html  css  js  c++  java
  • Ant批量处理jmeter脚本

    Ant是一个可以把代码从某个地方拿来,编译,再拷贝到某个地方去的构建工具。一时冲动学习一下,顺便王婆卖瓜尝试着处理jmeter的脚本,于是,采坑之旅也从此开始。本文省略ant安装步骤和ant脚本说明,直接写遇到的问题以及解决的方法。

    首先,谷歌"ant批量处理jmeter脚本",以贺满博客为主(其实写得都差不多)

    <?xml version="1.0" encoding="UTF-8"?>
    <project name="ant-jmeter-test" default="all" basedir=".">
      <!--为生成的jtl和html文件加时间戳-->
        <tstamp>
            <format property="time" pattern="yyyyMMddhhmm" />
        </tstamp>
       <!--更改为自己的jmeter路径-->
        <property name="jmeter.home" value="D:apache-jmeter-3.0_slave" />
       <!--更改为自己的jtl文件结果存放路径-->
        <property name="jmeter.result.jtl.dir" value="D:apache-jmeter-3.0_slaveapache-jmeter-3.0_slave" />
       <!--更改为自己的html文件结果存放路径-->
        <property name="jmeter.result.html.dir" value="D:apache-jmeter-3.0_slaveapache-jmeter-3.0_slave" />
        <!--生成的html报告的前缀-->
        <property name="ReportName" value="TestReport" />
       <!--jlt和html文件名称-->
        <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
        <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />
        
        <target name="all">
            <antcall target="test" />
            <antcall target="report" />
        </target>
        
        <target name="test">
            <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
            <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
           <!--改为自己的jmx文件所在路径-->
                <testplans dir="D:apache-jmeter-3.0_slaveapache-jmeter-3.0_slavein" includes="*.jmx" />
            </jmeter>
        </target>
        
        <target name="report">
         <!--使用jmeter自己的转化文件:将jtl转化为xsl文件,改为自己的xsl文件所在路径-->
            <xslt in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" />
            <copy todir="${jmeter.result.html.dir}">
                <fileset dir="${jmeter.home}/extras">
                    <include name="collapse.png" />
                    <include name="expand.png" />
                </fileset>
            </copy>
        </target>
    </project>
    build.xml

    初版大致如上,幸运指数100%的话,cmd进入ant目录,输入ant会直接生成如下图.html格式的测试报告

    不幸的话继续看:

    问题1:unexpected text “ ”

    解决办法:隐藏所有注释前面的空格

    问题2:jmeter-results-detail-report_21.xsl doesn’t exist

    解决办法:下载jmeter-results-detail-report_21源码,jmeter3.0没有这个文件,jmeter-results-detail-report_21和jmeter-results-detail-report是两个不同文件。将下载的源码格式从.xml改为.xsl,投机取巧直接改后缀就行,放在jmeterextras文件下

    问题3:测试报告NaN

    解决办法:从jmeter的lib包里复制一份xalan-2.7.2.jar和serializer-2.7.2.jar 到Ant的lib包,并且在build.xml添加如下代码

    <path id="xslt.classpath">
        <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
        <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
    </path>

    问题4:测试报告没有标题信息,添加如下代码,可能遇到的type param is undefined

    <xslt
    classpathref="xslt.classpath"
    force="true"
    in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
    <param name="dateReport" expression="${report.datestamp}"/>
    <param name="titleReport" expression="${report.title}${report.datestamp}"/>
    </xslt>

    解决方法:注意style标签结尾没有反斜杠

    最后,无比同情的恭喜你成功了

    build.xml完整如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project name="ant-jmeter-test" default="all" basedir=".">
    <!--为生成的jtl和html文件加时间戳-->
    <tstamp>
        <format property="time" pattern="yyyyMMddhhmm"/>
    </tstamp>
    <!--更改为自己的jmeter路径-->
    <property name="jmeter.home" value="D:apache-jmeter-3.0_slaveapache-jmeter-3.0_slave"/>
    <property name="report.title" value="XXXX接口测试"/>
    <!--更改为自己的jtl文件结果存放路径-->
    <property name="jmeter.result.jtl.dir" value="D:apache-jmeter-3.0_slaveapache-jmeter-3.0_slave"/>
    <!--更改为自己的html文件结果存放路径-->
    <property name="jmeter.result.html.dir" value="D:apache-jmeter-3.0_slaveapache-jmeter-3.0_slave"/>
    <!--生成的html报告的前缀-->
    <property name="ReportName" value="TestReport"/>
    <!--jlt和html文件名称-->
    <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl"/>
    <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html"/>
    
    <target name="all">
        <antcall target="test"/>
        <antcall target="report"/>
    </target>
    
    <path id="xslt.classpath">
        <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
        <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
    </path>
    
    <target name="test">
        <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/>
        <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
    <!--改为自己的jmx文件所在路径-->
            <testplans dir="D:apache-jmeter-3.0_slaveapache-jmeter-3.0_slavein" includes="0222TestT.jmx"/>
        </jmeter>
    </target>
    
    <target name="report">
        <tstamp> 
            <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/>
        </tstamp>
    <!--使用jmeter自己的转化文件:将jtl转化为xsl文件,改为自己的xsl文件所在路径-->
        <xslt 
            classpathref="xslt.classpath"
            force="true"
            in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
            <param name="dateReport" expression="${report.datestamp}"/>
            <param name="titleReport" expression="${report.title}${report.datestamp}"/>
            </xslt>
        <copy todir="${jmeter.result.html.dir}">
            <fileset dir="${jmeter.home}/extras">
                <include name="collapse.png"/>
                <include name="expand.png"/>
            </fileset>
        </copy>
    </target>
    </project>
    View Code

    注:批量处理jmeter脚本的话,只需改成includes="*.jmx"

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    补充说明:

    1.jmeter+ant生成html报告原理

    安装ant后,在jmeter的extras目录下,根据build.xml配置文件和官方提供的实例,执行ant命令即可生成Test.jtl文件和Test.html文件,其中.jtl文件内容需是xml格式

    注:jmeter聚合报告生成的.jtl文件内容是文本格式

    2.新建文件目录

    3.build.xml

    注:红线圈住的位置

    4.可能遇到的问题补充

    问题1:taskdef class org.programmerplanet.ant.taskdefs.jmeter.JMeterTask cannot be found

    解决办法:把ant-jmeter-1.0.9.jar放到ant的lib路径中

    问题2:*.jtl  don't exist

    解决办法:无解,重写

    <?xml version="1.0" encoding="UTF-8"?>
    <project name="ant-jmeter-test" default="all" basedir=".">
    <!--为生成的jtl和html文件加时间戳-->
    <tstamp>
        <format property="time" pattern="yyyyMMddhhmm"/>
    </tstamp>
    <!--更改为自己的jmeter路径-->
    <property name="jmeter.home" value="D:apache-jmeter-3.3"/>
    <property name="report.title" value="XXXX接口测试"/>
    <!--更改为自己的jtl文件结果存放路径-->
    <property name="jmeter.result.jtl.dir" value="D:apache-jmeter-3.3in	est_rao
    esultjtl"/>
    <!--更改为自己的html文件结果存放路径-->
    <property name="jmeter.result.html.dir" value="D:apache-jmeter-3.3in	est_rao
    esulthtml"/>
    <!--生成的html报告的前缀-->
    <property name="ReportName" value="TestReport"/>
    <!--jlt和html文件名称-->
    <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl"/>
    <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html"/>
    
    <target name="all">
        <antcall target="test"/>
        <antcall target="report"/>
    </target>
    
    <path id="xslt.classpath">
        <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
        <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
    </path>
    
    <target name="test">
        <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/>
        <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
    <!--改为自己的jmx文件所在路径-->
            <testplans dir="D:/apache-jmeter-3.3/bin/test_rao" includes="card2018.jmx"/>
            <property name="jmeter.save.saveservice.output_format" value="xml"/>
        </jmeter>
    </target>
    
    <target name="report">
        <tstamp> 
            <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/>
        </tstamp>
    <!--使用jmeter自己的转化文件:将jtl转化为xsl文件,改为自己的xsl文件所在路径-->
        <xslt 
            classpathref="xslt.classpath"
            force="true"
            in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
            <param name="dateReport" expression="${report.datestamp}"/>
            <param name="titleReport" expression="${report.title}${report.datestamp}"/>
            </xslt>
        <copy todir="${jmeter.result.html.dir}">
            <fileset dir="${jmeter.home}/extras">
                <include name="collapse.png"/>
                <include name="expand.png"/>
            </fileset>
        </copy>
    </target>
    </project>
    View Code

    运行结果:

    唉一言难尽,已经通过的脚本,换台电脑重新来过,bug bug bug......

    参考:http://blog.csdn.net/kaluman/article/details/74535495

    另使用shell生成html报告https://github.com/wang153723482/MyConfig/tree/master/jmeter/shell_jmeter

  • 相关阅读:
    PHP的几个常用加密函数
    sha1() 函数
    微信支付接口文档
    最强PostMan使用教程(1)
    用 Graphviz画神经网络图
    绘图工具graphviz学习使用
    maven添加oracle jdbc依赖
    httrack,webdup,WinHTTrack,WebZip
    过滤ASCII码中的不可见字符, ASCII三部分, 各控制字符详解, 去^@,^M
    报LinkageError的原因
  • 原文地址:https://www.cnblogs.com/Ryana/p/6438906.html
Copyright © 2011-2022 走看看