性能测试 --概念

什么是性能测试

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

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

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

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

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

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

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

就以购物软件为例:

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.mzph.cn/diannao/9913.shtml

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

相关文章

【unity】用代码实现“碰到障碍后 运动对象的运动方向如何改变(反弹/滑行)”

想要实现的效果: 例1:飞出的弹丸,碰到墙壁后,反弹。【↘️| 】——>【↙️| 】 例2:向右下方【↘️】移动的对象,碰到右侧的墙壁 【↘️| 】 后,继续沿着着墙壁向下方移动【↓ | 】 为什么要…

npm run build 时出现语法报错 Module parse failed: Unexpected token

错误原因 出现这个错误一般是你使用了或者引用的包里出现了ES6的语法,但是你的webpack可能是4.x或者更低版本的, 这时候单靠webpack本身无法识别ES6的语法,但是升级webpack到5可能会与现有的代码产生兼容性问题,因此就需要引入b…

服务器内存占用不足会怎么样,解决方案

在当今数据驱动的时代,服务器对于我们的工作和生活起着举足轻重的作用。而在众多影响服务器性能的关键因素当中,内存扮演着极其重要的角色。 服务器内存,也称RAM(Random Access Memory),是服务器核心硬件部…

2024-AIDD-人工智能药物设计-使用的软件包和网络服务器

Python 软件包 化学信息学和结构生物信息学: rdkit: http://rdkit.org/openbabel: https://openbabel.org/mdanalysis: https://www.mdanalysis.org/biopython: https://biopython.org/biopandas: https://biopandas.github.io/biopandas/opencadd: https://openca…

算法-靠谱的车(数位模拟)

import java.util.*; public class Main{public static void main(String[] args){Scanner innew Scanner(System.in);int nin.nextInt(),copyn;// 取每一位上的数放入数组List<Integer> listnew ArrayList<>();while(n!0){int resn%10;list.add(0,res);n/10;}// 转…

回炉重造java----双列集合(HashMap,TreeMap)

体系结构 ①基本操作: ②遍历方式: 第一种: 键找值&#xff0c;通过map.keySet()获取Map的键集合&#xff0c;通过键去匹配Map中的值 Set<String> strings map.keySet();for (String string : strings) {System.out.println(map.get(string));} 第二种: 键值对&…

【linux】vmtouch文件缓存管理工具

目录 vmtouch简介 用法 例子 统计文件或者目录在缓存中的记录 缓存文件到内存 其他类似工具 vmtouch简介 vmtouch是用c语言编写的文件缓存管理工具&#xff0c;适用用于所有类Unix系统。 作用&#xff1a; 1&#xff0c;查看文件系统缓存情况 2&#xff0c;将文件或目…

多个.C文件被编译为一个可执行文件的详细过程

多个.C文件被编译为一个可执行文件的详细过程 文章目录 多个.C文件被编译为一个可执行文件的详细过程前言一、一个.C文件的编译过程二、多个.C文件的链接过程1.文件信息2.链接过程3.makefile 总结 前言 C语言经典的 “hello world ” 程序从编写、编译到运行&#xff0c;看到屏…

【Qt 学习笔记】Qt常用控件 | 多元素控件 | List Widget的说明及介绍

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 多元素控件 | List Widget的说明及介绍 文章编号&#x…

java springboot项目 Linux 启动脚本

start.sh #!/usr/bin/env bashnohup java -jar ../demo.jar --spring.config.location../config/application.yml >../root.log 2>&1 & --spring.config.location 指定配置文件 --server.address 指定服务器的网络地址 stop.sh #!/bin/bash# 停止项目 progra…

pytorch 梯度更新过程

这段代码片段展示了使用 PyTorch 进行模型训练的常见步骤。 optimizer.zero_grad() loss_sum.backward() optimizer.step()在这个代码片段中&#xff0c;假设你已经定义了一个模型&#xff0c;并且有一个损失函数 loss&#xff0c;以及一个优化器 optimizer。 下面是这段代码…

线性表

1.1线性表的定义 线性表&#xff1a;零个或多个数据元素的有限序列。 注&#xff1a; &#xff08;1&#xff09;它是一个序列。元素之间是有顺序的&#xff0c;若元素存在多个&#xff0c;则第一个元素无前驱&#xff0c;最后一个元素无后继&#xff0c;其他元素有且只有一个…

dragonbones 5.6.3不能导出的解决办法

问题描述 使用dragonbones 5.6.3导出资源时无反应。 解决方法 第一步安装node.js&#xff0c;我这里使用的是V18.16.0第二步进入到DragonBonesPro\egretlauncher\server\win目录&#xff0c;然后把里面的node.exe替换为刚刚下载的node文件夹即可&#xff0c;如下图&#xff…

用js操作dom节点的一些方法

一、获取节点 document.getElementById(id); 返回拥有指定 id 的第一个节点 document.getElementsByName(name); 返回带有指定名称的节点集合 document.getElementsByTagName(tagname); 返回带有指定标签名的节点集合 document.getElementsByClassName(classname); 返回带有…

设计模式——命令模式(Command)

在面向对象程序设计的范畴中&#xff0c;命令模式&#xff08;Command Pattern&#xff09;是一种设计模式&#xff0c;它尝试以对象来代表实际行动。具体来说&#xff0c;命令模式将一个请求封装为一个对象&#xff0c;从而使你可以使用不同的请求对客户进行参数化&#xff0c…

Reacet NEXT.js 服务端渲染的优势?

React 和 Next.js 都支持客户端渲染&#xff08;CSR&#xff09;和服务端渲染&#xff08;SSR&#xff09;&#xff0c;而服务端渲染在某些情况下具有一些显著的优势&#xff0c;这些优势包括&#xff1a; SEO 优化&#xff1a;搜索引擎爬虫更容易理解和索引服务端渲染的页面内…

FonePaw Data Recovery for Mac:轻松恢复丢失数据

FonePaw Data Recovery for Mac是一款功能强大的数据恢复软件&#xff0c;专为Mac用户设计&#xff0c;帮助用户轻松恢复因各种原因丢失的数据。该软件支持从硬盘驱动器、存储卡、闪存驱动器等存储介质中恢复丢失或删除的文件&#xff0c;包括照片、视频、文档、电子邮件、音频…

[windows系统安装/重装系统][step-3]装驱动、打驱动、系统激活

重装系统三部曲 [windows系统安装/重装系统][step-1]U盘启动盘制作&#xff0c;微软官方纯净系统镜像下载-CSDN博客 [windows系统安装/重装系统][step-2]BIOS设置UEFI引导、磁盘分区GPT分区、安装系统[含完整操作拍照图片]-CSDN博客 [windows系统安装/重装系统][step-3]装驱动…

数据分析:基于sparcc的co-occurrence网络

介绍 Sparcc是基于16s或metagenomics数据等计算组成数据之间关联关系的算法。通常使用count matrix数据。 安装Sparcc软件 git clone gitgithub.com:JCSzamosi/SparCC3.git export PATH/path/SparCC3:$PATHwhich SparCC.py导入数据 注&#xff1a;使用rarefy抽平的count ma…

web安全之登录框渗透骚姿势,新思路

不管漏洞挖掘还是挖SRC&#xff0c;登录框都是重点关注对象&#xff0c;什么漏洞都有可能出现&#xff0c; 本篇文章做个总结&#xff0c;后面发现新思路后会继续更新 万能密码 or 弱口令 SQL注入 水平越权 垂直越权 逻辑漏洞 短信轰炸 邮箱轰炸 信息泄露 验证码DOS XSS万能密…