在本文中,我将解释如何使用JMeter + InfluxDB + Grafana得到实时性能测试结果。sql
请注意,此主题太大,没法涵盖一篇文章中的全部内容。因此,我试图提供与TestAutomationGuru的其余文章的连接,这些文章可能与本文有关。请尽量检查一切。shell
多年前,当我之前运行JMeter测试时,我没法理解测试执行期间应用程序的性能。我老是不得不等待测试完成。这有点烦人 - 特别是在长时间运行的测试中。有时,我可能不得不连续2/3天进行浸泡测试。数据库
在某些时候,JMeter 在非GUI模式下启用了2.11版本的汇总器输出。运行JMeter测试时,您能够看到如下输出。apache
它有点帮助,上面的摘要提供了测试运行时须要的大量信息。它显示每30秒的 最小,最大,平均响应时间,吞吐量,错误计数,活动用户数(能够在jmeter.properties中更改摘要间隔)。后端
可是当测试运行几个小时而且每30秒在控制台中有大量的汇总器输出时,可能有点难以理解结果。例如,若是我想知道速率降低的活动用户数,我须要很是仔细地逐行检查汇总器输出!我没法与开发团队/应用程序架构师分享结果,由于结果不是很是用户友好的格式。要建立一个漂亮的图形,我须要等待JMeter测试完成。浏览器
所以,我没有在控制台中编写这个摘要输出,而是修改了JMeter的摘要类以将结果发送到数据库 - 这样我就能够经过查询数据库来建立一个漂亮的图表。对咱们的团队来讲,实时分析性能测试结果很是有帮助。JMeter还在2.13版本中添加了一个单独的监听器,它将数据发送到数据库,这能够帮助咱们得到实时结果。bash
我将介绍JMeter的方法和个人方法。你能够遵循其中任何一个。不是都!!服务器
JMeter v2.13引入了一个新的监听器,用于在测试运行时将结果发送到时间序列数据库(Influxdb / graphite)。经过配置Grafana(一个开源指标仪表板)链接到Influxdb / graphite,咱们能够建立漂亮的图形,这将帮助咱们在JMeter运行测试时得到实时指标!架构
时间序列数据库:时间序列是随时间变化采集的数据序列。时序数据库是处理时间序列数据的软件应用程序。想象它就像一个sql表,其中时间是主键!app
咱们将在本文中使用InfluxDB 做为咱们的数据库。点击此处 了解更多信息。
您可能想知道的术语不多:
influxd config
[[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
influxd -config /path/to/config/file
一旦InfluxDB 启动并运行,下一步就是建立一个JMeter测试,将测试数据发送到InfluxDB。
influx Connected to http://localhost:8086 version 1.3.6 InfluxDB shell version: 1.3.6
SHOW DATABASES name: databases name ---- _internal jmeter
USE jmeter Using database jmeter
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!恭喜。如今是咱们设置Grafana服务器从测试结果建立图表的时候了。
但愿你如今有了这个主意!你能够从这里开始建立不一样的指标!
我为个人应用程序建立了不错的仪表板。您能够继续阅读本文,下载并使用它们!
JMeter的Backend Listener真正帮助咱们得到实时性能测试结果。然而,它创造了大量的测量。'min','max'值可能与您的汇总报告一致。可是你不能期望百分位数,吞吐量,平均值与你的汇总报告相匹配!! 由于此侦听器会为每一个给定的间隔(例如每1秒)计算这些值。随着时间的推移,你基本上能够得到吞吐量。不是整个测试期间。因此,它不匹配。
个人自定义方法帮助我按照我想要的方式得到结果。
因为上面提到的JMeter后端监听器的限制而且为了实现个人目标,我只想用我本身的实现 - 经过更新具备摘要的Apache核心库(它负责编写上面提到的聚合信息)在控制台中) - 因此只要它在控制台中写入信息,它也能够更新InfluxDB中的数据。没有为此目的建立单独的监听器彷佛对我来讲没问题,由于在测试中添加更多的监听器将消耗内存并可能影响个人测试。性能方面 - 这种方法比添加新的后端监听器表现更好,由于我没必要为计算添加任何额外的逻辑。
[http]
# Determines whether HTTP endpoint is enabled. enabled = true # The bind address used by the HTTP service. bind-address = ":8086"
influx Connected to http://localhost:8086 version 1.3.6 InfluxDB shell version: 1.3.6
CREATE DATABASE jmeter
TAG-Influx-Grafana.zip(2991次下载)
# 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
SHOW DATABASES name: databases name ---- _internal jmeter
USE jmeter Using database jmeter
show measurements name: measurements name ---- delta samples total
注意:
若是您仍然面临将数据发送到InfluxDB的问题 - 请检查此帖子以进行故障排除。
下载的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分钟才能看到插入的记录。
即便遵循了全部步骤,它也没法按预期工做?没问题; 点击此处查看排除故障的步骤。