如何高效进行 API 性能测试:详细教程

在构建和维护 API 时,性能和稳定性是至关重要的考量因素,API 的性能直接影响着用户体验和系统的可用性,因此对其进行全面的性能测试是不可或缺的一环。

针对 API 的性能测试,一般通过模拟实际用户行为、压力测试和负载测试等方式来评估系统的稳定性和性能指标。在进行性能测试之前,建议先对 API 实施功能测试,确保所有接口按预期正确运行。功能测试帮助识别和修正功能性问题,而性能测试专注于评估 API 在高负荷下的表现。只有功能正常的 API,其性能测试结果才具有实际意义,进而可以为进一步的性能优化提供可靠依据。

那么,如何利用 Apifox 的「性能测试」功能来检验你的 API 性能是否达标呢?以下是操作步骤的详细讲解。

图片

步骤 1 编排性能测试场景

在启动性能测试前,首先需要编写 测试用例,可以从接口或接口用例导入,也可以自定义请求。当测试步骤准备完毕,建议先执行功能测试以确保接口按预期工作,然后再进行性能测试。

图片

步骤 2 设置性能测试运行配置

接下来,在「自动化测试」功能界面,你会找到一个专为「性能测试」设计的模块。在这个模块里,你可以根据需要设置各种配置项,为即将执行的性能测试做好准备。

image.png

运行环境

指定「性能测试」运行期间请求的后台服务环境,默认自动采用当前项目设定的环境配置

image.png

测试数据 (可选)

测试数据指的是性能测试过程中用来发起请求的数据集,通过使用测试数据,让每个并发用户能够使用不同的参数进行请求,用以更好的模拟现实世界的流量。

image.png

如果你要使用测试数据,你可以在界面上点击「测试数据」标签,然后新建一个测试数据。

image.png

接着在相应的环境中配置数据集,你可以手动添加,也可以通过 JSON 或 CSV 格式导入,编辑完毕后保存即可。

image.png

最后,在测试步骤详情页中通过变量与测试数据关联。

image.png

若你在性能测试中选择关联测试数据,那么并发用户将使用测试数据中定义的变量进行请求,你可以选择「随机匹配」或者「顺序匹配」这两种模式进行测试

image.png

  • 「随机匹配」模式:在此模式下,每个并发用户将从测试数据中随机选择一行数据进行操作。这确保了每个并发用户都能获取到一条测试数据,从而保证性能测试的广覆盖性。
  • 「顺序匹配」模式:此模式下,每个并发用户将按照测试数据的顺序选取下一行数据进行操作。需要注意的是,如果执行测试的并发用户数超过了提供的测试数据行数,那么超出部分的并发用户将无法参与测试。因此,在使用此模式时,请确保你有足够多的测试数据以支持所有并发用户的测试需求

并发用户数(虚拟用户数)

目前性能测试最多支持同时模拟 100 名并发用户,这些并发用户会在你指定的测试时间内,并行地模拟真实在线用户行为,以重复执行测试场景。通过这种方式,你可以有效地模拟高并发场景,以评估 API 在面对大量用户请求时的性能和稳定性。

运行时间

运行时间定义了性能测试的总时长,即在此设定时间内,每个并发用户将持续不断地循环执行测试场景中定义的所有接口请求。当前,性能测试支持的最长测试时长为 60 分钟。

爬坡时间

在一些情况下,大量用户并非瞬时访问服务,而是随着时间推移,请求越来越多。

爬坡时间就是用于模拟用户访问量随时间增长的情况,即在测试的初期并不是立即使用所有并发用户,而是在设定的 X 分钟内(X 为你设定的时间),用户数量会线性增加直到达到所设定的并发用户总数。如果将 X 值设置为 0,意味着测试一开始就会启用全部并发用户进行压力测试。

以上的「可配置项」配置完成后,保存设置,然后点击「运行」按钮,即可开始执行性能测试。

步骤 3 运行性能测试

性能测点击「运行」后,性能测试就会启动。Apifox 的性能测试是从用户电脑(而不是 Apifox 服务器)发起的,会使用当前电脑的硬件资源来执行你已经配置好的测试步骤、测试数据和并发请求。

需要注意,Apifox 的性能测试能够测到的性能上限会受到当前电脑硬件性能和网络连接状况的限制。比如,假设你当前的电脑的配置只能支撑 50 个并发请求,此时即使你把 Apifox 的并发用户数调到 100 ,Apifox 实际上能发起的并发请求数也最多只能达到 50。因此,你需要结合自己电脑的性能和其他接口的表现来判断,到底性能问题出在你要测试的接口,还是你发起测试的电脑。如果你发现无论哪个服务器的哪个接口,实际发起的请求数都上不去,那可能你需要换一台性能更强的电脑来发起性能测试。

启动性能测试后,Apifox 将会提供一个直观的可视化面板,用以实时监测,并展现关键性能指标,包括 各个接口的总请求数、每秒接口请求数、平均响应时间、最大/最小响应时间,以及 请求的失败率 等信息。

image.png

在性能测试的运行页面上,可视化面板呈现了整个测试场景的综合数据。

image.png

以下表列出了可视化面板中整个测试场景的综合数据指标,这些指标反映了覆盖所有接口的整体性能情况:

image.png

整个测试场景的综合数据指标解读:

  • 总请求次数:该指标反映了测试期间接口处理的请求总量,要注意,较高的总请求次数在大规模用户使用场景下是合理的,但也应保证接口能有效处理这些请求。
  • 每秒接口请求数:如果每秒的请求数量高,这意味着接口能在短时间内处理大量请求,通常表示出色的性能。如果这个数字较低,可能暗示接口在处理请求时存在性能瓶颈。
  • 平均响应时间:较低的平均响应时间通常表示用户能够迅速获得反馈,反映接口性能优异。较高的响应时间则表明响应过慢,可能会影响用户体验。
  • 请求失败率:理想情况下,失败率应接近于零。较高的失败率说明接口在某些情况下无法正常处理请求,需要进一步进行错误分析和优化。
  • 并发用户数:合理设置并发用户数可以帮助模拟真实世界的用户负载。然而,如果并发用户数设置过高,系统可能会因无法处理如此高的负载而导致性能下降。

在可视化面板下方,列出了测试场景中各个接口的具体数据指标,便于你根据需要进行查看和分析。

image.png

以下表格展示了单个接口的性能测试指标,这些指标专门针对每一个接口的性能进行分析:

image.png

 单个接口的性能测试指标解读:

  • 总请求数:较高的总请求量在大并发场景下是正常的,但应保证接口能有效处理这些请求。
  • 每秒接口请求数:较高值表示接口可在短时间内处理大量请求,反映出良好的性能,反之可能存在性能问题。
  • 平均响应时间(ms) :较低的平均响应时间意味着用户经历更快的交互响应,反映出接口性能良好,较高的响应时间可能指示性能问题。
  • 最小和最大响应时间:这两个指标给出了响应时间的波动范围,极端值可能暴露出潜在的性能问题。
  • 90% 响应时间:对于多数请求而言,这个时间应接近平均响应时间。如果 90% 响应时间明显高于平均值,这可能暗示有一部分请求响应时间过长,影响了用户体验。
  • 失败率:理想情况下,失败率应接近于零。较高的失败率说明接口在某些情况下无法正常处理请求,需要进一步调查原因。

需要注意的是,在同一时间段内,一个项目仅能执行一项性能测试。若需进行优先级更高的测试,请点击右上角的「终止」按钮,以终止当前测试。

在执行性能测试的过程中,你可以通过将鼠标悬停在可视化面板上,实时查看不同时间点的测试详情。

在可视化面板上,不同的曲线颜色分别对应于纵轴上的不同性能指标,如下图所示。其中,横轴表示性能测试进行的时间,而纵轴从左至右依次展示了请求失败率、平均响应时间和每秒接口请求数等指标(「并发用户数」默认在纵轴隐藏)。

image.png

若需重点关注特定的性能指标,你可以通过点击该指标使其颜色变为灰色,从而临时从图表中隐藏该指标,便于你集中分析其它数据。

image.png

若想审查特定的失败请求,可点击「请求失败率」以分析失败的接口请求。此外,你还可以利用筛选功能,专门查看特定接口的表现。

image.png

由于性能测试会生成大量接口请求,所以系统仅对发生错误的请求进行分类统计,而不会保留每个请求的详细错误信息和接口请求详情。如果在性能测试中遇到意外的错误,建议你先执行「功能测试」以排查并解决所有问题,然后再进行性能测试。

性能测试结束后,通过点击「测试报告」标签,你能够查看该测试场景的全部历史报告,这些报告详细列出了性能测试执行前你所设置的“配置项”情况。

image.png

你可以在这里按报告类型(如功能测试、性能测试)进行筛选。点击任一测试报告可跳转至其详情页面进行查看,报告页面中展示的信息与性能测试执行期间收集的指标保持一致。

image.png

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

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

相关文章

记一次无vmcore内存死机问题分析过程

问题现象 客户发现在物理机上跑读写业务时,出现了一次死机现象,kdump服务未抓到vmcore文件。/var/log/messages里没有发现内核panic报错信息,只有call trace的警告信息。抓取到的call trace信息总共有三种类型:内存分配失败、rmm…

Keil C51 汉字显示 BUG 解决方案

Keil C51在编译的时候会将0xFD的字符(有些汉字含有该字符的内码)过滤,而导致编码与实际不符,如“三”实际编码:0XC8FD,而Keil C51则输出为0xC800。 keil官方 由于涉及该BUG的汉字并不是很多,所…

7.无重复字符的最长字串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 解释: 因为…

【2024年第三届中国高校大数据挑战赛】赛题 D:行业职业技术培训能力评价 思路+代码+参考论文

【2024年第三届中国高校大数据挑战赛】赛题 D:行业职业技术培训能力评价 思路代码参考论文 加群可以享受定制等更多服务,或者搜索B站:数模洛凌寺 联络组织企鹅:904117571 以下是D题老师的解题思路(企鹅内还会随时更新…

Unity性能优化篇(十一) 动画优化

1.恰当地设置Animator组件的Culling Mode。Always Animate表示如果该动画不可见,也会播放它。Cull Update Transformations表示如果该动画不可见,则不会渲染该动画,但是依然会根据该动画的播放来改变游戏对象的位置、旋转、缩放,这…

html5cssjs代码 004 2035年倒计时

html5&css&js代码 004 2035年倒计时 一、代码二、解释DOCTYPE声明&#xff1a;head部分&#xff1a;body部分&#xff1a;script标签&#xff1a; 这段HTML代码实现了一个倒计时页面&#xff0c;倒计时的目标日期是2035年1月1日。页面中使用一个<div>元素显示倒计…

2024计算机软考基本介绍、考试时间、考试科目等2024年软考新变化政策 证书的作用

专栏系列文章推荐&#xff1a; 2024高级系统架构设计师备考资料&#xff08;高频考点&真题&经验&#xff09;https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】&#xff08;2024年软考高级…

【考研数学】张宇学习包

张宇的授课侧重于启发学生的综合思维能力。对于基础较好的学生而言&#xff0c;在听完他的课后&#xff0c;解题通常不会构成太大问题&#xff0c;而且可以学到许多解题技巧&#xff0c;其中包括张宇老师创造的易记的“点火公式”。 然而&#xff0c;对于基础较薄弱的学生来说…

无人机手持地面站软件功能详解,无人机手持地面站软件开发人员组成及成本分析

无人机手持地面站软件是专为无人机操控和任务管理设计的移动应用&#xff0c;它通常集成在智能手机、平板电脑或其他便携式设备上&#xff0c;使得用户可以在远离无人机的地方对飞行器进行实时监控与远程控制。 主要功能详解&#xff1a; 1. 飞行控制与姿态显示&#xff1a; …

基于springboot+vue实现乌鲁木齐南山冰雪旅游服务网管理系统项目【项目源码+论文说明】计算机毕业设计

基于springbootvue实现南山冰雪旅游服务网演示 摘要 随着2022年北京冬奥会的成功举办&#xff0c;在冬天进行冰雪运动已经逐渐流行起来&#xff0c;人们慢慢享受到了冰雪活动给大家带来的欢乐&#xff0c;除此之外人们的身体素质也可以得到提升。虽然已经有一部分人可以接受并…

关于yolov8文档的记录,补充一些整理的知识点

2023年由Ultralytics 提供了YOLOv8开源项目。YOLOv8 支持全方位的视觉 AI 任务&#xff0c;包括检测、分割、姿态估计、跟踪和分类。这种多功能性使用户能够在各种应用和领域中利用YOLOv8 的功能。安装yolov8开源项目 pip install githttps://github.com/ultralytics/ultralyti…

Kafka整理-Consumer Group(消费者群组)

在Apache Kafka中,消费者群组(Consumer Group)是一种强大的机制,用于实现消息的分发和负载均衡。以下是消费者群组的关键概念和工作原理: 消费者群组的基本概念 1、组成: 消费者群组由一系列的消费者(Consumers)组成,这些消费者共同订阅一个或多个主题(Topics)。2、…

C语言输出时间——解释01

库文件 time.h #include <stdio.h> #include <time.h> int main() { // 设置本地化环境为中文&#xff0c;以便输出中文格式的时间 // 获取当前时间 time_t rawtime; //时间变量 struct tm *timeinfo; // struct tm 时间的结构体时间库自带的 /*结构 stru…

微信小程序开发系列(二十四)·wxml语法·列表渲染·wx:for-item 和 wx:for-index

目录 1. 如果需要对默认的变量名和下标进行修改&#xff0c;可以使用wx:for-item 和 wx:for-index 2. 将 wx:for 用在 标签上&#xff0c;以渲染一个包含多个节点的结构块 方法一 方法二 3. 总结 3.1 wx:for-item 和 wx:for-index总结 3.2 总结 1. 如果需要对默…

新品发布:广州大彩科技COF系列2.1寸480*480 IPS 串口屏发布!

一、产品介绍 该产品是一款2.1寸分辨率为 480480的医用级工业组态串口屏&#xff0c;拥有2.1寸IPS液晶屏&#xff0c;分辨率有480480&#xff08;实际显示为R240内切圆区域&#xff09;&#xff0c;支持电容触摸。采用COF超薄结构工艺设计&#xff0c;用户安装便捷灵活&#x…

力扣hot100:240.搜索二维矩阵II(脑子)

吉大21级算法分析与设计的一道大题&#xff0c;由于每一行都是排好序的直接逐行二分 可以达到&#xff1a;O(mlogn)。但是这里追求更广的思路可以使用其他方法。 矩阵四分&#xff1a; 在矩阵中用中心点比较&#xff0c;如果target大于中心点的值&#xff0c;则由于升序排列&am…

【顺序表】

//#########顺序表的定义############// 定义结构体 typedef struct {int* data; //动态//int data[sizemax]; // 静态int Maxsize; //最大容量int length; //当前长度 } sqlist;lnode* getelem(linklist l, int i) //返回一个结点 l是单链表 {int j 1;lnode* p l->…

【C++】string类(介绍、常用接口)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;http://t.csdnimg.cn/eCa5z 目录 string类的常用接口说明 string类对象的常见构造 ​编辑 string字符串的遍历&#xff08;迭代器&#xf…

Python网站的搭建和html基础

1.Python网站代码及讲解 一般我们搭建小型的网站就用flask库就行了。 &#xff08;1&#xff09;安装flask库 安装完python后&#xff0c;按住windows徽标键和r,弹出“运行”&#xff0c;在里面输入cmd。 回车打开&#xff0c;输入“pip install flask”。 &#xff08;2&am…

地平线旭日x3派部署yolov5--全流程

地平线旭日x3派部署yolov5--全流程 前言一、深度学习环境安装二、安装docker三、部署3.1、安装工具链镜像3.2、配置天工开物OpenExplorer工具包3.3、创建深度学习虚拟空间&#xff0c;安装依赖&#xff1a;3.4、下载yolov5项目源码并运行3.5、pytorch的pt模型文件转onnx3.6、最…