概述:

在本文中,我将解释如何使用JMeter + InfluxDB + Grafana获得实时性能测试结果。

请注意,此主题太大,无法涵盖一篇文章中的所有内容。所以,我试图提供与TestAutomationGuru的其他文章的链接,这些文章可能与本文有关。请尽可能检查一切。

问题陈述:

多年前,当我以前运行JMeter测试时,我无法理解测试执行期间应用程序的性能。我总是不得不等待测试完成。这有点烦人 - 特别是在长时间运行的测试中。有时,我可能不得不连续2/3天进行浸泡测试。

在某些时候,JMeter 在非GUI模式下启用了2.11版本的汇总器输出。运行JMeter测试时,您可以看到以下输出。

它有点帮助,上面的摘要提供了测试运行时需要的大量信息。它显示每30秒的  最小,最大,平均响应时间,吞吐量,错误计数,活动用户数(可以在jmeter.properties中更改摘要间隔)

但是当测试运行几个小时并且每30秒在控制台中有大量的汇总器输出时,可能有点难以理解结果。例如,如果我想知道速率下降的活动用户数,我需要非常仔细地逐行检查汇总器输出!我无法与开发团队/应用程序架构师分享结果,因为结果不是非常用户友好的格式。要创建一个漂亮的图形,我需要等待JMeter测试完成。

因此,我没有在控制台中编写这个摘要输出,而是修改了JMeter的摘要类以将结果发送到数据库 - 这样我就可以通过查询数据库来创建一个漂亮的图表。对我们的团队来说,实时分析性能测试结果非常有帮助。JMeter还在2.13版本中添加了一个单独的监听器,它将数据发送到数据库,这可以帮助我们获得实时结果。

我将介绍JMeter的方法和我的方法。你可以遵循其中任何一个。不是都!!

解决方案1:

后端监听器 - JMeter实现:

JMeter v2.13引入了一个新的监听器,用于在测试运行时将结果发送到时间序列数据库(Influxdb / graphite)。通过配置Grafana(一个开源指标仪表板)连接到Influxdb / graphite,我们可以创建漂亮的图形,这将帮助我们在JMeter运行测试时获得实时指标!

时间序列数据库:时间序列是随时间变化采集的数据序列。时序数据库是处理时间序列数据的软件应用程序。想象它就像一个sql表,其中时间是主键!

我们将在本文中使用InfluxDB  作为我们的数据库。点击此处了解更多信息。

您可能想知道的术语很少:

  • 测量   - >这相当于RDBMS表
  • 系列                   - >每一项测量记录。它就像桌子的行。
  • 标签                      - >表的可选列。它是索引列,可以加快搜索速度。
    • 标记键     - >索引列的名称
    • 标记值 - >索引值
  • 字段                    - >这是存储您要测量的实际数据的列。就像页面的响应时间一样。

JMeter&InfluxDB集成:

InfluxDB设置:

  • 下载InfluxDB
  • 检查此链接是否为InfluxDB设置。 [注意:在撰写本文时,v1.3是最新的涌入版本。如果此链接不起作用,请检查Influxdb网站以获取更多信息。]
  • 找到Influxdb的配置文件
    • 在这里:/opt/influxdb/shared/config.toml
    • 或者在这里:  /usr/local/etc/influxdb.conf
  • 如果您无法找到配置文件,可以使Influxdb显示默认配置。执行以下命令。
influxd config
  • 该命令将显示所有默认值。复制值并自己创建配置文件。
  • JMeter使用石墨协议将值写入InfluxDB。因此,在InfluxDB配置文件中找到graphite协议部分并启用它,如下所示。
[[graphite]]
enabled = true
bind-address = ":2003"
database = "jmeter"
retention-policy = ""
protocol = "tcp"
batch-size = 5000
batch-pending = 10
batch-timeout = "1s"
consistency-level = "one"
separator = "."
udp-read-buffer = 0
  • 修改后,使用以下命令重新启动Influxdb服务器以使更改生效。
influxd -config /path/to/config/file
  • 检查InfluxDB日志是否有任何错误。此时,InfluxDB应该正常运行。

一旦InfluxDB  启动并运行,下一步就是创建一个JMeter测试,将测试数据发送到InfluxDB。

JMeter设置:

  • 确保您具有Java 8或更高版本。
  • 下载JMeter  3.3或更高版本
  • 启动JMeter。创建一个简单的测试。
  • 添加后端侦听器。

  • 更新InfluxDB  服务器IP,端口详细信息如上所示
  • 运行测试。等几秒钟
  • 检查JMeter日志是否存在与向InfluxDB发送数据相关的任何连接错误。你不应该看到任何错误!如果有,请在此处查看故障排除步骤。然后回来继续从这里开始!

InfluxDB - Shell命令:

  • 在运行InfluxDB的机器中执行以下命令。
influx
Connected to http://localhost:8086 version 1.3.6
InfluxDB shell version: 1.3.6
  • 执行以下命令以查看数据库列表。
SHOW DATABASES
name: databases
name
----
_internal
jmeter
  • 执行以下命令以使用JMeter DB。
USE jmeter
Using database jmeter
  • 执行以下命令以查看JMeter DB下的表或测量列表。
show measurements
name: measurements
name
----
jmeter.all.ok.count
jmeter.all.h.count
jmeter.all.ok.min
jmeter.all.ok.max
jmeter.all.ok.avg
...........
  • 此时,您会看到在InfluxDB中创建了一堆测量值。JMeter  在' jmeter '数据库中创建了这些  测量。

希望您能够将测试结果成功发送到InfluxDB!恭喜。现在是我们设置Grafana服务器从测试结果创建图表的时候了。

Grafana-InfluxDB集成:

  • 下载Grafana
  • 启动Grafana服务器。(在我的窗口中,我有这里的exe - > GRAFANA_HOME / bin / grafana-server.exe)
  • 使用此URL http:// localhost:3000启动浏览器  以访问Grafana主页。
  • 更新Grafana数据源以指向InfluxDB实例。

  • 单击Test连接以确保Grafana可以连接到InfluxDB。
  • 创建一个新的仪表板。

  • 让我们添加一个Graph面板

  • 添加后,单击面板标题进行编辑并添加查询以显示您感兴趣的指标。选中此视频以创建最小值指标的图表。
视频播放器

 
 
 

希望你现在有了这个主意!你可以从这里开始创建不同的指标!

我为我的应用程序创建了不错的仪表板。您可以继续阅读本文,下载并使用它们!

JMeter的后端监听器出现问题:

JMeter的Backend Listener真正帮助我们获得实时性能测试结果。然而,它创造了大量的测量。'min','max'值可能与您的汇总报告一致。但是你不能指望百分位数,吞吐量,平均值与你的汇总报告相匹配!! 因为此侦听器会为每个给定的间隔(例如每1秒)计算这些值。随着时间的推移,你基本上可以获得吞吐量。不是整个测试期间。所以,它不匹配。

我的自定义方法帮助我按照我想要的方式获得结果。

解决方案2:

C ustom Listener [TestAutomationGuru Implemenation]:

由于上面提到的JMeter后端监听器的限制并且为了实现我的目标,我只想用我自己的实现 - 通过更新具有摘要的Apache核心库(它负责编写上面提到的聚合信息)在控制台中) - 所以只要它在控制台中写入信息,它也可以更新InfluxDB中的数据。没有为此目的创建单独的监听器似乎对我来说没问题,因为在测试中添加更多的监听器将消耗内存并可能影响我的测试。性能方面 - 这种方法比添加新的后端监听器表现更好,因为我不必为计算添加任何额外的逻辑。

InfluxDB设置:

  • 在InfluxDB配置文件中启用HTTP API,以便在InfluxDB中写入结果。重启InfluxDB。
[http]
# Determines whether HTTP endpoint is enabled.
enabled = true # The bind address used by the HTTP service.
bind-address = ":8086"

InfluxDB - Shell命令:

  • 在运行InfluxDB的机器中执行以下命令。
influx
Connected to http://localhost:8086 version 1.3.6
InfluxDB shell version: 1.3.6
  • 执行以下命令创建一个新的DB - jmeter(如果它还没有)
CREATE DATABASE jmeter

JMeter设置:

  • 您不需要为测试添加任何监听器!
  • 下载修改后的Apache JMeter核心库 - 替换lib / ext  文件夹中的现有核心库  。最好在更换之前备份旧的备份。您应该使用JMeter版本3.3。
TAG-Influx-Grafana.zip(2991次下载)
  • 它将在下面的属性。使用命令行/ ant等更新user.properties文件/将下面的属性传递给测试。
# True to send data to influx db
summariser.influx.out.enabled=true # True to send write the info it sends to influx db - enable only for debugging purpose
# summariser.influx.out.enabled=false # Influx host, port, db details details
summariser.influx.url=http://localhost:8086/write?db=jmeter # use below format if there is any username & password for influxdb
# http://localhost:8086/write?db=jmeter&u=myusername&p=mypassword # Name of your application - Useful for querying the results when you use this framework for multiple applications
# Do not add any space or dot or any other special chars
summariser.influx.application=myApp # Perofrmance test strategy - Useful for querying the results when you use this framework for multiple strategies
# Do not add any space or dot or any other special chars
summariser.influx.application.suite=stress-test # timeouts
summariser.influx.connection.timeout=5000
summariser.influx.socket.timeout=5000
summariser.influx.request.timeout=5000
  • 在NON-GUI模式下运行任何JMeter测试,启用摘要生成器。它应该将数据发送到InfluxDB。

InfluxDB - Shell命令:

  • 执行以下命令以查看数据库列表。
SHOW DATABASES
name: databases
name
----
_internal
jmeter
  • 执行以下命令以使用JMeter DB。
USE jmeter
Using database jmeter
  • 执行以下命令以查看JMeter DB下的表或测量列表。
show measurements
name: measurements
name
----
delta
samples
total

注意:

  • 如果您使用testautomationguru的修改过的apache_core jar,那么您不需要' Backend Listener '。jar本身将负责发送结果。
  • 如果apache核心库在超时内无法访问InfluxDB - 它将永远不会重试  发布测试数据。这是按照我的设计!服务器可能已关闭或可能是防火墙问题。我不想继续尝试,因为它可能会影响测试性能。确保它可以访问。
  • 此插件旨在仅在非GUI模式测试中发布数据。绝不推荐在GUI模式下运行测试!
如果您仍然面临将数据发送到InfluxDB的问题 - 请检查此帖子以进行故障排除。

Grafana仪表板:

下载的zip文件还应包含Grafana仪表板(采用JSON格式)。在Grafana中导入这些仪表板文件(您可以在Home下找到导入功能,如下所示) - 请在导入这些仪表板之前安装Grafana饼图插件 - 请在此处查看

成功导入后,它将创建仪表板,如下所示。它将来自增量和总测量的数据显示为适当的度量标准。(确保您的Grafana正确设置了数据源。它应该指向我们发布数据的InfluxDB实例)。

聚合仪表板:

样品仪表板:

此仪表板将从Samples测量中检索数据。您可以根据特定页面,状态等进一步过滤。有时,当请求失败时(比如某些auth错误),响应时间可能会非常短 - 因此吞吐量会很大。这个不对。这就是为什么我有状态过滤器来获得成功的吞吐量。

通过调整'Summarize'下拉菜单,让grafana计算不同时间间隔的吞吐量。

摘要:

使用JMeter的后端监听器/自定义监听器+ InfluxDB + Grafana - 我们可以创建令人惊叹的图表,它们将为我们提供JMeter正在运行的测试的实时指标。如果您有长时间运行的测试,则无需等待测试完成以访问结果。只需分享Grafana仪表板URL - 这样任何有链接的人都可以看到正在发生的事情!

请查看以下与此相关的文章。


有问题吗?

注意:   确保Influx服务器的系统时间与运行JMeter的计算机同步。这是非常重要的。因为当您查询Influxdb时 - 默认情况下它会显示时间为<=系统时间的记录。如果JMeter机器的时间是,比如说下午4:50。InfluxDB服务器系统时间是下午4:45。当您运行JMeter测试时,它将能够将记录发布到InfluxDB。但是,当您查询Influxdb时,它不会显示这些记录。您需要等待5分钟才能看到插入的记录。 

即使遵循了所有步骤,它也无法按预期工作?没问题; 点击此处查看排除故障的步骤。

JMeter - 实时结果 - InfluxDB和Grafana - 第1部分 - 基本设置的更多相关文章

  1. JMeter - 实时结果 - InfluxDB和Grafana - 第2部分 - 添加自定义字段

    我已经使用InfluxDB + Grafana来获取我的JMeter测试的实时结果.您可以在此处找到有关基本设置的更多详细信息.在本文中,让我们看看我们如何在InfluxDB测量中添加一些自定义字段, ...

  2. 【jmeter】基于InfluxDB&Grafana的JMeter实时性能测试数据的监控和展示

    本文主要讲述如何利用JMeter监听器Backend Listener,配合使用InfluxDB+Grafana展示实时性能测试数据 关于JMeter实时测试数据 JMeter从2.11版本开始,命令 ...

  3. 性能测试 CentOS下结合InfluxDB及Grafana图表实时展示JMeter相关性能数据

    CentOS下结合InfluxDB及Grafana图表实时展示JMeter相关性能数据   by:授客 QQ:1033553122 实现功能 1 测试环境 1 环境搭建 2 1.安装influxdb ...

  4. jmeter --- 基于InfluxDB&Grafana的JMeter实时性能测试数据的监控和展示

    转自:https://blog.csdn.net/RickyOne_RR/article/details/50637839 本文主要讲述如何利用JMeter监听器Backend Listener,配合 ...

  5. 转:基于InfluxDB&Grafana的JMeter实时性能测试数据的监控和展示

    本文主要讲述如何利用JMeter监听器Backend Listener,配合使用InfluxDB+Grafana展示实时性能测试数据 关于JMeter实时测试数据 JMeter从2.11版本开始,命令 ...

  6. 性能测试 基于Python结合InfluxDB及Grafana图表实时采集Linux多主机性能数据

    基于Python结合InfluxDB及Grafana图表实时采集Linux多主机性能数据   by:授客 QQ:1033553122 实现功能 测试环境 环境搭建 使用前提 使用方法 运行程序 效果展 ...

  7. 性能测试 基于Python结合InfluxDB及Grafana图表实时采集Linux多主机或Docker容器性能数据

    基于Python结合InfluxDB及Grafana图表实时采集Linux多主机性能数据   by:授客 QQ:1033553122 实现功能 1 测试环境 1 环境搭建 3 使用前提 3 使用方法 ...

  8. 性能测试 基于Python结合InfluxDB及Grafana图表实时监控Android系统和应用进程

    基于Python结合InfluxDB及Grafana图表实时监控Android系统和应用进程   By: 授客 QQ:1033553122     1. 测试环境 2. 实现功能 3. 使用前提 4. ...

  9. jmeter 实时搜索结果

    因为JMeter 2.13你可以得到实时搜索结果发送到后端通过 后端侦听器 使用潜在的任何后端(JDBC.JMS网络服务,€Š) 通过提供一个实现类 AbstractBackendListenerCl ...

随机推荐

  1. Linux下MySQL的数据文件存放在哪里的

    mysql> show variables like '%dir%';+-----------------------------------------+------------------- ...

  2. Erlang pool management -- Emysql pool

    从这篇开始,这一系列主要分析在开源社区中,Erlang 相关pool 的管理和使用. 在开源社区,Emysql 是Erlang 较为受欢迎的一个MySQL 驱动. Emysql 对pool 的管理和使 ...

  3. JAVA 1.7并发之Fork/Join框架

    在之前的博文里有说过executor框架,其实Fork/Join就是继承executor的升级版啦 executor用于创建一个线程池,但是需要手动的添加任务,如果需要将大型任务分治,显然比较麻烦 而 ...

  4. spring 学习 requestMapping

    1:    @RequestMapping:处理请求地址映射的请求,有6个属性? `         value:   URL 地址  method:   GET/POST/PUT/DELETE co ...

  5. stm32之外设控制

    本文将提到以下内容: 蜂鸣器 按键控制 电容触摸 温度传感器 红外 TFTLCD触摸屏 MPU6050传感器 SPI-FLASH SDIO_SD卡 ucos-III移植 一.蜂鸣器 蜂鸣器是一种一体化 ...

  6. Web Pages(单页面模型)

    .NET 是一套框架,用来个HTML.JS.CSS和服务器端脚本构建网页和网站. 可以有三种开发模式:Web Pages(单页面模型).MVC(模型视图控制器).Web Forms(事件驱动模型) W ...

  7. Spring示例工程

    ---------------siwuxie095                                 创建一个基于 Spring IoC 的小程序的步骤:     建立 Spring 工 ...

  8. mysql中有多少种日志

    Mysql的日志包括如下几种日志: 错误日志 普通查询日志 二进制日志 慢查询日志 Mysql版本 此文档测试mysql的版本为 mysql -V 错误日志 error log Mysql错误日志主要 ...

  9. RStudio版本管理 整合Git

    本文为原创,转载注明出处. 系统环境: win7 x64 R-3.1.0-win.exe RStudio-0.98.507.exe 前置条件:必须拥有github仓库: 如:https://githu ...

  10. storm操作zookeeper源码分析-cluster.clj

    storm操作zookeeper的主要函数都定义在命名空间backtype.storm.cluster中(即cluster.clj文件中).backtype.storm.cluster定义了两个重要p ...