阿里8年经验之谈 —— 分享一次接口性能摸底测试过程!

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

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

确定测试目标

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

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

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

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

收集业务需求

2.1 系统未上线或新上线用户数据量少

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

图片

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

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

图片

2、业务选取原则如下:

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

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

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

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

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

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

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

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是否有较大波动、是否有错误和异常、是否存在内存溢出等。

根据业务类型不同一般会运行不同的时长,对于5*8这样的应用稳定性运行8小时即可,7*24这样的应用最好能够运行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中)

图片

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

-

图片

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

END今天的分享就到此结束了,点赞关注不迷路~

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

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

相关文章

SQL常见函数整理 —— LAG() 向上偏移

1. 用法 窗口函数,用于访问窗口中当前行之前的行的数据。该函数可以根据需要计算当前行之前的值,使我们能够轻松地比较不同行之间的差异和变化。 2. 基本语法 LAG(column, offset, default_value) OVER (ORDER BY column)column:代表在返回…

【香橙派】实战记录1——简介及烧录 Linux 镜像

文章目录 一、简介1、参数2、结构3、其他配件4、下载资料 二、基于 Windows PC 将 Linux 镜像烧写到 TF 卡的方法1、使用 balenaEtcher 烧录 Linux 镜像的方法2、效果 一、简介 Orange Pi Zero 3 香橙派是一款开源的单板卡片电脑, 新一代的arm64开发板,…

百度搜索万亿规模特征计算系统实践

作者 | Jay 导读 本文主要介绍百度搜索在全网万亿级规模内容做内容理解的工程实践,涉及机器学习工程化、资源调度、存储优化等多个Topic。 全文6648字,预计阅读时间17分钟。 01 业务背景 百度收录了互联网海量内容,要索引这些内容&#xff0…

如果文件已经存在与git本地库中,配置gitignore能否将其从git库中删除

想把项目的前后台代码放到同一个git仓库管理,由于未设置.gitignore,就使用vscode做stage操作(相当于git add . 命令 其中【.】点表示全部文件),观察将要入库的文件发现,node_modules、target、.idea、log等…

无服务器开发实例|微服务向无服务器架构演进的探索

在当今的技术环境中,许多组织已经从构建单一的应用程序转变为采用微服务架构。微服务架构是将服务分解成多个较小的应用程序,这些应用程序可以独立开发、设计和运行。这些被拆分的小的应用程序相互协作和通信,为用户提供全面的服务。在设计和…

C#的类型转换

目录 一、简介二、基本类型转换1.整数类型转换1.隐式转换2.显式转换 2.浮点类型转换1.隐式转换2.显式转换 3.字符类型转换1.字符到整数的转换2.整数到字符的转换 4.布尔类型转换1.布尔到整数的转换2.整数到布尔的转换 三、隐式转换和显式转换四、装箱和拆箱五、自定义类型转换六…

Java核心知识点整理大全7-笔记

目录 4.1.9. JAVA 锁 4.1.9.1. 乐观锁 4.1.9.2. 悲观锁 4.1.9.3. 自旋锁 4.1.9.4. Synchronized 同步锁 Synchronized 作用范围 Synchronized 核心组件 Synchronized 实现 4.1.9.5. ReentrantLock Lock 接口的主要方法 非公平锁 公平锁 ReentrantLock 与 synchronized …

腾讯云COS+picgo+typora 图床搭建与自动上传

1、腾讯云 COS 腾讯云活动 COS新用户专享 COS 操作步骤 1、点击 创建桶,完善信息 点击下一步,剩下的配置可自己配置 2、picgo 官网地址 2.3.1版本下载地址 现在稳定版本是2.3.1 相关连接 腾讯云密钥设置地址picgo官网地址2.3.1版本下载地址

解决k8s node节点报错: Failed to watch *v1.Secret: unknown

现象: 这个现象是发生在k8s集群证书过期,重新续签证书以后。 记得master节点的/etc/kubernetes/kubelet.conf文件已经复制到node节点了。 但是为什么还是报这个错,然后运行证书检查命令看一下: 看样子是差/etc/kubernetes/pki/…

深入 Django 的 URL 分发器

概要 在 Django 的 MVC 架构中,URL 分发器扮演着至关重要的角色,它负责将用户的请求路由到相应的视图函数或类。这一机制不仅保证了 Django 应用的高度可扩展性,还为开发者提供了灵活的 URL 设计能力。本文将详细介绍 Django 中的 URL 分发器…

麒麟信安与MatrixOne完成兼容互认

近日,超融合异构云原生数据库MatrixOne企业版软件V1.0完成了与欧拉开源操作系统(openEuler简称“欧拉”)、麒麟信安操作系统系列产品和虚拟化平台的相互兼容认证,通过了欧拉兼容性测评,获得了《openEuler技术测评证书》…

环保回收信息展示预约小程序的效果如何

人们每天在线上的时间非常多,他们会通过线上寻找信息,而环保回收企业也在通过线上寻找客户,但受限于平台限制,无论引流获客还是营销互动、或是数据分析及全面管理方面都面对难题,其中微信/百度/快手/抖音/支付宝/快手等…

kolla 安装多节点openstack kolla部署openstack

Kolla 概述: Kolla是OpenStack下用于自动化部署的一个项目,它基于docker和ansible来实现,其中docker主要负责镜像制作和容器管理,ansible主要负责环境的部署和管理。Kolla实际上分为两部分:Kolla部分提供了生产环境级…

系列十三、分支合并框架

一、概述 Fork:把一个复杂任务进行分拆,大事化小,Join:把分拆任务的结果进行合并 二、相关类 2.1、ForkJoinPool 分支合并池,类比线程池。 2.2、ForkJoinTask ForkJoinTask,类比 FutureTask。 2.3、Recur…

leetcode——设计循环队列

设计循环队列 这个题目在这里小编只分享一个解题思路,因为还有一个思路小编还在尝试,一直过不了,还在这里不断尝试,等我试出来的时候我在分享给大家,首先我们在这里给出的是数组的形式,后面在分享单链表的思…

ProTable高级表格获取表单数据

隐藏高级表格中的收起按钮 手动控制高级表格中的搜索按钮 获取高级表格中的表单数据 Forminstance 引入 然后在代码中定义 const refForm useRef(); 使用 refForm.current.getFileDsValue();

单体进化微服务:拆分、注册、调用、网关、过滤、治理、分布式事务

这里写目录标题 基本介绍生产-消费-网关父依赖生产者服务消费者服务网关服务common服务 感想 基本介绍 Spring Cloud 是一个用于构建分布式系统和微服务架构的开发工具包。它提供了一系列的功能和组件,用于解决微服务架构中的常见问题,如服务注册与发现…

Git精讲

Git基本操作 创建Git本地仓库 git initgit clone 配置Git git config [--global] user.name "Your Name" git config [--global] user.email "emailexample.com"–global是一个可选项。如果使用了该选项,表示这台机器上所有的Git仓库都会使…

快时尚品牌Halara登上TikTok美国小店榜Top 5,运动健身风靡TikTok

TikTok Shop美国电商数据周榜(11/06-12)已出,具体信息如下: 上周总GMV达到5850万美元,日均出单840万美元;单日出单最高达2110万美元,是当前美国单日最高销售额; 截至11月12日&…

SpringBoot :ch01 项目结构

前言 在本系列博客中,我们将深入探讨 Spring Boot 项目结构的各个方面,并探讨如何利用这些结构来构建健壮、可扩展的应用程序。通过深入了解 Spring Boot 项目结构,我们可以更好地利用 Spring Boot 的优势,提高开发效率&#xff…