对异步处理的http接口进行性能测试

news2024/12/28 12:21:06

最近来了新的领导,测试的内容和范畴都变大了,工作内容涉及到APP,线上出现了由于性能引起的bug,不得不进行压测,只能不断的学习了。害,想做一条咸鱼都那么难,找了很多关于接口性能测试的资料,领导一直强调异步接口不好做压测

仔细研究了一下,觉得这篇帖子写得不错,就拿出来分享,如果雷同纯属巧合

以前对接口做性能测试,接口都是同步处理的,请求之后等待响应结果就知道处理结果了,这样只要看这个接口是否异常,如果无异常无报错记录这个接口的响应时间、TPS等性能指标进行分析就可以了,最近在工作中遇到了异步处理的接口,逻辑是只要你请求参数全部合法,即返回成功

通俗理解一下同步和异步的差别,举个小例子:

同步就是你妈喊你吃饭,你说等一下,然后你妈妈就一直在旁边等着你,专门等着你,等你做完了,一起去吃饭;

异步就是你妈喊你吃饭,你说等一下我忙完了就过去,你妈就走了,该干啥干啥去了,你忙完了,直接过去吃饭。

那么问题来了,这种接口如果还像以前一样单纯的看接口的响应时间,就没有任何意义了,那么如何判断接口的性能呢

先来描述一下被测系统:

这是一个专门负责发送消息的平台,包括短信消息和设备消息,大概架构如下:整个系统分为前端和后端,前端负责接收客户端的传参,把数据写入数据库并插入消息队列MQ;后端负责发送消息,队列MQ的消费,并更新数据库记录队列消息的消费时间及发送状态;接口全部为异步处理机制

下面以发送接口为例,简述整个测试过程:

  • 制定测试方案

开始性能测试了,说明系统功能已经稳定,无遗留严重bug,此时需要对系统的需求做个调研分析,确定被测系统的性能测试方案,这里可以从需求出发,初步确定性能测试方案。确定测试场景为单接口场景,选取三个调用频率最高的接口来测试,和开发及运维等相关人员确定压测环境、服务器配置等数据,通过压力测试工具jmeter关注响应时间、每秒TPS及错误率,同时使用阿里云监控平台监控服务器内存和CPU使用情况。采用循序渐进增加线程数的方式得到接口的最大处理能力。

  • 确定测试数据

为了尽量模拟真实场景,需准备不小于并发数百分之20的数据作为压测数据。

压测数据写在excel中

ps:这里有个坑,因为消息系统是给用户发送短信及消息,一不小心可能导致消息发送到真实用户了。

此处有两个解决方案:

  • 让开发处理手机号校验的代码,把代码注释,手机号使用不存在的数字组合即可

  • 开发做挡板,屏蔽调用第三方发送接口

  • 根据测试场景编写测试脚本

共三个接口,https协议post请求

调用接口无需token,因此只需要把入参拼接排序加密签名即可,入参处理方法可以用java写好打包放到jmeter的lib目录,在beanshell中import进来直接调用即可

  • 执行测试

测试脚本调试通过,就可以执行测试了。

按照常规接口的测试方式:

就是从1个线程数开始,每次压测5分钟左右,压测过程中监控服务器cpu及内存占用情况,记录tps及响应时间,不断增加并发数,找到tps随并发数增大的拐点,即得出接口最大处理能力。

但是以上方式并不适用于这种异步的接口,那么如何处理呢?

此处通过查询数据库。当所有请求全部完毕了,查询数据库的发送信息表,检查请求时间字段和发送时间字段,请求时间字记录该请求的调用时间,发送时间字段是后端发送消息后回写到数据库的发送时间,故请求时间字段和发送时间字段的差就是这一个请求的完整的响应时间,可以算出所有请求的平均时间、90%时间,第一条开始请求的时间到最后一条发送成功的时间之差就为持续压测时间,进而通过请求数能够计算出TPS,达到测试目的。

  • 测试结果分析及调优

这部分和普通接口的压力测试是相同的,这里不多叙述。

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

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

模板初阶、auto关键字、范围for和string类的使用

目录 1. 模板初阶 1.1 泛型编程 1.2 函数模板 1.3 类模板 2. auto关键字 3. 范围for的使用(略提) 4. String类部分接口的使用 4.1 String构造函数的使用 4.2 string类begin和end的使用 4.3 string类的rbegin和rend的使用 4.4 string类的size和length的使…

使用 npkill 快速清理本地 node_modules 文件

npkill 可以直接在终端可视化的清除 本地 node_modules 文件夹,方便我们即使清除不常用的依赖。 直接在终端执行 npx npkill 即可开启 node_modules 本地扫描: 然后,我们选择不需要的 node_modules 按下空格即可删除。

sentinel2 L2A处理基线04.00 反射率计算方法

sentinel2 处理基线04.00发布后,L2A地表反射率计算方式也发生了调整;根据新版的数据说明,新版数据增加了负值偏移。因此计算时需要读取数据产品中MTD_MSIL2A.xml的元文件。注意,相比之前的版本,元文件中增加了BOA_ADD_…

django创建一个新的应用

使用 python manage.py startapp myapp 命令可以在你的 Django 项目中创建一个新的应用,名为 myapp。应用是 Django 项目的组成部分,可以帮助你组织代码和功能。执行该命令后,会在你的项目目录下创建一个名为 myapp 的文件夹,包含…

docker部署minio文件服务器

1. 拉取镜像 docker search minio docker pull minio/minio2. 创建映射 mkdir -p /root/docker_app/minio_data mkdir -p /root/docker_app/minio_config3. 执行docker run 自定义用户和秘钥安装: admin/admin123456 docker run -p 9000:9000 -p 9001:9001 -d --name mini…

JavaScript 可视化案例详解

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

大模型驱动的自主智能体全面调研

人工智能咨询培训老师叶梓 转载标明出处 基于LLMs构建的自主智能体,有望实现类似人类的决策能力。图 1 展示了LLMs驱动的自主智能体领域的增长趋势。从2021年1月到2023年8月,不同颜色代表不同类别的智能体。例如,游戏智能体旨在模拟游戏玩家…

MySQL那些事(InnoDB架构和存储结构)

目录 一、序言二、InnoDB架构三、InnoDB内存结构1、Buffer Pool (缓冲池)2、Change Buffer3、Log Buffer 四、InnoDB磁盘结构1、表空间2、Doublewrite Buffer(双写缓冲区)3、Redo Log4、Undo Log 五、结语 一、序言 本节内容为博主根据MySQL 8.0版本官方文档手动翻译过后的最新…

pycharm 配置篇

方法注释 使用方式为,在方法名下方输入三个双(单)引号,回车,自动生成。五种风格的样式如下: def docstrings_func_plain(parm_a, parm_b, parm_c):"""Plain 风格"""def docs…

笔记本电脑如何改ip地址:操作指南与注意事项

在信息时代的浪潮中,网络已成为我们日常生活与工作中不可或缺的一部分。对于笔记本电脑用户而言,IP地址作为设备在网络中的唯一标识,其重要性不言而喻。无论是出于网络安全、网络测试还是特殊网络环境等需求,了解如何修改笔记本电…

NVIDIA Hopper 架构深入

NVIDIA Hopper 架构 GPU 的重要新功能。 文章目录 一、Transformer engine 变压器发动机二、第四代 NVLink 和 NVLink 网络三、第三代 NVSwitch四、New NVLink Switch System 新的 NVLink 开关系统五、PCIe Gen 5 PCIe 第 5 代一、Transformer engine 变压器发动机 Transforme…

java给word设置复选框

poi设置 使用"Wingdings 2" 字体 WordUtil.appendText(paragraph, "\uF052", "Wingdings 2",null); WordUtil.appendText(paragraph, "□", null);选中的复选框: poi导出pdf的时候正常使用aspose-words导出pdf就空了 使用默认字体…

给自己的项目(vue3)中添加 下雪/樱花飘落的背景

查看更佳效果前往我的博客, 可切换 snows_ls BLOGhttp://124.223.41.220/ 0、效果图 樱花飘落 雪花飘落 1、安装 yarn add jparticles / npm i jparticles 2、引入 import { Snow } from jparticles; // 引入粒子效果库 引入雪花效果库 3、使用 在项目中的app.…

onnx TRT 版本对应关系

Onnx 版本和opset 关系 https://github.com/onnx/onnx/blob/main/docs/Versioning.md Onnx runtime 对应 onnx opset 版本 Compatibility | onnxruntime Tensor RT 和onnx 支持版本可以看如下并选择对应分支 https://github.com/onnx/onnx-tensorrt/blob/release/8.4-GA/doc…

企业内训|AI助力智能办公与职场效能提升-青岛某国资平台

9月25日,TsingtaoAI派驻讲师进驻现场,为青岛市某国资平台公司员工交付“AI助力智能办公与职场效能提升”企业内训,整个培训通过AIGC的实际应用案例,帮助学员掌握智能办公的常用工具,提升工作流程优化和决策效率。课程涵…

衡石分析平台系统管理手册-智能运维之软件授权

软件授权​ 在设置->软件授权页面可以看到授权时间、有效期、用户上限、请求码、租户数上限、租户内用户数上限。 请求码是衡石系统用于生成注册码的一段代码,安装衡石系统后,就会自动生成一个请求码,其中包含了本机的指纹信息和当前 Lic…

BFS 解决 FloodFill 算法

BFS 解决 FloodFill 算法 题目一: 图像渲染1. 题⽬链接:2. 题⽬描述:3. 算法思路:4.代码 题目二: 岛屿数量1. 题⽬链接:2. 题⽬描述:3. 算法思路:4.代码 题目三:被围绕的…

Android Stuido中编译信息出现乱码的解决方式

打开菜单File -> Settings,选择Editor -> File Encodings 窗口,将编码设置为正确的字符集,保证 Global Encoding、Project Encoding 和 Default Encoding for properties files 都设置为 UTF-8。

物联网(二)——MDPI特刊推荐

特刊征稿 01 期刊名称: Application of IoT on Manufacturing, Communication and Engineering 截止时间: 摘要提交截止日期:2025年4月30日 投稿截止日期:2025年6月30日 目标及范围: 感兴趣的主题包括但不限于以…

Python输入输出

1、输出 python中变量的输出,print 会自动在行末加上回车,如果不需回车,只需在print语句的结尾添加一个逗号”,“ 1.1、普通输出 print(hello)1.2、格式化输出 1.2.1、使用%来格式化 格式化符号大全 符 号描述%c格式化字符及其ASCII码%s格式化字符…