性能测试—接口压测指标分析

article/2025/11/7 10:52:17

原文地址:https://zhuanlan.zhihu.com/p/36587675

通常而言,Jmeter性能测试结果分析可从性能测试指标达成方面着手,然后再分析测试过程中出现的异常情况,逐一判断是否存在性能风险

一、用户登录并发测试结果分析

1、提取测试指标

表1:用户登录并发性能指标
测试项并发数业务成功率响应时间CPU使用率内存使用率
用户登录100100%<=5秒<=80%<=80%

2、测试指标分析

1)并发数

线程组设置为100个线程,运行过程中未出现任何异常,满足100个线程并发操作需求。

2)业务成功率

测试脚本中设置了断言,判断用户登录后是否出现“登录成功”字样,并设定了“断言结果”查看器,通过查看断言结果,全部通过,则说明登录全部完成,业务成功率为100%。

用户登录断言结果

3)响应时间

结合Jmeter执行结果后的聚合报告分析,用户登录响应时间目标指标<=5秒

聚合报告
聚合报告

性能指数Apdex(Application Performance Index)是一个国际通用标准,表示用户对应用性能满意度的量化值

它提供了一个统一的测量和报告用户体验的方法,把最终用户的体验和应用性能作为一个完整的指标进行统一度量。

图7- 47表示为通用用户满意度区域,0代表没有满意用户,1则代表所有用户都满意。实际业务系统开发过程中,1是团队的追求目标。

针对ECShop用户登录业务,100个并发登录的APDEX指标如图7- 48所示。从图中可看出,所有请求的Apdex值都接近1,因此用户满意度优秀,也从侧面说明了服务器响应速度快。

图7- 48用户登录100并发APDEX指标情况

4)系统资源使用

利用Jmeter监控系统资源,测试完成后结果如图所示

通过上图分析,CPU处于正常状态,因此次测试场景运行时间短,所以波峰及波谷明显,但均未持续超过80%,内存几乎无变化,被测服务器内存使用率维持在20%以内。因此测试结果符合预期目标指标。

5)数据库监控

利用Spotlight监控到的服务器Mysql数据库在测试期间运行的SQL为SELECT,与被测登录业务对数据库操作吻合

3、更新并发测试结果表

通过上述测试指标分析,更新用户登录并发测试结果表如表7- 13所示。

二、用户登录业务量测试结果分析

1、提取测试指标

2、测试指标分析

1)响应时间

测试完成,生成测试报告后,获取响应时间趋势图,如图7- 52所示。

图7- 52 用户登录业务量测试响应时间图

 

通过上图分析,采用90%采样数据,分析整个请求,任何一个请求均未超过5秒,因此响应时间通过。

2)业务成功率

测试过程中所有断言通过,并且没有任何错误,登录成功率100%。“打开首页”、“打开用户登录页面”、“提交登录信息”与后面请求数据存在差异,是因为测试时间到达后部分请求立刻停止,故未能保证业务的完整性。

3)业务量

本次业务量测试,设置线程数为78个,2小时完成登录总数为8427次登录,其中包含了11秒操作停留时间,如果去除11秒停留时间,从数据理论计算,2*60*60/0.131=54961次,可达到预期2小时5万次登录操作,需进一步测试

4)系统资源使用

通过Jmeter监控服务器CPU及内存使用率来看,CPU及内存使用率非常稳定,且维持在20%-30%之间,满足预期目标不超过80%,测试通过。

图7- 53用户登录业务量测试2小时系统资源图

5)数据库监控

数据库执行过程监控正常,符合业务请求变化趋势,如图7- 54所示。

图7- 54用户登录业务量Mysql资源监控图

3、更新并发测试结果表

通过上述测试指标分析,更新用户登录业务量测试结果表如表7- 15所示。

表7- 15用户登录业务量并发测试结果
测试项结果属性响应时间业务成功率业务量CPU使用率内存使用率
用户登录预期结果<=5秒100%2小时5万<=80%<=80%
实际结果0.131秒100%54961<40%20%
通过/失败YYNYY

业务量测试存在一定差异,可进一步测试。

三、随机购物并发测试结果分析

1、提取测试指标

提取随机购物并发测试的目标指标如表7- 16所示。

2、测试指标分析

1)响应时间

测试完成后,根据生成的测试报告,获取随机购物100个并发响应时间如图7- 55所示。

图7- 55随机购物并发测试响应时间

 通过上图分析,随机购物100个线程并发执行时,平均响应时间分别为:631毫秒、105毫秒、588毫秒、748毫秒、246毫秒、288毫秒、786毫秒、2848毫秒、1934毫秒、2161毫秒、836毫秒、290毫秒、307毫秒,通过这些数据分析,每个请求所消耗的时间均未超过5秒,但90%采样数据中,“填写收货信息”请求响应时间为5395毫秒,严格来说,该请求测试不通过。更新测试目标指标表时可采用90%采样。

2)Apdex指标

图7- 56随机购物100并发Apdex指标

通过上图可以看出,填写收货信息、提交物流及付款方式、进入物流及付款方式设定页面三个请求用户满意度低于0.5,意味系统对这三个请求的响应时间较慢,尤其是收货信息、提交物流及付款方式这两个情况。测试工程师可针对这两个请求,给出性能测试不通过结论。通常而言,最低要求超过0.5,当然项目组可设定具体需求。

3)业务成功率

测试结束后,检查系统后台订单信息,100个并发线程,每个线程循环1次,故生成100个订单,且运行过程中没有任何错误。故认为随机购物100并发测试业务成功率为100%

4)业务量

线程组设置为100个线程,运行过程中未出现任何异常,满足100个线程并发操作需求。

5)系统资源使用

执行过程,通过Jmeter监控得到本次测试系统资源使用情况,如图7- 57所示。

图7- 57随机购买100并发系统资源监控图

过上图分析可知,CPU在测试过程中持续值维持在90%以上,有17秒时间几乎达到100%,因此从指标信息判断,本次CPU使用率超过预期80%的目标。

同时,内存使用率在25秒以后也呈现明显上升趋势,需分析这段时间什么业务导致资源使用率上升。总体内存使用率维持在30%-40%之间,低于预期目标不超过80%,故内存使用率通过。

基于CPU、内存使用率,分析响应时间图表,如图7- 58所示。

图7- 58随机购买100并发响应时间图

通过上图分析,可知“填写收货信息”响应时间持续升高,需测试工程师报告此问题,联合研发同事分析“填写收货信息”涉及哪些具体操作,如是否操作数据库,是否需要大量缓存、是否调用第三方地址编辑控件等,从而确定响应时间升高原因,是否因此导致CPU及内存使用率升高。

6)数据库监控

从Mysql数据库SQL语句执行速度来看,符合场景执行设计过程,但SQL中Inserts语句体现不明显,需关注原因,确定是监控本身问题,还是被测对象SQL语句设计问题。

图7- 59随机购买100并发Mysql数据库资源图

3、更新并发测试结果表

通过上述测试指标分析,更新用户登录并发测试结果表如表7- 17所示。

4、结论

综合测试数据分析,“填写收货信息”请求响应时间超过5秒,CPU使用率超过90%,故随机购物100并发场景测试不通过。需分析“填写收货信息”涉及哪些操作,导致响应时间变长的原因,是否对CPU及内存使用率造成了影响。

四、随机购物业务量测试结果分析

1、提取测试指标

提取随机购物业务量测试指标如表7- 18所示:

100个线程持续执行2分钟后,出现大量业务错误,服务器CPU使用率持续维持在100%附近,因此利用100个线程进行2小时的随机购物业务量测试失败。可根据需要,利用折半验证法,验证系统稳定性测试的最佳线程数及服务器资源配置是否合理。

数据库报错如下:<b>MySQL server error report:Array([0] => Array([message] => MySQL Query Error)[1] => Array([sql] => INSERT INTO `ecshop`.`ecs_order_info` (order_sn, user_id, order_status, shipping_status, pay_status, consignee, country, province, city, district, address, zipcode, tel, mobile, email, best_time, sign_building, postscript, shipping_id, shipping_name, pay_id, pay_name, how_oos, card_message, inv_payee, inv_content, goods_amount, shipping_fee, insure_fee, pay_fee, pack_fee, card_fee, surplus, integral, integral_money, bonus, order_amount, from_ad, referer, add_time, pack_id, card_id, bonus_id, extension_code, extension_id, agency_id, inv_type, tax, parent_id, discount, lastmodify) VALUES ('2017110775867', '2223', '0', '0', '0', 'hzdl00168', '1', '2', '37', '403', '北京东城区', '', '01088888888', '', 'hzdl00168@qq.com', '', '', '', '5', '申通快递', '2', '银行汇款/转帐', '等待所有商品备齐后再发', '', '', '', '1999', '15', '0', '0', '0', '0', '0', '0', '0', '0', '2014.00', '0', '本站', '1510050069', '0', '0', '0', '', '0', '0', '', '0', '0', '', '1510050069'))[2] => Array([error] => Duplicate entry '2017110775867' for key 'order_sn')[3] => Array([errno] => 1062))

系统资源趋势图:

图7- 60随机购买2小时业务量测试系统资源图

上述所有场景,如时间、条件、资源允许,测试工程师应当多测试几次,根据平均值输出测试报告。


http://chatgpt.dhexx.cn/article/MmwAxlRD.shtml

相关文章

接口测试,负载测试,并发测试,压力测试区别

接口测试 1.定义&#xff1a;接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 2.目的&#xf…

Jmeter接口压力测试(先登录再测接口)

上一篇主要写了Jmeter测试登陆接口&#xff0c;但是大部分情况下&#xff0c;我们是要测试登陆后的页面的各个接口。所以需要把二者结合起来&#xff0c;可以使用Jmeter重定向。 Jmeter测试接口&#xff08;包括登陆操作&#xff09; 1. 创建HTTP Request先登录 参考&am…

使用JMeter进行接口压力测试

以下使用JMeter进行接口压力测试&#xff0c;要点如下&#xff1a; 1.提取token并设置为全局变量 2.准备测试数据&#xff08;未连接数据库&#xff0c;而是导出表数据使用&#xff09; 3.生成聚合报告 一、提取token并设置为全局变量 登陆接口返回数据中包含token 使用正…

接口压测总结

首先明确压测的目的&#xff1a;为了在业务高峰期到来之前&#xff0c;确保服务器经得起高峰期的压力。 但是每个系统的用户数量以及业务量都不一样。那么&#xff0c;在压测之前就需要根据系统的规模&#xff0c; 定个小目标。 一般情况&#xff0c;没啥人用的服务 tps 20&…

python实现接口压力测试

python实现接口压力测试 直接上代码&#xff1a; # -*- coding: utf-8 -*-import json import requests import logginglogging.basicConfig(levellogging.INFO, format%(asctime)s - %(name)s - %(levelname)s - %(message)s) logger logging.getLogger(__name__)restime …

使用jmeter进行api接口压力测试

前言 压力测试的工具挺多的&#xff0c;但看了其他人的文章介绍&#xff0c;还是选了jmeter&#xff0c;开源、免费啊&#xff0c; 下载 下载地址&#xff1a; https://jmeter.apache.org/download_jmeter.cgi 环境配置 下载后解压zip到任意目录&#xff0c;然后配置环境…

Postman接口与压力测试实例

Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。它提供功能强大的 Web API & HTTP 请求调试。 1、环境变量和全局变量设置 环境变量可以使用在以下地方&#xff1a; URLURL paramsHeader valuesform-data/url-encoded valuesRaw body contentHelper fi…

jmeter TCP接口压力测试

启动jmeter,添加线程组、TCP取样器、察看结果树 1.添加线程组 2.添加TCP取样器 3.添加监听器察看结果树 配置TCP取样器参数信息 1.TCPClient classname&#xff1a;报文格式&#xff0c;分3种&#xff1a; org.apache.jmeter.protocol.tcp.sampler.TCPClientImpl&#x…

JMeter对接口进行压力测试

Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试&#xff0c;但后来扩展到其他测试领域。 它可以用于测试静态和动态资源&#xff0c;例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FT…

如何使用Jmeter对HTTP接口进行压力测试?

我们不应该仅仅局限于某一种工具&#xff0c;性能测试能使用的工具非常多&#xff0c;选择适合的就是最好的。笔者已经使用Loadrunner进行多年的项目性能测试实战经验&#xff0c;也算略有小成&#xff0c;任何性能测试&#xff08;如压力测试、负载测试、疲劳强度测试等&#…

全网最新最全的jmeter接口测试,压力测试

目录 一.前言 二.接口测试 2.1Jmeter-http接口脚本 2.2Jmeter-webservice接口脚本 三.压力测试 3.1压测任务需求的确认 3.2压测设置 3.3压测结果查看 3.4压测结果的分析 3.5jmeter在linux下进行压力测试 ​ 一.前言 jmeter是apache公司基于java开发的一款开源压力测…

【Jmeter基础篇】03:如何进行post接口压力测试

目前网络上有很多很多Jmeter的压力测试使用指南&#xff0c;但是在实际使用过程中&#xff0c;很多朋友会遇到许多并不处于理想状态的情况&#xff0c;比如某些参数不知道应该往哪里放&#xff0c;具体怎么分析测试结果等等。 所谓压力测试&#xff0c;实质就是让n多个用户在同…

Jmeter怎么做接口测试/性能测试/压力测试(步骤)

目录 JMeter接⼝测试流程详解 1、Jmeter简介 2、Jmeter安装 3、设置Jmeter语⾔为中⽂环境 4、Jmeter主要元件 5、Jmeter元件的作⽤域和执⾏顺序 6、Jmeter进⾏接⼝测试流程 7、Jmeter进⾏接⼝测试流程步骤详解 8、总结 JMeter性能测试的步骤&#xff1f; 第一步&…

性能测试-项目实战-接口全流程压测

目录 1、前言 1.1、项目背景 1.2、场景执行步骤 2、司机长链接 2.1、司机出车环境 2.2、主要用到的包 2.3、脚本解析 3、全流程压测脚本 3.1、司乘数据准备 3.2、全链路压测脚本 4、资源监控与收集 4.1、聚合报告 4.2、自研脚本 1、前言 1.1、项目背景 在车辆与…

浅谈接口压测

一.背景 saas版在经过项目组全体成员的不断努力&#xff0c;最终实现了第一版的上线&#xff0c;为了验证sass系统可以支持多少用户同时在线访问&#xff0c;产生了sass版的接口压测。 二.压测是什么为什么要做压测 压测一般指性能压力测试&#xff0c;通过压测可以了解系统…

数据库select语句详解

SELECT 1.基本语法 select * from 表名 查询这张表所有内容。select 列名 from 表名 查询这张表某一列所有内容。select 列名1&#xff0c;列名2…from 表名 查询这张表的列1&#xff0c;列2&#xff0c;等多列。select distinct 列名 from 表名 查询这一列去掉重复内容后的内…

SQLite基本语句

SQLite基本语句 一&#xff1a; 1.SQLite数据库是一种嵌入式数据库&#xff0c;它的数据就是一个scores.db 2.经常被集成到各种应用程序中&#xff0c;甚至ios、Android、Mac OS、Linux 3.Python中内置了SQLite数据库&#xff0c;直接使用 4.数据库&#xff1a;关系型数据库&a…

Mysql数据库基本sql语句

文章目录 1 常用的数据类型2 查看数据库2.1 查看当前服务器中的数据库2.2 查看数据库中的表2.3 查看表的结构&#xff08;字段&#xff09; 3 SQL语句3.1 SQL语句分类3.2 创建及删除数据库和表3.2.1 创建新的数据库3.2.2 创建新的表3.2.3 删除指定的数据表3.2.4 删除指定的数据…

数据库的基本语句

这里写目录标题 mysql基本语句表的定义SQL语句分类 mysql基本语句 1.进入数据库 mysql -uroot -p 2.退出数据库 exit; 3.查看有哪些数据库 show databases; 4.创建新的数据库 create database 英文名字; 5.使用数据库 use 名字 6.查看表 show tables; 7.查看数据库版本 select…

Mysql基本语句

1、数据库的基本类型 1.关系数据库 特点&#xff1a;以表和表的关联构成的数据结构 优点&#xff1a;能表达复杂的数据关系。强大的查询语言&#xff0c;能精确查找想要的数据 缺点&#xff1a;读写性能比较差&#xff0c;尤其是海量数据的读写。数据结构比较死板 用途&am…