JMeter提供了一个用于生成HTML页面图形化报告的扩展模块。该模块支持通过两种方式生成多维度图形化测试报告。

  • 在JMeter性能测试结束时,自动生成本次测试的HTML图形化报告。
  • 使用一个已有的测试结果文件,如.jtl结果文件,.csv结果文件,来生成该次测试结果的HTML图形化报告。

1、自动生成HTML图形化报告

自动生成HTML图形化报告的命令如下:

jmeter -n -t 【Jmx脚本位置】-l 【结果文件result.jtl存放的位置】-e -o 【生成HTML报告指定文件夹】

参数解释:

  • -n:表示non gui mode,就是非图形化模式。
  • -t:指定JMX脚本路径,即test plan(测试计划)。后面跟需要运行的JMeter 脚本的路径和脚本名称。
  • -l:指定结果文件路径。后面跟输出结果文件路径和结果文件名称。

    1)若没有指定指定结果文件路径,则自动创建,可以生成.csv文件或者.jtl文件。

    2)若只写脚本名称,则默认是在当前目录查找或创建。
  • -e:设置测试完成后生成测试报表。
  • -o:指定测试报表生成文件夹。文件夹必须为空或不存在。

在CMD中进行到%JMeter_Home%\bin位置,执行命令如下:

jmeter -n -t CLI_test.jmx -l C:\Users\L\Desktop\cli\result.jtl -e -o C:\Users\L\Desktop\cli\tableresult

如下图所示:

注意点:

  • result.jtl结果文件的输入位置,要和HTML报告文件夹的输入位置再同一个目录中。
  • 确认目标目录下没有结果文件。
  • 确认-o参数后面指定的文件夹,一定是不存在的或者是空文件夹。

然后去目标目录中查看HTML图形化报告文件夹中的内容。

打开index.html文件,如下图所示:

2、使用已有的测试结果文件生成HTML报告

使用命令:jmeter -g <log file> -o <Path to output folder>

参数说明:

  • -g:指定已存在的测试结果文件路径,仅用于生成测试报表。
  • -o:指定测试报表生成文件夹,文件夹必须为空或不存在。

在CMD中进入到测试结果文件的所在目录,执行命令如下:

jmeter -g result.jtl -o C:\Users\L\Desktop\cunliu\output

之后就可以到指定的目录中查看生成的HTML报告了。

推荐配置JMeter的环境变量,这让就可以在任何目录中执行JMeter命令了。

3、HTML图形化报告内容详解

(1)Dashboard页面:(重点查看)

1)Test and Report informations:指的是测试和报告信息。

  • File:测试结果的保存文件名称。
  • Start Time:测试开始时间。
  • End Time:测试结束时间。
  • Filter for display:展示过滤器。

2)APDEX(Application Performance Index):应用程序性能满意度的标准。其中:

  • Apdex范围在0-1之间,1表示达到所有用户均满意,越接近1满意度越高。
  • toleration threshold:耐受阈值。
  • frustration threshold:挫败阈值。

3)Requests Summary:请求的通过率(OK)与失败率(KO),百分比显示。

4)Statistics:数据分析,基本将Summary Report(汇总报告)和Aggrerate Report(聚合报告)的结果合并。

5)Errors:错误情况,依据不同的错误类型,将所有错误结果展示。

6)Top 5 Errors by sampler:显示前5个错误的取样器。

(2)Charts页面:(辅助分析)

Charts页面:用图表的形式展示测试数据,让测试报告更加直观。

主要有如下特点:

  1. 将测试过程中经常使用的数据,用图表的形式展示,让测试结果更加直观。
  2. 每个图表数据,有两种展示形式。
  3. 支持请求样例过滤显示。
  4. 支持导出PNG图片格式。

Over Time for Charts页面:

1)Response Times Over Time图表

每秒钟响应时间,X轴表示的是系统运行的时刻,Y轴表示的是响应时间,F(X,Y)表示系统随着时间的推移,系统的响应时间的变化,可以看出响应时间稳定性。

说明:响应时间变化曲线,展示平均响应时间随时间变化情况,类似于JMeter Plugins在UI上的Response Times Over Time。

2)Bytes Throughput Over Time图表

字节接收与发送的数量,每秒传输字节吞吐量,表明JMeter在测试时,随着时间推移发送和接收的字节数。

如下图所示:

说明:数据吞吐量时间曲线,展示每秒数据吞吐量随时间变化的情况,类似于JMeter Plugins在UI上的 Bytes Throughput Over Time。

3)Latencies Over Time图表

延迟时间变化曲线:展示Latency time随时间变化的情况,类似于JMeter Plugins在UI上的Response Latencies Over Time。

如下图所示:

4)Response Time Percentiles Over Time (successful responses) 图表

脚本运行时间内成功响应的请求,即:响应时间的百分位分布图。

如下图所示:

5)Active Threads Over Time图表

脚本运行时间内的活动线程数变化曲线,展示测试过程中活动线程数随时间变化情况。

如下图所示:

6)Connect Time Over Time图表

脚本运行时间内平均连接时间。

即:随时间变化,每个时间节点花费在连接上的平均时间。

如下图所示:

Throughput for Charts页面:

1)HitsPer Second (excluding embedded resources)图表

每秒点击次数曲线图,即:每秒钟向服务器发送的请求数量。

如下图所示:

2)CodesPer Second (excluding embedded resources)图表

每秒状态码数量分布曲线,即:每秒钟服务器返回的ResponseCode数量。

如下图所示:

3)TransactionsPer Second图表

每秒事物数曲线图,即:服务器每秒钟处理的事务数量。

如下图所示:

4)ResponseTime Vs Request图表

响应时间点与每秒请求数关系曲线,即:每秒发送多少个请求时,所对应的平均响应时间。

如下图所示:

5)LatencyVs Request图表

延迟时间点与每秒请求数关系曲线,即:每秒发送多少个请求时,所对应的平均延时。

如下图所示:

Response Times for Charts页面:

1)Response Time Percentiles图表

响应时间与百分位数对应关系的曲线图,即:有百分之多少的线程花费了某一响应时间。

如下图所示:

2)Response Time Overview图表

响应时间概述柱状图,即:响应时间分布。

如下图所示:

3)Time Vs Threads图表

活动线程与平均响应时间变化曲线图,即:多个活动线程情况下的平均响应时间。

X轴表示的是活动线程数,也就是并发访问的用户数,Y轴表示的是响应时间,F(X,Y)表示在某种并发量的情况下,系统的响应时间是多少。

如下图所示:

4)Response Time Distribution图表

响应时间分布图,即:在某一响应时间段内的线程响应数量。

如下图所示:

4、测试结果文件的相关配置

使用JMeter进行测试的时候,我们可以收集每个请求中的信息,并保存到结果文件中,如:.jtl文件或.cvs文件中。

如下图所示:

我们可以看到第一行的字段,都是我们选择记录请求中的哪些数据到结果文件中。

如果我们使用GUI模式运行JMeter,设置要存储的数据,需要在监听器组件界面中,点击Configure按钮进行配置。

如下图所示:

但在非GUI模式下运行测试用例,需要在jmeter.properties配置文件中,根据自己需求进行修改。

主要修改jmeter.properties配置文件中的Results file configuration部分内容。

#---------------------------------------------------------------------------
# Results file configuration
#--------------------------------------------------------------------------- # This section helps determine how result data will be saved.
# The commented out values are the defaults. # legitimate values: xml, csv, db. Only xml and csv are currently supported.
#jmeter.save.saveservice.output_format=csv # The below properties are true when field should be saved; false otherwise
#
# assertion_results_failure_message only affects CSV output
#jmeter.save.saveservice.assertion_results_failure_message=true
#
# legitimate values: none, first, all
#jmeter.save.saveservice.assertion_results=none
#
# jmeter.save.saveservice.data_type=true
# jmeter.save.saveservice.label=true
# jmeter.save.saveservice.response_code=true
# response_data is not currently supported for CSV output
# jmeter.save.saveservice.response_data=false
# Save ResponseData for failed samples
# jmeter.save.saveservice.response_data.on_error=false
# jmeter.save.saveservice.response_message=true
# jmeter.save.saveservice.successful=true
# jmeter.save.saveservice.thread_name=true
# jmeter.save.saveservice.time=true
# jmeter.save.saveservice.subresults=true
# jmeter.save.saveservice.assertions=true
# jmeter.save.saveservice.latency=true
# Only available with HttpClient4
# jmeter.save.saveservice.connect_time=true
# jmeter.save.saveservice.samplerData=false
# jmeter.save.saveservice.responseHeaders=false
# jmeter.save.saveservice.requestHeaders=false
#jmeter.save.saveservice.encoding=false
# jmeter.save.saveservice.bytes=true
# Only available with HttpClient4
# jmeter.save.saveservice.sent_bytes=true
# jmeter.save.saveservice.url=true
#jmeter.save.saveservice.filename=false
#jmeter.save.saveservice.hostname=false
# jmeter.save.saveservice.thread_counts=true
#jmeter.save.saveservice.sample_count=false
# jmeter.save.saveservice.idle_time=true # Timestamp format - this only affects CSV output files
# legitimate values: none, ms, or a format suitable for SimpleDateFormat
#jmeter.save.saveservice.timestamp_format=ms
#jmeter.save.saveservice.timestamp_format=yyyy/MM/dd HH:mm:ss.SSS # For use with Comma-separated value (CSV) files or other formats
# where the fields' values are separated by specified delimiters.
# Default:
#jmeter.save.saveservice.default_delimiter=,
# For TAB, one can use:
#jmeter.save.saveservice.default_delimiter=\t # Only applies to CSV format files:
# Print field names as first line in CSV
#jmeter.save.saveservice.print_field_names=true # Optional list of JMeter variable names whose values are to be saved in the result data files.
# Use commas to separate the names. For example:
#sample_variables=SESSION_ID,REFERENCE
# N.B. The current implementation saves the values in XML as attributes,
# so the names must be valid XML names.
# By default JMeter sends the variable to all servers
# to ensure that the correct data is available at the client. # Optional XML processing instruction for line 2 of the file:
# Example:
#jmeter.save.saveservice.xml_pi=<?xml-stylesheet type="text/xsl" href="../extras/jmeter-results-detail-report.xsl"?>
# Default value:
#jmeter.save.saveservice.xml_pi= # Prefix used to identify filenames that are relative to the current base
#jmeter.save.saveservice.base_prefix=~/ # AutoFlush on each line written in XML or CSV output
# Setting this to true will result in less test results data loss in case of Crash
# but with impact on performances, particularly for intensive tests (low or no pauses)
# Since JMeter 2.10, this is false by default
#jmeter.save.saveservice.autoflush=false

提示:

  • 将上面的注释打开,并且将值修改成true,就会打开该条记录,JMeter就会将该条信息输出到我们指定的.jtl文件中。
  • 如果希望在Errors报告中展示更详细数据,需要确保如下配置:

    jmeter.save.saveservice.assertion_results failure message = true
  • 如果使用了事务控制器(Transaction Controller),确认Generate parent sample为未勾选状态。
  • 这些配置需要慎重打开,因为压测过程中,会产生大量的这样的记录,真正压测时,最好不要开太多的日志记录,只需要打开我们关注的数据信息即可。
  • 另外,#jmeter.save.saveservice.output_format=csv选项,如果更改为xml,保存的数据量会很大,也是会影响IO,从而影响测试的结果值。

参考:

『动善时』JMeter基础 — 56、JMeter使用命令行模式生成HTML测试报告的更多相关文章

  1. 『动善时』JMeter基础 — 55、JMeter非GUI模式运行

    目录 1.JMeter的非GUI模式说明 2.为什么使用非GUI模式运行JMeter 3.怎样使用非GUI模式运行JMeter (1)非GUI模式运行JMeter步骤 (2)其它参数说明 4.CLI模 ...

  2. 『动善时』JMeter基础 — 55、使用非GUI模式运行JMeter(命令行模式)

    目录 1.JMeter的非GUI模式说明 2.为什么使用非GUI模式运行JMeter 3.使用非GUI模式运行JMeter (1)非GUI模式运行JMeter步骤 (2)其它参数说明 4.CLI模式运 ...

  3. 『动善时』JMeter基础 — 58、JMeter分布式测试

    目录 1.JMeter分布式测试概念 2.JMeter分布式测试前提条件 3.JMeter实现分布式测试 (1)在执行机中的配置 (2)在控制机中的配置 (3)启动执行机中的JMeter服务 (4)在 ...

  4. 『动善时』JMeter基础 — 6、使用JMeter发送一个最基础的请求

    目录 步骤1:创建一个测试计划 步骤2:创建线程组 步骤3:创建取样器 步骤4:创建监听器 步骤5:完善信息 步骤6:保存测试计划 步骤7:查看结果 总结:JMeter测试计划要素 当我们第一次打开J ...

  5. 『动善时』JMeter基础 — 27、通过JMeter函数助手实现参数化

    目录 1.测试计划中的元件 2.数据文件内容 3.函数助手配置 (1)函数助手的打开方式 (2)函数助手界面介绍 (3)编辑后的函数助手界面 4.HTTP请求组件内容 5.线程组元件内容 6.脚本运行 ...

  6. 『动善时』JMeter基础 — 28、JMeter函数助手详解

    目录 1.函数助手介绍 2.函数助手中的函数分类 3.常用函数介绍 (1)__Random函数 (2)__counter函数 (3)__time函数 (4)__property函数 (5)__setP ...

  7. 『动善时』JMeter基础 — 29、JMeter响应断言详解

    目录 1.JMeter断言介绍 2.响应断言组件界面详解 3.响应断言组件的使用 (1)测试计划内包含的元件 (2)登陆接口请求界面内容 (3)响应断言界面内容 (4)查看运行结果 (5)断言结果组件 ...

  8. 『动善时』JMeter基础 — 1、JMeter介绍

    1.什么是JMeter Apache JMeter是Apache组织开发的基于Java的压力测试工具,用于对软件做压力测试.它最初被设计用于Web应用测试,但后来扩展到其他测试领域. (Apache ...

  9. 『动善时』JMeter基础 — 57、Linux系统中运行JMeter脚本

    目录 1.Linux系统中安装Java环境 (1)解压Java安装包 (2)配置Java环境变量 (3)验证Java环境是否配置成功 2.Linux系统中安装JMeter (1)下载JMeter (2 ...

  10. 『与善仁』Appium基础 — 3、ADB命令介绍

    目录 1.ADB命令简介 2.ADB命令运行原理 3.通过ADB命令连接安卓模拟器 (1)安装安卓模拟器 (2)ADB命令连接安卓模拟器 (3)常用Android模拟器端口号 1.ADB命令简介 AD ...

随机推荐

  1. 学习PHP中的iconv扩展相关函数

    想必 iconv 这个扩展的相关函数大家多少都接触过,做为 PHP 的默认扩展它已经存在了很久,也是我们在操作字符编码时经常会使用的函数.不过除了 iconv() 这个函数外,你还知道它的其它函数吗? ...

  2. 环形链表II

    题目描述: 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 p ...

  3. Batch Size对神经网络训练的影响

    ​ 前言 这篇文章非常全面细致地介绍了Batch Size的相关问题.结合一些理论知识,通过大量实验,文章探讨了Batch Size的大小对模型性能的影响.如何影响以及如何缩小影响等有关内容. 本文来 ...

  4. pyqt5实现窗口跳转并关闭上一个窗口

    关键在于要定义一个关闭窗体的函数colsewin() 然后将按键与该函数连接(connect)在一起即可 import sys from PyQt5.QtWidgets import QMainWin ...

  5. PolarDB PostgreSQL logindex 设计

    背景介绍 PolarDB采用了共享存储一写多读架构,读写节点RW和多个只读节点RO共享同一份存储,读写节点可以读写共享存储中的数据:只读节点仅能各自通过回放日志,从共享存储中读取数据,而不能写入,只读 ...

  6. 小白学习Python英语基础差怎么办,都帮你想好拉!看这里

    运算符与随机数 1.module:模块 2.sys(system):系统 3.path:路径 4.import:导入 5.from:从- 定义函数与设定参数 1.birthday:出生日期 2.yea ...

  7. Xamarin Android使用自签名证书

    背景 项目中后台web服务部署成https服务时,需要使用SSL证书,如果我们不使用公共的CA时,怎么办? 不仅如此,因为是小项目,App应用主要是小范围使用,此时只有IP地址,根本没有域名,怎么办? ...

  8. 数据结构与算法——克鲁斯卡尔(Kruskal)算法

    目录 应用场景-公交站问题 克鲁斯卡尔算法介绍 克鲁斯卡尔算法图解 克鲁斯卡尔算法分析 如何判断回路? 代码实现 无向图构建 克鲁斯卡尔算法实现 获取一个点的终点解释 应用场景-公交站问题 某城市新增 ...

  9. Redis对象

    概述 Redis并没有使用基础数据结构去实现键值数据库,而是基于数据结构封装了一个个对象. 类型和编码 由于Redis是键值数据库,所以每次存储数据时,至少包含两个对象,即K.V对应的对象.其数据结构 ...

  10. 【k8s】使用k8s部署一个简单的nginx服务

    名词解释 Namespace 表示命名空间 Deployment 表示pod发布 Service 表示多个pod做为一组的集合对外通过服务的表示 kubectl 是k8s的命令行操作命令,可以创建和更 ...