性能测试 --概念

什么是性能测试

性能测试和功能测试都是在系统测试阶段运行, 两者有什么区别呢?

案例:豌豆射手和三线射手都是射手, 它们的功能都是向前发射豌豆进行攻击, 能够攻击到地面的僵尸.

但是从性能上来讲, 豌豆射手只能攻击到一路的僵尸, 而三线射手能同时攻击三路(注:放在边路实际攻击的是两路)的僵尸, 这样我们就可以看出三线射手性能是更高的.

对于一个事情, 能做是一回事, 能不能做好是另外一回事, 就跟做饭一样, 是不是饭是一回事, 饭好不好吃又是另一回事.

 概念: 为了发现系统的性能问题/为了得出系统的性能指标而做出的测试.

一般在真实环境下, 特定负载条件下, 通过工具模拟实际软件系统的运行及其操作, 同时监控性能各项指标, 最后对测试结果进行分析来确定系统的性能情况

对于软件什么是性能问题:

就以购物软件为例:

1)购物过程页面突然无法打开, 刷新后可以重新打开.

2)双十一期间无法进入商品页面.

3)页面加载时间过长, 需要消耗用户大量的等待时间.

甚者如生活中的抢票功能, 对于软件的性能要求极高, 由于用户都在同一时间抢票, 并发量过大, 导致响应速度极慢, 很难抢到票, 这也是软件的一个栗子.(五一没抢到星穹铁道演唱会的票呜呜呜~)

常见性能测试指标 

如何评估性能的好坏? 需要借助性能指标来统计和分析.

并发数

即并发用户数.

从业务层面来看, 并发数就是指实际使用系统的用户总数. 

从服务器后端来看, 并发数是指web服务器为了处理浏览器请求而建立的http连接数或生成的处理线程总数.

案例: 一个已经投入运行的web系统, 有5000名员工使用, 最多同时有2500人使用, 用户分别进行浏览页面, 填写订单, 提交订单, 查询订单的操作. 那么这个系统的并发用户数为2500. 实际的并发用户数是提交订单和查询订单操作的用户.

吞吐量

单位时间内处理的并发数, 直接体现软件系统的负载承受能力. 吞吐量越高, 系统承受的并发量越高, 系统性能越好.

案例: AB两场景

A场景, 有100个并发用户, 每个用户每隔1秒发出一条请求.

B场景, 有1000个并发用户, 每个用户每隔10秒发出一条请求. 但是A场景的思考时间短, 所以A场景占用的系统资源更多.

响应时间

应用系统从请求发出开始, 到客户端接收到最后一个字节数据所消耗的时间.

 对于web服务器来说, 响应时间分为前端展示时间和系统响应时间.

前端展示时间: 页面的渲染等.

系统响应的时间: 包含服务器, 数据库, 通讯网络等的响应时间.

并发用户量, 系统吞吐量与响应时间的关系:

当并发用户较少, 系统吞吐量低, 系统的响应时间比较短, 我们认为系统处于空闲区间. 随着系统用户增加, 系统吞吐量呈线性增长, 系统性能进入了线性增长区间.

吞吐量在某个点上达到了饱和点, 也称之为拐点.  在这之后用户请求不再被立即处理, 响应时间随之变长, 吞吐量开始下降, 系统性能进入了线性下降区间.(过饱和)

 系统性能测试一个关键的工作就是找到这个性能的拐点.

事务

一个接口可以是一个事务, 多个接口也可以是一个事务, 一个流程也可以是事务, 事务代表一个完整的功能.

TPS(Transaction Per Second)和QPS(Queries Per Second)

TPS:每秒处理事务数, 用于衡量系统在一定时间内能够处理的事务数.

计算公式: 总的事务数/总的运行时间.

举例1: 某一系统1分钟处理1000个业务, 那么TPS = 1000 / 60 = 16.7

举例2: 2022年最高的一天有10w笔交易, 预测2022年TPS需要多少合格? 认为每笔交易都是一个事务, 理论TPS = 100000 / 24 * 60 * 60 = 1.2(理想状态), 然而订单量会在某段时间突然增加, 并不是平均到每个时间段内, 因此:

1)没有更详细的数据: 就根据二八原则, 20% 的时间会存在80%的事务

TPS = 100000 * 0.8 / 24 * 60 * 60 * 0.2 = 4.6

2)如果有更详细的数据: 5w笔交易在晚上的8~9点完成.

TPS = 50000 / 24 * 60 = 13.9(在实际情况下还需要考虑业务增长等问题, 这里不再详述).

QPS: 每秒查询率

当一个事务只对应一个接口且这个接口为查询接口时, TPS = QPS;

 资源的利用率

通过查看系统占用情况分析资源瓶颈.

服务器: CPU, 内存, 磁盘, 网络等.

性能测试关注点

不同角色看待性能测试的侧重点不同.

从客户端发起一个请求到客户端收到请求的整个过程中, 各阶段都可能存在问题.

后端处理请求的性能问题

服务器硬件资源(CPU, 内存, 硬盘)

中间件, 网络, 数据库, 架构设计是否存在瓶颈.

开发人员和测试人员不需要关注全流程的性能问题. 通过分析不同角色的侧重点, 从而促进性能测试更好的开展. 和软件系统性能相关的角色主要有4种.

终端用户

对于终端用户来说, 表现为用户进行业务操作时的主观响应时间. 用户重点关注从你提交请求到收到响应的时间, 包括之前讲到的前端展示时间和系统响应时间.

运维人员

系统运维人员除了关注单个请求的响应时间, 更关注大量用户并发访问时对系统的影响. 以及更大负载量的情况下系统的健康状态. 从而执行系统的整体策略.

1.关注全局利益最大化, 对最大并发用户数和系统响应时间进行权衡取舍.(两者的优先级视实际业务情况而定).

2.系统并发处理时间, 系统容量, 数据库调优, 以及长时间运行的稳定性和可扩展性.

软件设计开发人员

关注算法设计, 架构设计, 性能最佳实践, 数据库相关, 软件性能和可测试性等方面.

例如对于算法要保证高效, 无内存泄漏; 对于架构, 要保证系统容量和性能可扩展.

测试人员

工作重点在于性能测试场景的设计, 脚本的开发和执行, 以及性能缺陷的排查和定位.

性能测试分类

基准测试

基准测试又称单用户测试, 主要用于监测被测系统在较低压力下的运行状态并记录相关数据. 当性能测试环境确定后, 通常选取业务模型中的重要业务做基准测试, 对被测系统施加一定的压力 从而获取被测系统在单用户运行状态下各项性能指标, 为多用户并发测试和混合场景测试提供依据.

并发测试

 并发测试用于评估被测系统的某些特定操作同时发生时的性能表现, 例如, 被测系统被多个用户同时登录时的响应能力, 或系统的某一功能被多个用户同时操作时的性能表现. 通过并发测试, 不仅可以获得被测系统在多用户并发操作时的性能指标, 还可以发现被测系统在并发条件下可能发生的问题. 如内存泄漏, 线程锁, 资源争用问题. 例如, 通过模拟多个用户同时访问某一条件数据, 或模拟多个用户同时更新数据, 可能会发现被测系统的数据库访问错误, 写入错误等. 几乎所有的性能测试都会涉及到并发测试. 但并发测试对并发时间要求比较苛刻, 通常需要借助专门的性能测试工具, 采用多线程或多进程的方式来模拟多个虚拟用户的并发性操作.

负载测试

负载测试是性能测试的一种类型, 用于评估被测系统在预期的不同负载下的行为.   负载测试关注系统处理不同负载的能力, 这些负载可通过控制并发用户或者进程的数量来实现. 进行负载测试时, 通过对系统不断增加并发访问负载 , 检测系统性能的变化, 直到系统的某项或多项性能指标达到临界安全值, 最终确定在满足安全临界值的性能指标下, 系统所能承受的最大负载量. 简而言之, 负载测试是通过逐步加载的方式确定系统的处理能力.  就比如举重运动员, 不断给他增加配重, 确定他在身体情况正常的情况下所能举起的最大重量. 通过负载测试可以获取系统能达到的峰值指标.

例如: 一个软件系统的响应时间要求不超过2s, 如果在这个前提下不断增加用户访问量, 系统的响应时间就会变长. 假设当访问量超过1w人时的系统响应时间超过2s, 那么就可以确定在系统响应时间不超过2s的前提下, 系统的最大负载量是1w人. 负载测试可用于系统的性能验证, 性能诊断和性能调优等场景. 

压力测试

 压力测试用于评估被测系统在高于预期, 高于指定容量负载需求或低于最少需求资源的条件下的行为, 且需要运行比较长的时间. 压力测试关注被测系统处理超出预期或特定峰值负载的能力, 也可以用于评估系统在资源匮乏时的处理能力. 比如在可用计算能力, 带宽和内存资源不足的条件下系统的表现. 进行压力测试时通常采用逐步增加系统负载的方式, 使系统某些资源达到饱和甚至失效, 从而发现那些只有高负载条件下才会出现的缺陷.  如同步问题, 内存泄漏, 数据库崩溃等问题. 通过对被测系统进行压力测试, 也能找出被测系统的性能拐点, 获得系统所能提供的最大服务级别(系统所能承受的最大压力), 评估系统在峰值负载或超出最大负载情况下的处理能力. 压力测试主要用于性能诊断,性能调优和容量规划的场景.

压力测试和负载测试的区别

压力测试和负载测试不同. 负载测试是在保持性能指标要求的前提下测试系统能够承受的最大负载, 而压力测试则是测试系统性能达到极限的状态.  例如: 软件系统要求的响应时间为2s. 进行负载测试发现, 当访问量到达1w时, 系统的响应时间不超过2s, 而访问量超过1w时, 系统的响应时间则会超过2s, 那么, 在满足系统响应时间指标的前提下, 该系统能够承受的最大访问量为1w. 在进行压力测试, 则可继续增加系统的访问量, 并观察系统的性能变化. 例如, 当系统访问量增加到2w时, 发现系统的响应延迟时间为5s, 而访问量为3w时, 系统崩溃, 无法做出响应. 由此可确定系统达到极限访问量为3w.

 稳定性测试

在负载测试的基础上, 执行较长时间的测试以检查系统稳定性. 通常指3*24h以上.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何统计区域内部公路总长度和绘制数据直方图

交通对区域经济发展具有重要的意义,诸多经济学文献均对此进行了深入探讨,那么如何在ArcGIS上统计区域内部交通路线的总长度呢?本文以全国各省份主要公路总长度为例详细介绍了相关ArcGIS以及统计直方图的操作。 工具: 使用ArcGIS中…

【JavaScript】内置对象 - 数组对象 ③ ( 数组反转 - reverse 方法 | 数组排序 - sort 方法 | 自定义数组排序规则 )

文章目录 一、数组排序1、翻转数组元素 - reverse()2、数组元素排序 - sort() 默认从小到大排序3、数组元素排序 - sort() 自定义排序规则4、数组元素排序 - sort() 自定义降序排序简化写法 Array 数组对象参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript…

C#编程模式之享元模式

创作背景:各位朋友,我们继续学习C#的编程模式,本文主要介绍享元模式。享元模式是一种结构型设计模式,它主要用于减少创建对象的数量,从而提高程序性能。它通过共享对象的方式来减少内存的使用,特别是系统中…

彩虹聚合DNS管理系统

聚合DNS管理系统可以实现在一个网站内管理多个平台的域名解析,目前已支持的域名平台有:阿里云、腾讯云、华为云、西部数码、CloudFlare。本系统支持多用户,每个用户可分配不同的域名解析权限;支持API接口,支持获取域名…

同城组局同城活动找搭子小程序JAVA源码面芽组局的实现方案

功能概述 基于微信小程序开发的一款软件,支持用户动态发布、私信聊天关注、礼物充值打赏、发起活动组局、用户报名参与、支持商家入驻,对接广告功能等。 活动发布:用户可以在平台上发布各种类型的活动,如户外徒步、音乐会观赏、…

回炉重造java----单列集合(List,Set)

体系结构: 集合主要分为两种,单列集合collection和双列集合Map,区别在于单列集合一次插入一条数据,而双列的一次插入类似于key-value的形式 单列集合collection 注:红色的表示是接口,蓝色的是实现类 ①操作功能: 增加: add()&am…

探索震坤行API:一键解锁高效工业用品采购新纪元!

震坤行是一家专注于工业用品的B2B电商平台,为企业客户提供一站式的工业用品采购服务。虽然震坤行没有直接公开通用的API接口供开发者调用,但通常大型企业或合作伙伴之间可以通过API进行系统集成和数据交互。以下是一个假设性的震坤行API接口调用示例与代…

博特激光:355nm高精度紫外激光打标机带来极致工艺

紫外激光打标机在现代制造业和技术中的应用,的确在准确度和精密度方面带来了革命性的提高。特别是在微电子、半导体、医疗器械、高端消费品等需要高精度、高清晰打标的行业,紫外激光打标机以其独特的优势,赋予产品极致的工艺品质。 以下是UV激…

软件测试之 接口测试 Postman使用

接口测试 URL HTTP协议 HTTP 请求部分 HTTP响应部分 Postman使用 界面介绍 这里 注意 如果你无法访问 那么 captchaImage这个打错了,给的资料中是错误的地址 https://kdtx-test.itheima.net/api/captchaImage登录接口 科大天下 第一个接口的登录设置 https://kd…

基于vgg16和efficientnet卷积神经网络的天气识别系统(pytorch框架)全网首发【图像识别-天气分类】

一个能够从给定的环境图像中自动识别并分类天气(如晴天、多云、雨天、雪天等)的系统。 技术栈: 深度学习框架:PyTorch基础模型:VGG16与EfficientNet任务类型:计算机视觉中的图像分类 模型选择 VGG16 VGG…

Redis 源码安装(CentOS 单机)

序言 本文给大家介绍如何在 CentOS 上,通过 Redis 源码单机部署 Redis 服务。 一、部署流程 通过官网下载源码 # 下载源码 wget https://download.redis.io/redis-stable.tar.gz# 解压源码包 tar -xzvf redis-stable.tar.gz在 linux 中执行以下命令,安…

信息系统项目管理师0101:项目建议与立项申请(7项目立项管理—7.1项目建议与立项申请)

点击查看专栏目录 文章目录 第七章 项目立项管理7.1项目建议与立项申请1.立项申请概念2.项目建议书内容记忆要点总结第七章 项目立项管理 项目立项管理是对拟规划和实施的项目技术上的先进性、适用性,经济上的合理性、效益性,实施上的可能性、风险性以及社会价值的有效性、可…

Java面试——MyBatis

优质博文:IT-BLOG-CN 一、MyBatis 与 JDBC 的区别 【1】JDBC 是 Java 提供操作数据库的 API;MyBatis 是一个持久层 ORM 框架,底层是对 JDBC 的封装。 【2】使用 JDBC 需要连接数据库,注册驱动和数据库信息工作量大,每…

Html生成自定义函数的图形(2024/5/10)

大概效果如下: 可以自定义函数和x的定义域。 我们可以使用数学表达式解析库来解析用户输入的函数方程,并根据给定的 x 区间计算函数的值,然后使用图表库绘制图形。 在这里,我将使用 math.js 库来解析数学表达式,并使…

linux fdisk 银河麒麟操作系统 v10 磁盘分区和挂载 详细教程

1查看 未加载的磁盘 fdisk -l 2 开始分区 fdisk /dev/vdb #查看分区 #新建分区和保存 3 格式化和挂载 fdisk -l mkfs.xfs /dev/vdb1 #查看uuid blkid /dev/vdb1 mkdir /data vi /etc/fstab UUID209daa-fb1c-48f2-bf5e-e63f38cb8a /data xfs defaults 0 0 #加载下 mo…

Java 各类注解、Bean、作用域、生命周期

这里写目录标题 一、注解和Bean创建时机1. Controller:2.RestController:3.Service:4.Repository:5.Component: 二、作用域1.Singleton:2.Prototype:3.Request:4.Session: 一、注解和Bean创建时机 1. Controller: Bean生成时机: 在应用程序启动时由Spring容器创建。作用域: 默…

力扣每日一题37:解数独

目录 题目 大致思路 方法一:回溯剪枝(正常人能想出来的) 方法二:位运算优化剪枝 需要使用的位运算技巧 代码 位运算怎么就优化了呢? 方法三:枚举优化。 官解代码 方法四:舞蹈链算法 题…

机器学习-Padans

机器学习-Padans 面对人生的烦恼与挫折,最重要的是摆正自己的心态,积极面对一切。再苦再累,也要保持微笑。笑一笑,你的人生会更美好! 目录 机器学习-Padans 1.DataFrame 2.画图 3. 扩展: 1.DataFrame #…

一键局域网共享工具

一键局域网共享工具:实现文件快速共享的新选择 在数字化时代,文件共享已成为我们日常工作和生活中的重要需求。无论是在家庭还是在办公环境中,我们经常需要在不同的设备之间传输文件。为了满足这一需求,一键局域网共享工具应运而…

python爬虫(三)之虎嗅网汽车文章爬虫

python爬虫(三)之虎嗅网汽车文章爬虫 闲来没事,闲鱼上有个好兄弟要我从虎嗅网上抓一些汽车文章的爬虫,于是大力出奇迹,我写了一个python程序,将这个网站上所有的汽车文章全部抓取下来了,存储到…