目的:

通过ant一键执行一个或多个jmeter脚本,并批量生成html格式的报告。

工具简介:

jdk:包含java开发工具包(Java Development Kit)和java运行环境(jre),因jmeter是java开发,故需要安装jdk。

ant:一个自动化工具,通过配置文件,执行一些重复性的任务。

jmeter:性能测试工具,java语言开发。官方提供了与ant结合的jar包,可在ant的配置文件直接使用。

在XX目录下打开命令提示行:在windows中,在XX目录下,按住shift,在空白处点击右键,即可看到在此处打开命令窗口。或者运行cmd后,cd到XX目录。

环境变量修改以后记得要打开新的cmd窗口才会生效。

1.安装环境

windows 7(所有工具均支持linux,故linux也可以)

2.安装软件

  • jdk1.6
  • jmeter2.13
  • ant1.9.6

安装以上软件,并配置环境变量(配置环境变量请自行搜索)。打开命令提示行,验证是否安装正确。

验证java

C:\>Java -version
java version "1.6.0_06"
Java(TM) SE Runtime Environment (build 1.6.0_06-b02)
Java HotSpot(TM) Client VM (build 10.0-b22, mixed mode, sharing)

验证jmeter

C:\>jmeter -v
Copyright (c) 1998-2015 The Apache Software Foundation
Version 2.13 r1665067

验证ant

C:\>ant -version
Apache Ant(TM) version 1.9.6 compiled on June 29 2015
 

3.集成

需要在ant中新建一个执行jmeter的task,而jmeter已经包含了一个这样的jar包,将JMETER_HOME/extras/ant-jmeter-1.1.1.jar 放入 ANT_HOME/lib 下。
另外,jmeter也提供了一个ant的build.xml示例,但是仅能执行一个jmeter脚本,我们需要修改。
先用jmeter的这个示例体验一把,在JMETER_HOME/extras下打开命令提示行,输入ant,然后回车。

如果最后能看到输出的 BUILD SUCCESSFUL 的字样,说明已经执行成功,另外也能看到在当前目录生成的Test.jtl和Test.html文件。其中html就是这样:
Image.png

4.ant配置

主要是 build.xml ,jmeter提供的示例不能满足要求。需要满足以下条件:

  • 执行指定目录下的所有jmeter脚本
  • 保存脚本执行结果
  • 根据执行结果解析成html报告,并保存到指定目录

关于ant的配置这里不再详述,另起一篇文章记录关于ant的使用。乌鸦的build.xml文件

需要修改build.xml中的几个配置

    <property name="user_home" value="D:\work\testing\jmeter_ant3" /><!-- 当前的工作目录 -->
    <property name="jmeter.home" value="C:\Program Files\apache-jmeter-2.13" /><!-- JMeter 安装目录 -->
    <property name="dir_jmx" value="${user_home}/jmx" /><!-- jmx的存放目录 -->
    <property name="dir_jtl" value="${user_home}/jtl" /><!-- jtl的存放目录,如不存在则自动创建 -->
    <property name="dir_html" value="${user_home}/html" /><!-- html报告的存放目录,如不存在则自动创建 -->
    <property name="xsl_name" value="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" /><!-- xsl文件的路径,这个名字是jmeter提供的样例模板名 -->

另外需要两个额外的jar包,如果没有这两个jar,无法计算min和max,会得到NaN的结果。在jmeter 2.13已包含这两个jar,老版本若没有需自行下载放入JMETER_HOME/lib下,下载jar包推荐:http://www.boyunjian.com/

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

还有 ant-contrib-1.0b3.jar ,提供遍历文件夹的功能,下载以后放入ANT_HOME/lib,下载jar包推荐:http://www.boyunjian.com/
如果不添加这个jar包,会报以下错误

[taskdef]Could not load definitions from resource net/sf/antcontrib/antlib.xml. It could not be found.
      

需要在ant中指定jmeter的输出结果为xml格式,或者修改jmeter的配置文件(jmeter.properties)输出结果为xml

  • ant配置,在jmeter标签下添加子元素:

      <property name="jmeter.save.saveservice.output_format" value="xml"/>
    
  • jmeter配置,修改JMETER_HOME/bin/jmeter.properties

    jmeter.save.saveservice.output_format=xml # 默认是csv

5.报表配置

通过调整 xsl 文件,解析xml格式的jtl日志生成不同样式的html报告。
使用xsl解析xml生成html,需要了解xsl标记语言,资料相对略少,只能照猫画虎。
默认的xsl不提供TPS的计算,乌鸦增加了TPS列。其中,TPS的计算公式为:请求次数/(最后一次请求时间+请求返回时间-第一次请求时间)。
乌鸦的xsl配置文件

6.其他配置

如果再安装一个web服务器,将生成的html输出到web服务器的发布目录,即可通过url直接访问测试报告。

2016-08-16 更新

7.无法生成html报告或html报告无内容

需要知道原理,为何最后能生成html报告?通过ant去调用jmeter,生成日志文件,这是jmeter提供的现成的方法,无非是将测试结果按照一定规律保存成csv或xml格式的文件,然后按照规律去读取csv或xml文件,生成html文件。
那么,如果html报告是空的,问题只可能是:

  • csv或xml格式是空的
  • 生成html文件过程有误

对于第一个,核实csv或xml文件是否有内容,这个一般不会出问题。

关键是第二个,本文介绍的方法中,生成html文件是通过使用xsl模板解析xml,如果xsl模板或xml文件有问题,均不能得到正常的html结果。如果可以的话,自己编写一个小程序,按照规律读取数据并计算,也可以得到一个深度定制的报告。

规律:
csv格式

timeStamp[ts],elapsed[t],label[lb],responseCode[rc],responseMessage[rm],threadName[tn],dataType[dt],success[s],failureMessage,bytes[by],Latency[lt]

请求发出的绝对时间,响应时间,请求的标签,返回码,返回消息,请求所属的线程,数据类型,是否成功,失败信息,字节,延迟时间

xml格式更清晰一些

<httpSample t="1303" lt="432" ts="1442923225198" s="true" lb="HTTP Request1" rc="200" rm="OK" tn="Thread Group 1-9" dt="text" by="377691" ng="10" na="10"/>

有了这些结果记录,就可以计算出各种需要的结果了。参考

2016-08-17 更新

Jmeter3.0 内置了生成html的功能,图标更丰富,更方便。参考

将csv格式的测试结果导出到path

jmeter -g <log file> -o <Path to output folder>

使用Non-GUI模式执行测试并生成html到path

jmeter -n -t <test JMX file> -l <test log file> -e -o <Path to output folder>

8.缺陷

2016-11-16更新

修改JMETER_HOME/bin/jmeter文件的JVM参数后,通过ant调用时没有使用新设置的JVM参数。

参考:
https://zh.wikipedia.org/wiki/JDK
https://zh.wikipedia.org/wiki/Apache_Ant
http://www.w3school.com.cn/xsl/xsl_languages.asp
http://www.boyunjian.com
https://github.com/wang153723482/MyConfig/tree/master/ant_jmeter
http://jmeter.apache.org/usermanual/glossary.html#Throughput
http://jmeter.apache.org/usermanual/generating-dashboard.html