产品性能测试入门秘籍

news/2024/5/19 9:47:00/文章来源:https://blog.csdn.net/Hyperchain/article/details/126975715

前言
在《一体化测试指标可视工程实践》中,我们分享了以趣链BaaS系统为例的测试实践路径,在后台收到读者们关于性能测试的留言。为此,本期将围绕如何进行产品性能测试这一话题,展开详细描述。

众所周知,一个优秀的系统/产品必然是极其注重用户体验的,因此在任意运行环境内,提供流畅、丝滑、平稳的服务能力至关重要,而性能测试则是实现上述能力的重要途径。在实践中,我们可以从如何设计全面的性能测试采集指标?如何实现性能可视化?这两个关键问题出发。

在采集指标方面,常见的有接口响应时间、TPS、成功率、接口请求总数、网络进出等等。但是性能问题又与CPU、内存、磁盘等数据资源的使用情况息息相关,例如常见的内存泄漏/内存溢出会导致系统崩溃卡顿,而网络传输过慢则容易影响接口请求速度,因此定位性能问题需要全方位排查各类影响因素。

一体化核心框架
在这里插入图片描述
上图所示,一体化测试中不同测试类型、测试实施均可抽象为:数据生成、数据存储、数据展示三个部分,下面将以性能测试实施为例,详细介绍上述三个核心环节的设计。

性能测试关键能力设计

数据生成

数据生成指通过采集器配合性能测试脚本进行压测生成数据,采集器即为性能测试的压测工具,目前,市面上已有大量优秀的开源性能测试工具,如:Apache JMeter,Gatling,Locust。那么我们该如何选取压测工具呢?笔者认为可从以下几方面考虑:
(1)是否支持被测系统运营的平台(软硬件环境、数据库环境);
(2)是否支持监控以及数据传输;
(3)是否能满足系统自定义的测试场景;
(4)维护成本;

数据存储

数据存储指将采集到的数据存储到数据库内,鉴于性能测试的特殊性,需要选用时序数据库,实现高性能地查询与存储时序型数据。当前市场上典型的时序数据库包括InfluxDB,KDB+,Prometheus,Graphite等。其中, InfluxDB被广泛应用于存储平台/系统的监控数据、实时数据等场景,该数据库支持任意类型的事件数据,也可对海量数据进行实时计算,是较为不错的数据存储工具。

数据展示

数据可视化展示的核心是:希望所有信息尽可能透明,并帮助测试人员直观展示产品的实际性能结果,便于产品研发及缺陷排查定位。可将数据展示与数据存储的数据源结合,借助自定义的数据查询语句生成数据展示模板,用于创建、共享、浏览结果数据。市场上此类开源可视化亦是非常丰富,但各产品的侧重点不同, 有以查询为主、报表为主,或可视化为主等不同类型。以Grafana为例,其作为可视化大型测量数据的开源程序,提供强大的可视化面板(Dashboard)并支持自定义图表和布局展示,包含度量仪表盘和图形编辑器,且支持Graphite、Zabbix、InfluxDB、Prometheus和OpenTSDB等数据源。

性能测试一体化实施衔接

为了实现性能测试一体化实施,数据生成模块需要具备数据采集和传输等能力,目前市面上的压测工具有Load Runner、Jmeter、Loadster、WebLoad等,从压测场景和可维护性等方面考虑,jmeter的可移植性、多线程更符合压测的场景,因此可通过jmeter脚本等工具进行自定义测试指标采集。

例如,在BaaS平台性能指标采集时,针对BaaS特有功能模块涉及到的服务进行服务资源使用情况的数据采集,结合性能基础指标采集tps、响应时间、接口请求数、网络传输速率等指标,通过后置监听器实时传输数据至数据存储模块;

数据存储模块需要具备实时存储海量数据的能力,考虑到性能测试的数据存储量较大,为了达到性能测试数据实时传输实时可视化展示的效果,需选择时序数据库以存储数据,目前市场上典型的时序数据库有prometheus、influxdb、KDB+等。在实践中,可针对数据采集层进行扩展,借助自定义配置实现数据采集模块灵活兼容上述不同类型的数据库,实现数据库选择的多样性可;

最后是数据展示模块,可充分借助各类开源可视化工具实现查询能力的扩展,适配数据存储层的各类数据查询语句,针对特定的测试场景自定义查询语句进行可视化图表展示。以Grafana适配为例,其提供大量的dashboard面板,具有简单、高效、易操作等特点,可通过自定义Json文件构造符合特定测试场景的dashboard展示,满足性能测试结果直观展示,此外还可支持指标面板变更、多集群共享面板等能力。
在这里插入图片描述

性能测试一体化实操

以Baas测试为例,数据压测选取jmeter作为压测工具,测试脚本按照Baas功能模块划分:主机管理、联盟链管理、监控模块,区块浏览器模块等分别运行各功能模块脚本进行压测,数据存储选取选择influxdb时序数据库,数据展示则选用对应支持influxdb数据源可视化的grafana。

▲jmeter压测并实时传输数据

jmeter的【后置监听器】负责将jmeter压测过程中数据进行实时传输至influxdb,整个数据传输的过程是如何实现的呢?具体的数据生成逻辑如下:

private void addMetrics(String transaction, SamplerMetric metric) {
// FOR ALL STATUS
addMetric(transaction, metric.getTotal(), metric.getSentBytes(), metric.getReceivedBytes(), TAG_ALL, metric.getAllMean(), metric.getAllMinTime(),
metric.getAllMaxTime(), allPercentiles.values(), metric::getAllPercentile);
// FOR OK STATUS
addMetric(transaction, metric.getSuccesses(), null, null, TAG_OK, metric.getOkMean(), metric.getOkMinTime(),
metric.getOkMaxTime(), okPercentiles.values(), metric::getOkPercentile);
// FOR KO STATUS
addMetric(transaction, metric.getFailures(), null, null, TAG_KO, metric.getKoMean(), metric.getKoMinTime(),
metric.getKoMaxTime(), koPercentiles.values(), metric::getKoPercentile);metric.getErrors().forEach((error, count) -> addErrorMetric(transaction, error.getResponseCode(),
error.getResponseMessage(), count));
}

如下图,展示了后端监听器的参数信息。
在这里插入图片描述

以下针对后端监听器设计的关键参数信息进行了简要说明,便于大家理解相关过程。

(1)后端监听器实现选择:org.apache.jmeter.visualizers.backend.influxdbBackendListenerClient;
(2)influxdburl填写influx URL地址以及数据库名,eg:http://influxdb.performance.blocface.BaaS.hyperchain.cn/write?db=$数据库名;
(3)application:变量名;
(4)measurement:数据库表名,默认情况下会自动生成表名,不需要在数据库内单独建立;
(5)summaryonly:为true的情况下只输出所有请求的集合数据报告。为false的情况下,输出每条数据的详细报告,我们测试中选择为false;
(6)summaryRegex:正则表达式将与样本名称匹配并发送到后端,默认匹配所有;
(7)testtitle:测试名称,默认设置的是 Test Name;
(8)percentiles:要发送到后端的百分位数,多个值已 ;分割。填写:90;95;99;
(9)eventTags:自定义标签,测试填写参数为:1;

▲数据实时存储

jmeter实时传输的数据均会被存储至influxdb。需要注意的是,该过程会生成两个Measurements,分别为jmeter和events,其中jmeter表内存储了压测过程中生成的所有数据指标,而events则负责记录过程中的事件信息(在本过程中不是重点环节,不做详细展开)。

▲数据可视化展示

Grafana可直接将influxdb作为数据采集的数据源,支持通过自定义SQL按需查询各类指标。实践中, 可先执行添加数据源的操作:数据源(data source)进入数据库资源页面,测试人员通过添加数据源(add data source),输入数据库信息(influxdb url、database)。

随后,进行可视化页面编辑操作:例如,按需编辑dashboard、添加panel,grafana的panel支持表格(table)、列表(alert list)、热图(Heatmap)等多种可视化展示的方式,充分满足各类展示需求。

此外,测试人员还可以通过自定义编写查询语句来控制面板展示不同的图表。需要注意的是,不同的数据源可对应不同的Query Editor。假设 Grafana 与另一个时序数据库(Prometheus) 结合使用时,对应的查询语句时就换成了PromQL。

如下图所示,其application即为jmeter后置监听器内的application参数,transaction为jmeter脚本内的所有请求名称。
在这里插入图片描述
最终本例的性能一体化测试的结果节选如下:
在这里插入图片描述
总结
本文介绍了性能可视化测试的基本工具与路径,但这还远远不够,实践中往往需要根据不同的性能测试指标持续优化可视化页面,提升测试数据透明性,缩短测试问题定位排查时间,欢迎大家留言讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_11607.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cobalt Strike(八)权限提升

1.BypassUAC UAC 是微软在 Windows Vista 以后版本引入的一种安全机制,通过 UAC,应用程序和任务可始终在非管理员帐户的安全上下文中运行,除非管理员特别授予管理员级别的系统访问权限。UAC 可以阻止未经授权的应用程序自动进行安装&#xf…

【最新计算机毕业设计】Java springboot大学生体质测评系统

基于SpringBoot的大学生体质测评系统 提供最新的计算机毕业设计源代码及帮助指导,公众号:一点毕设! 大学生体质测试管理系统提供给用户一个简单方便体质测试管理信息,通过留言区互动更方便。本系统采用了B/S体系的结构&#xff0…

吔队列了你——写点单调队列优化DP

5_Lei:有没有变态一点的图啊单调队列优化DP(补) 前言: DP显然是OI中的一个重要且高频的考点,然而友善的出题人大多不会只考一个推转移方程,往往需要结合一些优化。 单调队列: 看这个的应该都会,不写了,扔个板子上去。 P1886 滑动窗口 /【模板】单调队列 优化DP: 显然…

行业话题 | 天天坐地铁,你知道BIM在地铁中的应用吗

近年来,随着经济水平的不断提高和城市化进程的加快,我国地铁建设规模也在不断加大,而地铁车站是地铁施工的难点和控制性工程,具有施工空间狭小,技术复杂等特点。 由于施工现场布置制约因素多,二维施工现场平…

究竟都是谁在使用?OpenMLDB 落地案例大起底

本文整理自第四范式资深架构师、OpenMLDB PMC 卢冕在第四范式技术日「高效落地的AI开源生态」分论坛的主题分享——《开源机器学习数据库 OpenMLDB:提供线上线下一致的生产特征平台》。内容包括: 感恩 OpenMLDB 贡献者OpenMLDB 发展历程OpenMLDB 架构设…

WinForms时代结束,报表控件FastReport.NET开启FastReport.Core.Skia 时代!

要创建高质量的报告并将其正确导出为不同的格式(PDF、Word、Excel 等),必须使用图形引擎。从 .NET Framework 的最早版本开始,Microsoft 就将 GDI 及其包装器用作 System.Drawing 库的一部分。FastReport.NET长期以来一直使用相同…

第一篇文章 mybatis 综述

mybatis框架可以让程序员只需专注于写sql语句 框架就是半成品,将公共的部分固定下来,非公共的部分你自己开发就行 三层架构: 界面层Conttroller层:用来接收客户端的输入,调用业务逻辑层Service层,返回结果…

关于Facebook营销的十个常见问题,一次性讲清楚!

--- NO.1--- 为什么做Facebook营销? 作为全球最大的社交媒体,Facebook月活用户已达到了惊人的29亿,并且这个数据还在持续增长中,这意味着全球几乎一半人都会出现在Facebook上。很多企业对Facebook的关注点,也从是否做…

VMware Explore 大会发布重磅云上技术之外,VMware 有哪些前沿探索?

编辑 | 宋慧 出品 | CSDN 云计算 最近,VMware 举办了年度技术大会 VMware Explore,重磅发布了其在多云趋势下的多个技术产品组合,包含了云基础架构、云原生、网络与安全、远程混合办公等等。不过,在这些优势领域的产品之外&#…

系统架构与设计(1)- 权限系统的设计以及主流的五种权限模型

作者:码猿技术专栏来源:https://juejin.cn/post/7121977695197970463 ------------------------------------------------------------------- 这篇文章就来介绍一下权限系统的设计以及主流的五种权限模型。权限管控可以通俗的理解为权力限制,即不同的人由于拥有不同权力,他…

阿里云国际站代理商:FFmpeg 处理音视频文件的常用方法

阿里云代理商(聚搜云)专业服务于阿里云ECS服务器采购、阿里云Ddos采购、阿里云waf采购、对象存储OSS、阿里云企业邮箱采购、阿里云国际站代理商、阿里云国际站充值、云安全中心(态势感知)、阿里云高可用云数据库RDS、web应用云waf…

YOLO系列目标检测算法-Scaled-YOLOv4

YOLO系列目标检测算法目录 YOLO系列目标检测算法总结对比YOLOv1YOLOv2YOLOv3YOLOv4 Scaled-YOLOv4- 文章链接 YOLOv5- 文章链接 YOLOv6- 文章链接 YOLOv7- 文章链接 本文总结: 提出一种网络缩放方法,使得基于CSP的YOLOv4可以上下伸缩,以适…

2019Linux系统教程189讲-08_基于LAMP架构部署商城系统

任务需求 1、任务具体要求 使用yum(dnf)工具一键部署LAMP环境 发布电商项目上线 ① 能够实现web界面注册会员账号 ② 能够实现web界面进行后台商品及会员的管理 2、项目选型 ㈠ PHPSHE商城系统概述 PHPSHE商城系统是将商品管理、品牌管理、规格管理、折扣管理、拼团管理、…

【Electron】常用小功能实现合集

一、前言 本篇主要介绍在electron项目开发过程中,一些实用小功能点的实现。比如设置开机自启动、只允许打开一个应用、设置electron项目基地为中文、获取当前的系统数据等等。 二、功能点 接下来咱们就逐一来说一说这些功能点是如何实现的。 1.设置应用开机自启…

MySQL索引结构B+树

数据结构图示例网站:Data Structure Visualization 索引数据结构: 二叉树 红黑树 Hash表 B-Tree B-Tree,特点:(每个节点都存储key和data,叶子节点指针为null) 1、叶节点具有相同的深度&#x…

y140.第八章 Servless和Knative从入门到精通 -- Serving及实践(四)

5.Serving及实践 5.1 Knative Serving工作模式 Serving的工作模式,上图从一个更大的全景图上了解Serving以及它与istio进行结合的时候它们的工作逻辑,Serving有4个关键组件,最关键的组件就是kservice,kservice本身会有两个非常重要的组件组成,一个叫做configuration也就是…

linux驱动_uart

linux uart驱动基础知识下面链接这篇文章写得很完备,我没必要再介绍了,就写目前项目的代码,方便以后重温。 Linux的tty架构及UART驱动详解 本项目驱动文件包括: /kernel/drivers/sstar/serial/ms_uart.c # 主要实现文件 /kerne…

HTML 头部

html 中 <head> 元素包含了所有的头部标签元素。在 <head> 元素中可以插入脚本(scripts)、样式文件(CSS)及各种 meta 信息。 一般来说&#xff0c;可以添加在头部区域的元素标签有&#xff1a;<title>、<style>、<meta>、<link>、<scri…

借助实例,轻松掌握 Makefile

实例1&#xff1a;hello world 编辑 Makefile all:echo "hello world"编译执行 $ make $ make all 结果输出 语法说明 echo 前面必须只有 TAB&#xff08;即你键盘上的 TAB键&#xff09;&#xff0c;且至少有一个 TAB&#xff0c;不能用空格代替。 实例2&#xff…

python相关知识的巩固-《python与量化投资从基础到实战》的python基础部分

python与量化投资从基础到实战数据格式numpypandasSciPy 插值 积分 优化 图像处理 特殊函数OLS 回归分析插值正态性检验凸优化matplotlib 绘图的始祖&#xff0c;适合绘制简单的统计图表。Seaborn 绘制美观的图表Scikit-Learn 机器学习常用的第三方模块决策树支持向量机朴素贝叶…