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

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

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project name="ant-jmeter-test" default="all" basedir=".">
  3.   <!--为生成的jtl和html文件加时间戳-->
  4. <tstamp>
  5. <format property="time" pattern="yyyyMMddhhmm" />
  6. </tstamp>
  7.    <!--更改为自己的jmeter路径-->
  8. <property name="jmeter.home" value="D:\apache-jmeter-3.0_slave" />
  9.    <!--更改为自己的jtl文件结果存放路径-->
  10. <property name="jmeter.result.jtl.dir" value="D:\apache-jmeter-3.0_slave\apache-jmeter-3.0_slave" />
  11.    <!--更改为自己的html文件结果存放路径-->
  12. <property name="jmeter.result.html.dir" value="D:\apache-jmeter-3.0_slave\apache-jmeter-3.0_slave" />
  13. <!--生成的html报告的前缀-->
  14. <property name="ReportName" value="TestReport" />
  15.    <!--jlt和html文件名称-->
  16. <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
  17. <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />
  18.  
  19. <target name="all">
  20. <antcall target="test" />
  21. <antcall target="report" />
  22. </target>
  23.  
  24. <target name="test">
  25. <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
  26. <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
  27.        <!--改为自己的jmx文件所在路径-->
  28. <testplans dir="D:\apache-jmeter-3.0_slave\apache-jmeter-3.0_slave\bin" includes="*.jmx" />
  29. </jmeter>
  30. </target>
  31.  
  32. <target name="report">
  33.      <!--使用jmeter自己的转化文件:将jtl转化为xsl文件,改为自己的xsl文件所在路径-->
  34. <xslt in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" />
  35. <copy todir="${jmeter.result.html.dir}">
  36. <fileset dir="${jmeter.home}/extras">
  37. <include name="collapse.png" />
  38. <include name="expand.png" />
  39. </fileset>
  40. </copy>
  41. </target>
  42. </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添加如下代码

  1. <path id="xslt.classpath">
  2. <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
  3. <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
  4. </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完整如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project name="ant-jmeter-test" default="all" basedir=".">
  3. <!--为生成的jtl和html文件加时间戳-->
  4. <tstamp>
  5. <format property="time" pattern="yyyyMMddhhmm"/>
  6. </tstamp>
  7. <!--更改为自己的jmeter路径-->
  8. <property name="jmeter.home" value="D:\apache-jmeter-3.0_slave\apache-jmeter-3.0_slave"/>
  9. <property name="report.title" value="XXXX接口测试"/>
  10. <!--更改为自己的jtl文件结果存放路径-->
  11. <property name="jmeter.result.jtl.dir" value="D:\apache-jmeter-3.0_slave\apache-jmeter-3.0_slave"/>
  12. <!--更改为自己的html文件结果存放路径-->
  13. <property name="jmeter.result.html.dir" value="D:\apache-jmeter-3.0_slave\apache-jmeter-3.0_slave"/>
  14. <!--生成的html报告的前缀-->
  15. <property name="ReportName" value="TestReport"/>
  16. <!--jlt和html文件名称-->
  17. <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl"/>
  18. <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html"/>
  19.  
  20. <target name="all">
  21. <antcall target="test"/>
  22. <antcall target="report"/>
  23. </target>
  24.  
  25. <path id="xslt.classpath">
  26. <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
  27. <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
  28. </path>
  29.  
  30. <target name="test">
  31. <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/>
  32. <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
  33. <!--改为自己的jmx文件所在路径-->
  34. <testplans dir="D:\apache-jmeter-3.0_slave\apache-jmeter-3.0_slave\bin" includes="0222TestT.jmx"/>
  35. </jmeter>
  36. </target>
  37.  
  38. <target name="report">
  39. <tstamp>
  40. <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/>
  41. </tstamp>
  42. <!--使用jmeter自己的转化文件:将jtl转化为xsl文件,改为自己的xsl文件所在路径-->
  43. <xslt
  44. classpathref="xslt.classpath"
  45. force="true"
  46. in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
  47. <param name="dateReport" expression="${report.datestamp}"/>
  48. <param name="titleReport" expression="${report.title}${report.datestamp}"/>
  49. </xslt>
  50. <copy todir="${jmeter.result.html.dir}">
  51. <fileset dir="${jmeter.home}/extras">
  52. <include name="collapse.png"/>
  53. <include name="expand.png"/>
  54. </fileset>
  55. </copy>
  56. </target>
  57. </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

解决办法:无解,重写

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project name="ant-jmeter-test" default="all" basedir=".">
  3. <!--为生成的jtl和html文件加时间戳-->
  4. <tstamp>
  5. <format property="time" pattern="yyyyMMddhhmm"/>
  6. </tstamp>
  7. <!--更改为自己的jmeter路径-->
  8. <property name="jmeter.home" value="D:\apache-jmeter-3.3"/>
  9. <property name="report.title" value="XXXX接口测试"/>
  10. <!--更改为自己的jtl文件结果存放路径-->
  11. <property name="jmeter.result.jtl.dir" value="D:\apache-jmeter-3.3\bin\test_rao\result\jtl"/>
  12. <!--更改为自己的html文件结果存放路径-->
  13. <property name="jmeter.result.html.dir" value="D:\apache-jmeter-3.3\bin\test_rao\result\html"/>
  14. <!--生成的html报告的前缀-->
  15. <property name="ReportName" value="TestReport"/>
  16. <!--jlt和html文件名称-->
  17. <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl"/>
  18. <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html"/>
  19.  
  20. <target name="all">
  21. <antcall target="test"/>
  22. <antcall target="report"/>
  23. </target>
  24.  
  25. <path id="xslt.classpath">
  26. <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
  27. <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
  28. </path>
  29.  
  30. <target name="test">
  31. <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/>
  32. <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
  33. <!--改为自己的jmx文件所在路径-->
  34. <testplans dir="D:/apache-jmeter-3.3/bin/test_rao" includes="card2018.jmx"/>
  35. <property name="jmeter.save.saveservice.output_format" value="xml"/>
  36. </jmeter>
  37. </target>
  38.  
  39. <target name="report">
  40. <tstamp>
  41. <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/>
  42. </tstamp>
  43. <!--使用jmeter自己的转化文件:将jtl转化为xsl文件,改为自己的xsl文件所在路径-->
  44. <xslt
  45. classpathref="xslt.classpath"
  46. force="true"
  47. in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
  48. <param name="dateReport" expression="${report.datestamp}"/>
  49. <param name="titleReport" expression="${report.title}${report.datestamp}"/>
  50. </xslt>
  51. <copy todir="${jmeter.result.html.dir}">
  52. <fileset dir="${jmeter.home}/extras">
  53. <include name="collapse.png"/>
  54. <include name="expand.png"/>
  55. </fileset>
  56. </copy>
  57. </target>
  58. </project>

运行结果:

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

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

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

Ant批量处理jmeter脚本的更多相关文章

  1. ant批量执行Jmeter脚本

    JDK,Jmeter默认已经装了 ANT下载:http://ant.apache.org/bindownload.cgi ant环境变量需要配置 ant_home,你解压之后的地址 然后PATH环境变 ...

  2. 【jmeter】ANT批量执行Jmeter脚本

    一.环境准备: 1.Jdk1.6或以上:命令行输入:java -version,出现如下提示说明安装成功 2.ANT下载:http://ant.apache.org/bindownload.cgi 命 ...

  3. Ant 批量执行jmeter 脚本

    一.环境准备: 1.Jdk1.6或以上:http://www.oracle.com/technetwork/java/javase/downloads/index.html 命令行输入:java -v ...

  4. ant批量运行Jmeter脚本遇到 Content is not allowed in prolog.问题及解决方案

    在执行 最后生成报告的 task 时,一直报下面这个错: TransformerException,  Content is not allowed in prolog. 解决方法:需要修改jmete ...

  5. 转:通过ant来批量执行jmeter脚本,并生成报告(附: 生成报告时报“Content is not allowed in prolog”这个错误的解决方案)

    最近在使用jmeter写脚本来进行测试,最终写了很多份脚本,然后,就在想,这么多脚本,我不可能一个一个的手动去点啊,有没有什么办法来批量运行Jmeter脚本呢? 这个时候,自然而然地想到了万能的ant ...

  6. 性能测试培训:批量执行Jmeter脚本之ant调用

    性能测试培训:批量执行Jmeter脚本之ant调用   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的load ...

  7. Ant 与jemter的结合--批量执行jmeter脚本

    一.Ant 介绍&作用: Apache Ant,是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发. 作用:打包,部署,运行Java工程 二.下 ...

  8. Linux shell 批量运行jmeter脚本

    第一版,这些代码有点问题,需要继续更改 #!/bin/bash jmxpath= reportpath= timestamp=$(date +%Y%m%d_%H%M%S) echo timestamp ...

  9. Jmeter+Ant+Jenkins接口自动化测试(二)_测试方案设计及jmeter脚本开发

    前言 根据之前部署好的测试环境,进行接口自动化测试的方案设计及Jmeter脚本开发.测试方案设计过程中采用了数据分离和对象分离等思路,因此直接通过特定的测试用例文档来驱动整个自动化接口测试的执行,相关 ...

随机推荐

  1. Local Response Normalization作用——对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力

    AlexNet将LeNet的思想发扬光大,把CNN的基本原理应用到了很深很宽的网络中.AlexNet主要使用到的新技术点如下. (1)成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过 ...

  2. Java攻城狮之基础练习题------经典例题

    (一)键盘录入1----7,分别于控制台输出对应的周一,周二,周三,周四,周五,周六,周天. (二)设置一个数组,求出数组中对应的最大值以及索引. (三)在控制台输出9x9乘法口诀表. (四)使用冒泡 ...

  3. 如何用jQuery实现div随鼠标移动而移动?(详解)----2017-05-12

    重点是弄清楚如何获取鼠标现位置与移动后位置,div现在位置与移动后位置: 用jQuery实现div随鼠标移动而移动,不是鼠标自身的位置!!而是div相对于之前位置的移动 代码如下:(注意看绿色部分的解 ...

  4. NFine平台去掉平台介绍页面出现的一系列问题

    1.去掉平台介绍页面要做的操作:数值Index页面的下面两处内容 2.注释掉以上两处内容后出现的问题:•当打开多个页面后,最先打开的第一个页面(如下图1的位置)点击×号不能关闭页面:•当打开多个页面后 ...

  5. 2.Ventuz Designer常用工具介绍

    Ventuz Designer常用工具介绍 1.  打开Ventuz Designer 图1.1 2.  Ventuz Designer第一个界面 图2.1 Recent Projects:最近创建的 ...

  6. 利用JavaScript的%读分秒

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  7. oracle 表锁定解锁

    Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容.(1)锁表查询的代码有以下的形式:select count( ...

  8. oracle 编译包的时候,一直提示正在编译

    select b.sid,b.serial#,b.machine,b.terminal,b.program,b.process,b.status from v$lock a , v$session b ...

  9. MD5加盐,实现一人一密

    理论上md5是不可逆的,而且MD5本来也不是作加密使用,而是用来校验数据的完整性,只是因为其不可逆且稳定.快速的特点,被广泛用于对明文密码的加密. 至今仍然后很多开发人员相信MD5的保密性,也许因为他 ...

  10. (转)Bootstrap 之 Metronic 模板的学习之路 - (7)GULP 前端自动化工具

    https://segmentfault.com/a/1190000006738327 初步了解 Metronic 的结构和应用后,我们就可以在项目中应用起来了.考虑到实际项目应用时,会有很多文件需要 ...