生成默认html报表

使用监控插件对于运行的状态有一定的限制,而且很多时候我们会在服务器上以命令行的形式来运行脚本,此时,这部分插件就无法正常发挥出作用了。但是还是需要根据执行结果来拿到分析数据,此时就可以根据运行的jtl文件来生成图标。

通过Jmeter界面工具(仅支持json格式数据)




通过Jmeter指令(仅支持json格式数据)

生成html测试报告从效果上就是把jtl文件中csv格式的信息转换成一个json格式的文件,然后通过模拟网页获取到json形式的返回结果后完成页面渲染,生成写死的包含具体报告信息的某些特定的html页面。
生成默认HTML测试报告的两种方式,具体情况如下,可以通过Jmeter自带的使用说明来了解。这种生成的文件样式比较适合压力测试的统计报告,默认提供一些统计维度上的展示信息,如果想自己分析某一个接口的情况这种视图当前是不适合分析。

利用已有.jtl文件生成报告

进入jmeter的bin目录下,输入如下命令:
jmeter.bat(Windows)/jmeter.sh(Linux) -g [csv results file] -o [path to output folder (empty or not existing)]

  • -g:xxx.jtl文件所在的路径
  • -o:HTML报告文件存放的路径(需要是空的已经存在的目录,否则将无法正常执行)
jmeter -g “D:\Html\result\压力测试.jtl” -o “D:\Html\report压力测试”

无.jtl文件生成测试报告

如果还未生成.jtl文件,则可以通过如下命令,一次性完成测试执行和生成HTML可视化报告的操作,进入jmeter的bin目录下,输入如下命令:
jmeter.bat(Windows)/jmeter.sh(Linux) -n -t test-file [-p property-file] [-l results-file] [-j log-file] -e -o [Path to output folder]

  • -n:以非GUI形式运行Jmeter
  • -t:jmeter.jmx 脚本路径
  • -l:result.jtl 运行结果保存路径(.jtl),此默认不支持覆盖,如果预先存在文件则会报错,支持传入一个不存在的路径,程序会自动按照层级新建相应的目录
  • -e:在脚本运行结束后生成html报告
  • -o:用于存放html报告的目录,html
jmeter -n -t “D:\code\payment_group\doc\项目文档\pbs\设计文档\第三方token\pbs-token 自动化测试脚本.jmx” -l “D:\Html2\result\压力测试%time::=%.jtl” -e -o “D:\Html2\report”

压力测试的命令行展示信息

单线程业务接口测试的命令行展示信息

Html报告默认样式界面介绍(不支持展示详细出入参)

执行完毕后,用浏览器打开生成的文件目录下的index文件,效果展示如下:

Dashboard报告总览页面

在这里插入图片描述

Test and Report informations

用于展示生成报告的脚本信息,脚本名称,

APDEX (Application Performance Index 应用性能指标图)

详细图标解读参照官网https://en.wikipedia.org/wiki/Apdex

  • Apdex(满意度),取值范围0-1,1最高,值越大表现越好
  • Toleration Threshold(通过响应阈值)
  • Frustration threshold(失败响应时间阈值)
    在这里插入图片描述
Statistic详细统计分析信息
  • Sampleles 采样数量
  • KO 失败数量
  • Error 失败百分比
  • Average 平均响应时间,单位ms
  • 90thpct 90%的采样数据响应时间
  • Transactions/s 每秒吞吐量
    在这里插入图片描述
Errors报告中出现错误信息汇总

Top 5 Errors by sampler(统计数排名前五的错误请求信息)

在这里插入图片描述

Requests Summary请求通过情况饼状图

Customs Graphs生成报告的脚本信息介绍

Test and Report informations

Charts细化图表页

图表支持功能介绍**:**

  • 图表部分可以通过小窗来调节缩放,在图表中点击后拖拽展示某一部分范围内的图表
  • 图标展示折线部分支持通过点选图例选中某几个(默认全部展示),并且调整后会自动缩放至最佳视图
  • 支持将图表另存为图片
  • 支持控制展示/隐藏图表

  • Over Time脚本运行期间的随时间变化响应时间趋势图
  • Througput 吞吐量
  • Resouse Times 响应时间
    在这里插入图片描述

Over Time脚本运行期间的随时间变化的趋势图汇总

  • Response Times Over Time 以时间维度绘制的平均响应时间射线图
    • 横坐标时间
    • 纵坐标按照业务接口分组的平均响应时间
  • Response Time Percentiles Over Time (successful responses)运行成功的请求以时间维度绘制的响应时间射线图(将Statistic统计图标中的几个指标以折线图的形式展示)
    • 横坐标时间
    • 纵坐标总的影响时间统计口径(90%95%,最大/小值等,)分组的平均响应时间
  • Active Threads Over Time 随时间变化的线程数信息折线图
    • 横坐标时间
    • 纵坐标当前活跃的线程数
  • Bytes Throughput Over Time 随时间变化的接收/发送数据量的平均值折线图
    • 横坐标时间
    • 纵坐标按照发送/接口分组的信息字节平均数值
  • Latencies Over Time随时间变化测试期间的接口响应延迟时间,延迟时间指的是请求结束到服务器开始响应的这段时间(断言、其他一些后置的shell等的耗时信息)
    • 横坐标时间
    • 纵坐标按照接口分组的延时响应部分平均耗时
  • Connect Time Over Time 主要展示的是在负载测试期间发送请求后与服务器建立连接的平均时间
    • 横坐标时间
    • 纵坐标按照接口分组的建立连接部分平均耗时

参考资料:
https://www.cnblogs.com/dydxw/p/14188116.html
https://www.cnblogs.com/imyalost/p/10239317.html

在这里插入图片描述
Throughput 吞吐量相关的趋势图汇总页

  • Hits Per Second随时间变化每秒产生的请求服务的数量的折线图
    • 横坐标时间
    • 纵坐标每秒请求服务数量
  • Codes Per Second 随时间变化每秒返回http类型请求响应码的数量折线图
    • 横坐标时间
    • 纵坐标Http请求服务按照状态码分组的统计数量
  • Transactions Per Second 随时间变化每秒每个请求的吞吐量折线图
    • 横坐标时间
    • 纵坐标按照接口分组的吞吐量
  • Total Transactions Per Second随时间变化每秒所有请求(按照成功/失败分别统计)的吞吐量折线图
    • 横坐标时间
    • 纵坐标按照成功/失败分组的吞吐量
  • Latency Vs Request随总请求数变化所有请求(按照成功/失败分别统计)响应延时(断言、其他一些后置的shell等的耗时)中位数散点图
    • 横坐标每秒总请求数信息
    • 纵坐标响应延时部分按照成功/失败分组响应时间中位数值
  • Response Time Vs Request 随总请求数变化所有请求(按照成功/失败分别统计)响应耗时的中位数散点图
    • 横坐标每秒总请求数信息

纵坐标业务请求按照成功/失败分组响应时间中位数值
在这里插入图片描述

Response Times响应时间相关的趋势图汇页

  • Response Time Percentiles 所有接口响应时间按照百分比占比计算的平均时间折线图
    • 横坐标占百分比
    • 纵坐标响应平均时间
  • Response Time Overview所有接口响应时间范围绘制的柱状图
    • 横坐响应时间范围
    • 纵坐标响应统计数量值
  • Time Vs Threads 随着线程数的增长,每个接口(含汇总)平均影响时间折线图
    • 横坐并发线程数
    • 纵坐标响应平均时间
  • Response Time Distribution 粒度更细的Response Time Overview图
    • 横坐响应时间范围
    • 纵坐标响应统计数量值
      在这里插入图片描述

自定义Html报告默认使用说明(支持多种数据格式)

默认的html样式针对压测类型的结果生成报告的支持非常强大,因为压测的场景不太会在报告层面来关注具体每一个请求的初入参信息。一般更多的是关注统计层面的信息。但是针对需要查看某一个请求的具体初入参的场景,目前的html报告就不太能满足要求了。当然可以直接用View Result Tree组件来打开该jtl文件,查看所需的信息。

输出自定义扩展样式Html格式的测试报告(以Windows系统使用为例)

自定义扩展方式生成html报告的方式则需要依赖其他的组件ant,这种情况就可以自定义html报告的样式了,可以通过前端的页面语言DIY。但是对于目前支持的脚本格式有要求,需要是xml格式的jtl结果信息。这种自定义的样式会展示全部的测试结果信息,并且通过程序写成一个html文件,请求数据量比较多的情况不适合用这种方式产生带详细初入参信息的报表。
这部分功能需要借助%JMATER_HOME%\extras\目录下的资源

ant -f build.xml -Djmxname=“Test”

备注:将ant的安装目录添加到环境变量Path里,否则就需要在bin

ant build.xml

build.xml部分详解见附件文件,这边配置了jtl文件的读取路径、html报告的样式文件、html报告的输出路径等等内容。

<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter" default="run" basedir="D:\AboutWork\apache-jmeter-5.1.1\extras\">
       <tstamp>
        <format property="time" pattern="yyyyMMddhhmm" />
    </tstamp>
	<property environment="env"/>
    <!-- 需要改成自己本地的 Jmeter 目录-->  
    <property name="jmeter.home" value="${env.JMETER_HOME}" />
	<property name="jmeter.result.parent.dir" value="D:\Html2\" />
    <!-- jmeter生成jtl格式的结果报告的路径--> 
    <property name="jmeter.result.jtl.dir" value="${jmeter.result.parent.dir}\result" />
    <!-- jmeter生成html格式的结果报告的路径-->
    <property name="jmeter.result.html.dir" value="${jmeter.result.parent.dir}\diyReport" />
    <!-- 生成的报告的前缀-->  
	<property name="jmxname" value="${jmxname}" />
	<condition property="jmeter.jmxname" value="${jmxname}" else="*.jmx">
	    <!-- jmeter.jmxname设置了值而且值非空的情况下才返回true,此时不采用默认值 -->
		<and>
		    <!--如果属性jmxname不存在则返回false -->
			<isset property="jmxname" />
			<not>
			   <!--如果属性jmeter.jmxname非空在则返回true -->
			   <equals arg1="${jmxname}" arg2="" />
			</not>
		</and>
	</condition>
    <echo message="jmxname代表当前需要执行的脚本名称,不需要待(.jmx),此时生成的jtl和html文件均以此命名"/>
	<property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${jmeter.jmxname}.jtl" />
    <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${jmeter.jmxname}.html" />
    <property name="jmeter.result.jmxName" value="${jmeter.result.parent.dir}/${jmeter.jmxname}.jmx" />
	
    <target name="run">
         <!-- <antcall target="doTest"/>  -->
        <antcall target="clear" /> 
        <antcall target="report" />
    </target>

	<path id="jmeter.classpath">
        <fileset dir="${basedir}">
          <include name="ant-jmeter*.jar"/>
        </fileset>
    </path>
	<target name="-check-use-file"> 
		 <available property="file.exists" file="${jmeter.result.jtl.dir}/*.html" /> 
	</target> 
	<!-- 删除目录下现有的html页面-->
	<target name="clear" depends="-check-use-file" if="file.exists">
	    <echo message="判断是否存在匹配的${jmeter.result.html.dir}/*.html文件并删除"/>
		<delete file="${jmeter.result.html.dir}/*.html"/>	
    </target>
	 
	<!-- 运行目标Jmeter测试脚本 --> 
    <target name="doTest">
	    <echo message="当前运行的脚本=${jmeter.jmxname},并且生成${jmeter.result.jtlName}结果文件"/>
        <taskdef 
			name="jmeter" 
			classpathref="jmeter.classpath"
			classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
        <jmeter 
			jmeterhome="${jmeter.home}" 
			resultlog="${jmeter.result.jtlName}"
			testplan ="${jmeter.result.jmxName}" >
             <!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本-->
            <!-- <testplans dir="${jmeter.result.parent.dir}" includes="${jmeter.jmxname}" /> -->
	        <property name="jmeter.save.saveservice.assertion_results" value="all"/>
            <property name="jmeter.save.saveservice.bytes" value="true"/>
            <property name="file_format.testlog" value="${format}"/>
            <property name="jmeter.save.saveservice.response_data.on_error" value="${funcMode}"/>
            <property name="jmeter.save.saveservice.output_format" value="xml"/>
        </jmeter>
    </target>
    
     <path id="xslt.classpath">
        <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
        <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
     </path>
     
    <!-- html结果生成报告 --> 	 
    <target name="report">
        <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.htmlName}"
              style="${jmeter.home}/extras/jmeter-results-shanhe-me.xsl" /> 
			  
			  <!--   
			  style="${jmeter.home}/extras/jmeter-results-shanhe-me.xsl" />
              style="${jmeter.home}/extras/jmeter-results-report-apitest.xsl" /> 
			  -->  
              
        
        <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 --> 
        <copy todir="${jmeter.result.html.dir}">
            <fileset dir="${jmeter.home}/extras">
                <include name="collapse.png" />
                <include name="expand.png" />
            </fileset>
        </copy>
    </target>    
    
</project>

Html报告的样式文件可以由前端人员自定义,如果对于现有的两种样式文件不满意,可以自己定制。下面介绍了两种常规的样式,请根据需要自行选择。

自定义html报告样式文件

样式文件下载链接

jmeter-results-report-apitest.xsl

这种样式包含简单的统计信息和详细的初入参信息
在这里插入图片描述

汇总报告页

结果树列表页

详细结果页

选中结果树列表中某条记录的+号即可展示详细信息
在这里插入图片描述

jmeter-results-shanhe-me.xsl

在这里插入图片描述

结果树列表页

按照所属线程组分类展示
Ps:有点小缺陷,目前点击左侧小三角无法实现缩放,需要前端人员支持修改

详细结果页

这里根据分栏展示了如下几类内容:

  • Sampler 某一次请求信息的粗略汇总信息
  • Assertion 断言判断具体信息
  • Request 请求信息详情
  • Response 响应信息详情
    在这里插入图片描述
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐