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_slave\apache-jmeter-3.0_slave" />
   <!--更改为自己的html文件结果存放路径-->
<property name="jmeter.result.html.dir" value="D:\apache-jmeter-3.0_slave\apache-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_slave\apache-jmeter-3.0_slave\bin" 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,投机取巧直接改后缀就行,放在jmeter\extras文件下

问题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_slave\apache-jmeter-3.0_slave"/>
<property name="report.title" value="XXXX接口测试"/>
<!--更改为自己的jtl文件结果存放路径-->
<property name="jmeter.result.jtl.dir" value="D:\apache-jmeter-3.0_slave\apache-jmeter-3.0_slave"/>
<!--更改为自己的html文件结果存放路径-->
<property name="jmeter.result.html.dir" value="D:\apache-jmeter-3.0_slave\apache-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_slave\apache-jmeter-3.0_slave\bin" 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>

注:批量处理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.3\bin\test_rao\result\jtl"/>
<!--更改为自己的html文件结果存放路径-->
<property name="jmeter.result.html.dir" value="D:\apache-jmeter-3.3\bin\test_rao\result\html"/>
<!--生成的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>

运行结果:

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

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

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

最新文章

  1. 121. Best Time to Buy and Sell Stock
  2. 不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板
  3. python+Eclipse+pydev环境搭建(转)
  4. 工作随笔——tar命令批量解压
  5. 对象导论 Thinking in Java 第一章
  6. Go实现线程池
  7. 从ASP.NET的web1子界面刷新打开web1的web0父界面
  8. Retrofit2 源码解析
  9. POJ 2446 Chessboard (二分图匹配)
  10. poj2392
  11. lazyload 图片延迟加载
  12. (转载)TRS的WCM6漏洞权限绕过以及绕过密码的登陆方式
  13. win7电脑自动关机怎么设置
  14. sealed 修饰符
  15. 读headFirst设计模式 - 策略模式
  16. 微信小程序,前端大梦想(六)
  17. 砸黑板! 正则表达式!!!re 模块
  18. 只用最适合的!全面对比主流 .NET 报表控件
  19. Java将数据按列写入Excel并设置格式(字体、背景色、自动列宽、对齐方式等)
  20. 老赵点滴地址:http://blog.zhaojie.me/2009/05/a-simple-actor-model-implementation.html

热门文章

  1. DNS tunnel的原理及实战
  2. 软件开发 —— 极限编程(XP:Extreme Programming)
  3. 用WPF做关于MEF 简单学习记录
  4. Wannafly挑战赛25 A 因子 数学
  5. windows下flink示例程序的执行
  6. anaconda 使用 及 tensorflow-gpu 安装
  7. NOIP2013T1 转圈游戏 快速幂
  8. DropDownListFor
  9. hihoCoder挑战赛32
  10. WordPress音乐主题Always1.8