分享一次接口性能摸底测试过程

news2024/12/19 15:52:04

接口性能测试是用于验证应用程序中的接口是否可以满足系统的性能要求的一种测试方法。确定应用程序在各种负载条件下的性能指标,例如响应时间、吞吐量、并发性能等,以便提高系统的性能和可靠性。本文主要讲述接口性能测试从前期准备、方案设计到环境搭建执行及数据收集整理的完整流程。

本文主要根据自身经历介绍如何进行接口的性能摸底测试,进行摸底测试前需要进行哪些准备,如何执行,执行后结果分析与测试报告输出。

1 确定测试目标

明确性能摸底测试的目标,确定要测试的接口和预估性能指标,例如评估接口的响应时间、吞吐量、并发性能等性能指标;服务稳定性、资源消耗情况评估。可以从如下方面了解性能需求:

1、项目立项时定义的性能指标

2、产品或运营人员站在用户角度提测的性能需求

3、项目技术负责人从技术角度直接提测的性能需求

2 收集业务需求
2.1 系统未上线或新上线用户数据量少

与产品、项目侧沟通确认预计试用推广后正常使用该系统的用户量、活跃用户比例、系统工作时长,单业务每人每天平均调用次数和预估目标TPS,可参考下表。

在这里插入图片描述

2.2 系统已上线有稳定用户量

1、若系统已经投入使用且有一定的用户数据量,则与运维人员沟通拉取现网真实业务请求数据,详细要求可参考如下表格

图片

2、业务选取原则如下:

1)系统选取占总业务量80%的业务,做为基础业务模型;

2)据业务量大小选取典型业务,一般通过统计现网系统业务量排序TOP10、TOP20确定;

3)选取现网系统中消耗资源最多,或者耗时最长的业务;

4)选取现网系统中业务路径最长的业务;

5)选取现网系统容易发生故障的业务;

6)为满足其他特殊测试目标需要选取的业务。

2.3 环境调研

1、系统架构调研:

图片

2、服务器配置调研:

图片
3、数据库配置调研

图片

2.4 铺底数据调研
2.4.1 铺底数据量调研

1、对于已上线且成熟的系统,数据库表的数据量可由现网获取;

2、对于未上线或刚上线的新系统,数据库中数据量相对较少,系统整体响应时间很快。随着业务的持续开展,数据量会成倍地增加,业务系统的相关操作响应时间会因为数据的快速增长等原因变长。因此,在性能测试时,需要加入相当规模的铺底数据,来模拟未来几年业务增长条件下系统相关操作的性能表现。可与产品、研发和业务方共同评估系统上线后2年后数据库的数据量,可根据业务正常推广后面向客户群数量估算;(估算方法可参考:面向客户群数量为M,每个用户产生数据量N条,该表的数据量为M*N) 。

图片

2.4.2 铺底数据检查注意事项

1、数据量是否合理:数据量需要预估一下未来几年的数据量,来进行数据构造

2、数据构造尽可能贴合实际使用情况

3、数据分布是否合理

1)有的是数据库集群,数据的分片需要检查一下构造的数据分布是否均匀,每台服务器上分布的数据量是否差异很大;

2)查看是否有数据集中的问题,比如有一个查询交易,这个数据分为a、b两种类型。

3.1 测试场景设计

根据需要压测的业务和性能期望,分别进行基准场景、单业务压测场景、混合测试场景和稳定性场景设计详细的测试方法。

3.1.1 基准测试场景

获取单个业务在无压力的情况下的基准响应时间及验证测试数据正确性,作为其他场景的参考依据。一般情况下,建议一个脚本(线程)只包含一个完整的业务,不要把多个业务放到一个脚本中。因为,不同的业务其响应时间会不同,响应时间较长的业务会成为“瓶颈”。

3.1.2 单业务测试场景

单业务负载的场景是为了找到单个业务的最优TPS,检测单业务在并发情况下是否存在性能瓶颈。

单业务最优的衡量标准通常以应用或数据库等系统的CPU使用率不大于70%为标准。一般在生产上运行的应用,如果CPU使用率长期处于高水平那是非常严重的问题,应用的节点随时都可能挂掉。单业务设计压测场景可以从10个并发用户开始,执行几分钟后再增加10个用户,直到应用CPU使用率超过70%为止,找到TPS增长的拐点,确定最优TPS。

3.1.3混合测试场景

按照测试模型中的业务比例及目标TPS,对每个业务分配不同的并发用户数量,设置不同的延时,同时进行加压,通过多个子场景的不断尝试最终测试出应用能够达到的最优TPS。

3.1.4稳定性测试场景

给应用一个恒定的压力,使场景运行较长的时间,用于测试应用在长时间运行下的表现,TPS是否有较大波动、是否有错误和异常、是否存在内存溢出等。

根据业务类型不同一般会运行不同的时长,对于58这样的应用稳定性运行8小时即可,724这样的应用最好能够运行12小时以上;恒定的压力大概选择最优压力的80%为目标压力。

在这里插入图片描述

3.2 测试脚本准备

确认好测试工具和场景后就可以编写测试脚本,这里以jmeter脚本为例

1、基准压测:启动jmeter,添加线程组编写脚本,设置好基准测试时间和线程数就可执行

图片
2、设置阶梯加压: 启动jmeter,添加线程组——jp@gc - Stepping Thread Group,设置阶梯加压方法编写脚本后即可执行

图片
3、混合测试吞吐量设置:启动jmeter,添加线程组设置执行时间,添加吞吐量控制器—Throughput Controller,按一定的比例或数量分配设置每个接口的线程数,设置好后执行脚本即可

图片

4.1 测试环境要求

1、硬件配置尽量和生产环境保持一致;

2、选用与被测软件相一致的操作系统和软件平台;

3、营造相对独立的测试环境;

4、系统架构和生产环境一致。

5、和生成环境在同一局域网

4.2 数据准备

测试时需要模拟数据量,尽量跟前期调研的数据量保持一致,可以从生产库导数据,或通过Loadrunner、Jmeter、DataFactory等方法生产数据。

5.1 脚本执行

当测试方案设计评审通过后,即可开始执行,在压测机上面执行脚本的同时观察是否有报错,及时查看日志寻找报错原因,可找研发协助解决。以下举例几种比较常见的错误。

1、不要在本地进行压测,要选取合适的压测机进行测试。本地端口有限,压测线程起来就容易占满,后续的就连接不上了,会导致接口大量报错,需要修改端口回收时间。

图片
2、压测前先检查下服务磁盘空间,避免因服务磁盘空间不足导致压测中断,下图就是在压测过程中磁盘空间满了的错误和查看磁盘空间方法。

图片

图片
3、压测过程中并发增大过快等待时间过长导致的超时或接口不稳定概率性报错,此时需要查看日志找出报错的具体原因,可找研发协助排查分析

图片

图片

5.2 性能监控

在脚本执行过程中及时监控CPU使用率、内存溢出、是否有慢sql等情况

如果业务有集成监控可直接观察如Grafana平台,没有集成监控可使用服务器资源监控工具nmon、mysql性能分析工具MONyog等监控工具。

图片

5.3 慢sql监控

除了监控工具外,还可以通过数据库配置的慢sql时间和log路径查看到慢sql情况,可以让运维人员帮忙导出日志信息。

图片

5.4 结果记录

测试完成后记录过程数据,便于分析统计。可以通过jmeter查看tps和响应时间趋势。查看tps选择监听器jp@gc - Transactions per Second;查看响应时间选择监听器jp@gc - Response Times Over Time(需要安装jar包:将JmeterPlugins-Standard.jar和JmeterPlugins-Extras.jar放到jmeter安装路径/lib/ext中)

图片

将测试的数据收集后进行整理分析,与预期结果进行对比,判断性能指标是否达到期望,并提出改进意见。

图片
本文详细描述了接口性能摸底测试的完整链路,以及测试过程中可能遇到的问题和解决方法,希望对想要学习或需要进行接口性能测试的业务侧人员提供设计思路和指导。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】机器学习的基本分类-无监督学习-t-SNE(t-分布随机邻域嵌入)

t-SNE(t-分布随机邻域嵌入) t-SNE(t-distributed Stochastic Neighbor Embedding)是一种用于降维的非线性技术,常用于高维数据的可视化。它特别适合展示高维数据在二维或三维空间中的分布结构,同时能够很好…

【教学类-83-03】20241218立体书盘旋蛇3.0——圆点蛇1(蚊香形)

背景需求: 制作儿童简易立体书贺卡 【教学类-83-01】20241215立体书三角嘴1.0——小鸡(正菱形嘴)-CSDN博客文章浏览阅读1k次,点赞24次,收藏18次。【教学类-83-01】20241215立体书三角嘴1.0——小鸡(正菱形…

监控视频汇聚融合云平台一站式解决视频资源管理痛点

随着5G技术的广泛应用,各领域都在通信技术加持下通过海量终端设备收集了大量视频、图像等物联网数据,并通过人工智能、大数据、视频监控等技术方式来让我们的世界更安全、更高效。然而,随着数字化建设和生产经营管理活动的长期开展&#xff0…

JAVA 零拷贝技术和主流中间件零拷贝技术应用

目录 介绍Java代码里面有哪些零拷贝技术java 中文件读写方式主要分为什么是FileChannelmmap实现sendfile实现 文件IO实战需求代码编写实战IOTest.java 文件上传阿里云,测试运行代码看耗时为啥带buffer的IO比普通IO性能高?BufferedInputStream为啥性能高点…

云灾备技术

目录 云灾备分类与定义 云容灾定义与主要应用场景 云容灾定义 应用场景 云备份定义与主要应用场景 云备份定义 应用场景 云容灾参考模型与关键技术 云备份参考模型与关键技术 云灾备分类与定义 云容灾技术是指保护云数据中心业务持续性的灾备技术,它是云灾…

进程通信方式---共享映射区(无血缘关系用的)

5.共享映射区(无血缘关系用的) 文章目录 5.共享映射区(无血缘关系用的)1.概述2.mmap&&munmap函数3.mmap注意事项4.mmap实现进程通信父子进程练习 无血缘关系 5.mmap匿名映射区 1.概述 原理:共享映射区是将文件…

leetcode 面试经典 150 题:长度最小的子数组

链接长度最小的子数组题序号209题型数组解题方法滑动窗口难度中等 题目 给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件…

代码随想录day22 | 回溯算法理论基础 leetcode 77.组合 77.组合 加剪枝操作 216.组合总和III 17.电话号码的字母组合

DAY22 回溯算法开始 学到目前最烧脑的一天 回溯算法理论基础 任何回溯算法都可以抽象成一个树结构 理论基础 什么是回溯法 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。 在二叉树系列中,我们已经不止一次,提到了回溯 回溯是递归的副…

画一颗随机数

代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>codePen - Random Tree</title> </head> <body><canvas></canvas><script>const canvas doc…

牛客周赛 Round 72 题解

本次牛客最后一个线段树之前我也没碰到过&#xff0c;等后续复习到线段树再把那个题当例题发出来 小红的01串&#xff08;一&#xff09; 思路&#xff1a;正常模拟&#xff0c;从前往后遍历一遍去统计即可 #include<bits/stdc.h> using namespace std; #define int lo…

[x86 ubuntu22.04]投影模式选择“只使用外部”,外部edp屏幕无背光

1 问题描述 CPU&#xff1a;G6900E OS&#xff1a;ubuntu22.04 Kernel&#xff1a;6.8.0-49-generic 系统下有两个一样的 edp 屏幕&#xff0c;投影模式选择“只使用外部”&#xff0c;内部 edp 屏幕灭&#xff0c;外部 edp 屏幕无背光。DP-1 是外部 edp 屏幕&#xff0c;eDP-1…

清理C盘小记

突然C盘就爆满了&#xff0c;想当初还是给他预留了120G的空间&#xff0c;感觉到现在也不够用了&#xff0c;担心出现死机的情况就赶紧进行了清理。有一说一&#xff0c;清理回收站是真的有用。 参考&#xff1a;C盘清理指南&#xff0c;清理出30G起&#xff0c;超详细总结&am…

Docker:Docker Compose(补充三)

Docker&#xff1a;Docker Compose 1. Docker Compose 批量管理容器的工具 1. Docker Compose 批量管理容器的工具 Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 文件来配置应用服务&#xff0c;它允许用户编排、组合和配置多个容器的部署…

lightRAG 论文阅读笔记

论文原文 https://arxiv.org/pdf/2410.05779v1 这里我先说一下自己的感受&#xff0c;这篇论文整体看下来&#xff0c;没有太多惊艳的地方。核心就是利用知识图谱&#xff0c;通过模型对文档抽取实体和关系。 然后基于此来构建查询。核心问题还是在解决知识之间的连接问题。 论…

Visual studio的AI插件-通义灵码

通义灵码 TONGYI Lingma 兼容 Visual Studio、Visual Studio Code、JetBrains IDEs 等主流 IDE&#xff1b;支持 Java、Python、Go、C/C、C#、JavaScript、TypeScript、PHP、Ruby、Rust、Scala 等主流编程语言。 安装 打开扩展管理器&#xff0c;搜送“TONGYI Lingma”&…

shutil 文件拷贝copy - python 实现

DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” -------------------------------------------------------------…

attack xv6

思路 被这个实验折磨了两天&#xff0c;可能是2024新出的一个实验内容&#xff0c;网上资料少&#xff0c;参考了一篇仅有的博客&#xff0c;吭哧吭哧分析出来了个大概吧…在此记录一下&#xff0c;以便帮助有需要的人。 attack xv6的ans只有几行代码&#xff0c;根据实验描述…

Flink CDC实时同步mysql数据

官方参考资料&#xff1a; https://nightlies.apache.org/flink/flink-cdc-docs-master/zh/docs/connectors/flink-sources/mysql-cdc/ Apache Flink 的 Change Data Capture (CDC) 是一种用于捕获数据库变化&#xff08;如插入、更新和删除操作&#xff09;的技术。Flink CDC…

eclipse 如何设置项目、不同类型文件的 utf8 编码

编码问题一直是软件开发中让人头疼的小细节&#xff0c;尤其是团队协作中&#xff0c;若编码格式不统一&#xff0c;乱码问题便会频繁出现。那么如何在 Eclipse 中统一设置项目和文件的 UTF-8 编码&#xff0c;避免因编码问题造成不必要的困扰呢&#xff1f;今天&#xff0c;我…