接口性能测试,这个还真有用啊。

一、概述

性能测试按照不同视角,可以分为以下几类:

a. 用户视角的性能
用户角度感受到的网站响应速度的快和慢。从用户在浏览器输入网址/打开应用,到整个页面呈现给用户的耗时。包含了用户端发送请求,服务端收到并执行请求,返回请求,客户端收到之后渲染的总时间。

b.开发人员视角的性能

包括系统吞吐量,并发处理能力,系统稳定性,响应延迟等。如果发现有不满足要求的地方,需要定位出问题所在,并给出解决方案。
c.运维
主要关注基础设施性能和资源利用率,如网络运营商带宽能力,服务器应急配置,数据中心网络架构,服务器和网络带宽的资源利用率等。

二、为什么要做接口压力测试

1.清楚自己所提供的接口性能是多少
2.判断出系统可能存在的问题(代码,DB,cache,系统配置,容量等),提前解决
3.为设置接口的限流/熔断做参考

三、接口压力测试的局限性

接口压力测试只注重单业务的接口性能,进行压测的时候,只关注个别接口的性能。
接口大部分时间是在线下进行,可能线上线下机器配置不一样,而且线上同时在进行着各种不同的业务。
因此在线下进行接口压力测试的结果,只能作为线上配置的一个参考值。

四、谁来做接口压力测试

对接口比较熟悉的开发人员来做,这样有以下好处:
1.对接口实现比较了解,对接口中潜在的问题有一定的预判
2.比较容易对接口进行优化(业务逻辑层面和技术层面)。

五、如何做接口压力测试

通常使用 Jmeter ,loadRunner 等进行压力测试。

六、如何设计接口压力测试方案

如何确定并发数:

可以通过尝试的方式。第一次压测的时候,可以设置自己预期接口需要达到的并发数,进行压力测试。然后通过二分法进行调整。
举例:如果期望的并发数是512 ,第一次压测并发数设置为512 ,如果系统没有压力,第二次并发就尝试设置为1024。如果系统有压力,下次就设置为256。通过逐渐尝试的方式,找出当前接口的并发阈值。

如何确定总请求次数:
有时候单纯的通过并发数并不能完全发现系统的压力状况,因为并发数只能测出系统的处理能力。
但是有时随着长时间的调用,系统可能会出现其他问题。比如:随着数据量的增多,存储磁盘满了、内存缓存用光,缓存服务使用磁盘缓存而拖慢系统等情况。
为了避免这种情况,可以尝试用现有线上业务每天产生的数量乘以一定的天数(天数的大小视业务的具体情况而定,推荐180天以上),作为接口压力测试的总请求次数。

接口压力测试数据的选取:
通常随机选择数据。但是要注意重复进行压力测试对性能的影响。
比如:
第一次压测的 Id 是从2500W 到2600W 之间选择的,下次用同样的 Id 范围做压测的时候,如果接口实现中有缓存,则会很大程度影响压力测试的结果,对压力测试的解读时候,要考虑到这个因素。
另外,使用不存在的 Id 去进行压测,结果并没有太大意义。

七、压力测试报告应该包含哪些结果

接口压力测试结果

服务器压力

每次接口压力测试时,接口所在服务的服务器 cpu/jvm 使用率历史记录,jvm堆大小,响应时长图 (借助 pinpoint 查看),cpu load 值(top 命令),gc 信息等。

八、如何解读压力测试的结果

对于接口压力测试结果:

关注 响应时间是否符合要求,响应时间(前99%) 是不是在可允许的范围内。最大值是多少,是否可以容忍。 通常来说,错误百分比应该为0。

对于服务器压力:
看 cpu 使用率是否在可接受范围内,jvm 堆大小是否变化频繁,是否有 fullGC。Young GC 耗时,CPU load值是否在可接受范围内。 响应时长图是否平滑(如果有毛刺现象,需要找出原因)。

九、如何根据测试结果定位性能问题

1.响应时间不符合要求:
通过 pinpoint 观察调用链,找出耗时比较长的步骤,进行优化

2.并发数达不到要求,可以从以下几个方面进行考虑:
a 是否发生系统依赖资源争用(比如:数据库连接,业务处理线程数等)

b 业务流程/代码性能是否可以优化 c 在运行的过程中是否频繁 GC

3. CPU 使用率过高:
a 在运行的过程中是否频繁 GC

b是否发生过多的线程切换 c 程序中是否有比较耗 cpu 的代码

cpu 内存 磁盘 io 网络 io 服务器 top 命令 vmstat pidstat / iostat

sar jvm java mission Control 工具 jmap 命令,结合eclipse mat 工具进行分析

全链路:pinpoint

十、修复性能问题

除了只可能在极端压力测试情况下会发生的性能问题,并且修复代价过大的问题可以不进行修复(但是要在压力测试报告中体现出来此问题,以及解决方案),其他问题都必须进行修复。

十一、其他

如果没有专门的接口压力测试环境,记得做完接口压力测试之后,将测试数据清除(缓存,数据库,消息中间件中未消费完毕的消息 等)。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

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

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

相关文章

Python和MATLAB及C++和Fortran胶体粒子数学材料学显微镜学微观流变学及光学计算

🎯要点 二维成像拥挤胶体粒子检测算法粒子的局部结构和动力学分析椭圆粒子成链动态过程定量分析算法小颗粒的光散射和吸收活跃物质模拟群体行为提取粒子轨迹粘弹性,计算剪切模量计算悬浮液球形粒子多体流体动力学概率规划全息图跟踪和表征粒子位置、大小…

StableDiffusion|833种艺术家风格项目,提示词直接上手! AI绘画文生图直接抄!

大家好,我是画画的小强 众所周知,Stable Diffusion是一个强大的文生图模型,能够根据用户的文本描述生成高质量的图像。在这个过程中,提示词(Prompt)的选择和构造具有至关重要的作用。提示词是向模型描述你…

强化学习之Q-learning算法

前言: 在正文开始之前,首先给大家介绍一个不错的人工智能学习教程:https://www.captainbed.cn/bbs。其中包含了机器学习、深度学习、强化学习等系列教程,感兴趣的读者可以自行查阅。 一、算法介绍 Q-Learning是一种基于值函数的强…

山西农业大学20241015

02-VUE 一. Vue中常用的指令1. Vue指令概述2 Vue中指令的分类3 Vue中指令3.1 内容渲染指令3.2 条件渲染指令3.2.1 v-show3.2.2 v-if3.2.3 v-else 和 v-else-if 3.3 事件绑定指令 v-on--重要3.3.1 内联语句3.3.2 methods中的函数名 一. Vue中常用的指令 1. Vue指令概述 概念: 指…

STL --- list(C++)

本期鸡汤: “星光不负赶路人,时光不负有心人;你只管努力,剩下的交给时间。” 目录 1.list的介绍即使用 1.1list介绍 1.2list使用 1.2.1list构造 1.2.2list的iterator的使用 1.2.3list capacity 1.2.4list element access 1…

LeCun数十年经验之谈:视觉是建立AGI的核心,视频理解难点在哪?语言模型技术为何难以复用于视觉?

文字来源 | 夕小瑶科技说 AI寒武纪 大语言模型(LLM)已经接近人类水平,但视觉理解在世界范围似乎尚未突破,那么为何不能直接将LLM技术用于视觉?让AI看视频的难点在哪?如果语言是AGI必要的能力,为…

【Java 22 | 6】 深入解析Java 22 :记录(Records)增强详解

Java 22 对记录(Records)进行了重要的增强,进一步提升了这一特性在数据建模和类型安全方面的灵活性。以下是对记录类的详细介绍,包括基础概念、增强特性、使用场景、实际项目中的应用示例,以及示例代码。 1. 基础介绍…

使用js和canvas实现简单的网页贪吃蛇小游戏

玩法介绍 点击开始游戏后&#xff0c;使用键盘上的↑↓←→控制移动&#xff0c;吃到食物增加长度&#xff0c;碰到墙壁或碰到自身就游戏结束 代码实现 代码比较简单&#xff0c;直接阅读注释即可&#xff0c;复制即用 <!DOCTYPE html> <html lang"en"…

快速理解http的get和post

在网络通信中&#xff0c;HTTP 协议扮演着非常重要的角色&#xff0c;而不同的 HTTP 方法决定了客户端与服务器之间的交互方式。 这里讲一下最常用的两种方法——GET 和 POST。 一、GET 方法 GET 方法用于从服务器获取资源。 这就像去图书馆借书——你向图书馆请求一本特定的…

【JVM】内存分析工具JConsole/Visual VM

1 缘起 日常补充JVM调优&#xff0c;调优实践前需要学习一些理论做支撑&#xff0c; JVM调优三步&#xff1a;理论>GC分析>JVM调优&#xff0c; 我们会有一些玩笑话说&#xff0c;做了这么久Java开发&#xff0c;做过JVM调优吗&#xff1f; 做过&#xff0c;面试时。当然…

java中连接Mysql以及PreparedStatement如何防止sql注入

目录 JDBC 使用JDBC连接到MySQL 使用 Statement 使用 PreparedStatement Statement 和 PreparedStatement 区别 在 java 中如何连接到 MySQL 数据库&#xff0c;执行 SQL 查询&#xff0c;并处理查询结果&#xff1f; JDBC java 程序连接到 mysql&#xff0c;首先需要下…

2024年看项目管理软件与工程项目管理的奇妙融合

一、禅道在项目管理中的全面应用 禅道在产品管理方面&#xff0c;能够清晰地对产品的需求进行全方位管理。从需求的提出到详细信息的记录&#xff0c;再到状态、负责人以及完成进度的跟踪&#xff0c;都能有条不紊地进行。产品经理可以通过禅道制定合理的产品规划&#xff0c;…

实用宝典:元器件外贸独立站电子元件数据库设置完全手册

对于投身于元器件外贸领域的企业来说&#xff0c;如何建立一个既能凸显自身特色又具备高度功能性与良好用户体验的独立站&#xff1f;而在这一过程中&#xff0c;#电子元件数据库#作为独立站的核心要素之一&#xff0c;它的构建质量和管理方式又将如何直接影响网站的整体竞争力…

BMS、EMS PCS 简介

1 储能系统的构成 完整的电化学储能系统主要由电池组、电池管理系统&#xff08;BMS&#xff09;、能量管理系统&#xff08;EMS&#xff09;、储能变流器&#xff08;PCS&#xff09;以及其他电气设备构成。 在储能系统中&#xff0c;电池组将状态信息反馈给电池管理系统BMS&…

zookeeper客户端

启动单机版的zookeeper 配置Maven环境 (1) IDEA自带maven (2) 更新Maven库镜像地址&#xff1a; ① 拷贝D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.5\plugins\maven\lib\maven3\conf\settings.xml [IntelliJ的安装目录]到 C:/用户/username/.m2 (如果.m2文件不存在&…

前后分离项目记录

一.前端设置 1.打包问题 打包报错 Thread Loader时&#xff0c;增加以下代码&#xff1a; 2.上线时api设置 二.Nginx问题 1.缓存问题&#xff1a;添加如下代码以禁止缓存&#xff0c;否则在关闭nginx后仍然可以访问页面 2.跨域问题在后端加CrossOrigin注解即可 3.上线时co…

人工智能风险预警以及区块链解决方案探索

​​发表时间&#xff1a;2024年9月26日 一个专家小组在为世界经济论坛撰写的报告中警示道&#xff0c;人工智能&#xff08;以下均简称为AI&#xff09;技术增加了各类组织遭受攻击的风险&#xff0c;并带来了训练数据污染和提示词注入攻击等新威胁。由于训练和测试数据库的庞…

3 机器学习之假设空间

归纳(induction)与演绎(deduction)是科学推理的两大基本手段。前者是从特殊到一般的“泛化”(generalization)过程&#xff0c;即从具体的事实归结出一般性规律&#xff1b;后者则是从一般到特殊的“特化”(specialization)过程&#xff0c;即从基础原理推演出具体状况。例如&a…

笔试强训10.14

注意&#xff1a; 1.使用strcpy是把右参数赋值给左参数&#xff0c;而且左参数必须有终止符\0。 2.注意当输入的字符串的最长连续数字串在最后时&#xff0c;此时就不会进行else的判断&#xff0c;需要出了while循环后再进行判断。 #include <iostream> #include <…

Java面试宝典-WEB学习

Java web学习 目录 Java web学习 1、说说 Servlet 的基本架构 2、说一说 Servlet 的生命周期? 3、如何实现一个自定义的 servlet&#xff1f; 4、servlet中有哪些核心类&#xff1f;都有什么特点&#xff1f; 5、什么情况下调用 doGet()和 doPost()&#xff1f; 6、request.ge…