当前位置: 首页 > news >正文

【软件测试】性能测试相关指标

性能测试

了解性能测试相关指标

1.什么是做性能测试

1.1 生活中遇到的软件性能问题

软件用着用着就不能用了,一看热搜,发现该软件的服务器崩崩溃了。

1.2 性能测试定义

测试人员借助性能测试工具,模拟系统在不同场景下,对应的性能指标是否满足需求。

1.3 性能测试和功能测试的区别

  • 功能测试依靠人工去执行。性能测试依靠工具完成。
  • 功能测试:验证软件是否实现了需求。不管在什么场景下,只要能够正常运行即可。
  • 性能测试:在软件能够正常运行的前提下。软件在极端的情况下,是不是能正常运行。

性能测试是在功能测试之后执行的。

1.4 什么样的表现属于软件性能好的表现

相应时间短,资源利用率高,日活跃用户数多,吞吐量大。

  • 一个软件登录时间3ms比登录时间3s的性能要好
  • 软件日活跃用户数多的,比日活跃用户数少要性能好
  • 软件由于用户访问次数多,软件采用了较少并发数,软件算法优化,服务器升级的软件性能比用户访问人数一多就崩溃的软件好。

image-20231128172205669

DAU:日活跃用户数。

1.5 影响一个软件性能因素

  • 硬件:服务器CPU利用率,内存,磁盘操作频率,CPU核心数,网络带宽。
  • 软件:实现软件的算法,编写软件的编程语言
  • 用户:用户数量,用户使用时长,用户的使用频率

为什么要做性能测试?

  • 获取系统性能的指标,作为性能指标的基准(基准性能测试)
  • 验证系统的性能指标是否达到要求(性能需求)
    • 应用程序是否能够满足系统要求的各种性能指标
    • 应用程序是否能处理预期的用户负载并有盈余能力
    • 应用程序是否能处理业务所需要的事务数量
    • 在预期和非预期的用户负载下,应用程序是否稳定
    • 是否能确保用户在真正使用软件时获得舒服的体验
  • 发现系统的性能瓶颈,内存泄漏等问题。
  • 系统正常工作的情况下的最大容量。
  • 帮助系统运维部门能更好的规划硬件配置

2.性能测试常见术语以及衡量指标

2.1 并发:

  • 1个用户访问该网站(×)
  • 100万个用户每隔10s时间访问该网站(×)
  • 100万个用户同时访问该网站(√)

并发要满足大量用户同时访问

业务层面的并发用户数:指的是同时向服务器发送请求的用户数量。 后端服务器层面的并发用户数:指的是同时向服务器发送请求的请求数量

后端服务器层面的并发用户数 >= 业务层面的并发用户数

2.2 用户数:

  • 系统用户数:系统注册用户数(数据库对其进行维护,不一定访问系统,不访问的不会对系统产生压力)
  • 在线用户数:成功登录系统的用户数(相当于qq登录上账号了 ,停留在登录成功页面。并不会对系统产生压力)
  • 并发用户数:大量用户同时访问系统,此时访问的用户数就是并发用户数。

数量 系统用户数 > 在线用户数 > 并发用户数

2.3响应时间

image-20230918081412023

用户响应时间:发出请求开始,到客户端接收完所有的字节数据所消耗的时间 N1+A1+N2+A2+N3+A3+N4

请求响应时间:服务器收到请求发出相应这段时间是请求响应时间。A1+N2+A2+N3+A3

影响一个软件的响应时间因素有那些?

用户设备,网络带宽,服务器的配置(CPU,内存),软件算法逻辑,数据库性能

2.4 事务

数据库的事务就是把多个操作打包到一起,构成原子操作。

性能测试中,事务指的是指一组密切相关的子操作的组合 ,比如一次登录、一次筛选条件查询,一次支付等;

  • 事务响应时间:用户完成某个具体事务(比如支付操作)所需要的时间。
  • 358原则:对于一般系统而言,如果用户点击按钮后,系统可以在3秒钟内得到应答,则用户比较满意;如果系统在5秒内得到应答,则用户能够忍受;如果系统在8秒后得到应答,则用户不能忍受
  • 每秒事务通过数: 处理的事务数量/事务花费的时间, 每秒事务通过的数量越多说明软件性能越好的。

TPS 是指每秒系统能够处理的事务数。它是衡量系统处理能力的重要指标。这个指标衡量了系统在同一时间内处理业务的最大能力。 当压力加大时,TPS曲线如果变化缓慢或者有平坦的趋势,很有可能是服务器开始出现瓶颈了。如果环境没有发生大的变化,对于同一系统会存在一个最大处理事务能力,它并不随着并发用户的增减而改变

2.5 点击率

点击量:用户点击发送的http请求数,并不能衡量软件性能

点击率:点击量/时间

每秒点击数代表用户每秒向Web 服务器提交的HTTP请求数。点击率越大,服务器压力越大。这里的点击并不是鼠标的一次点击,一次点击可能有多次HTTP请求。

2.6 吞吐率

吞吐量:用户一次请求和服务器之间的数据交互量。并不能衡量软件性能

吞吐率:吞吐量/时间。吞吐率越高软件性能越好

2.7 思考时间

用户在对软件进行操作的时候,每一个操作中间的时间间隔。

2.8 资源利用率

不同系统资源的使用情况。包含CPU,内存,硬盘,网络等。

面试题:了解性能测试,那么你给我说一下你做性能测试的时候,你关注哪些指标?

image-20231128172317966

3.性能测试的分类

基准性能测试

定义:让系统在正常情况下运行,观察性能指标。建立一个性能基准,作为以后性能测试的参考。

应用场景:软件刚上线需要对性能进行摸底,软件进行升级后,性能测试的参考,衡量软件是变好了还是变坏了。

负载性能测试

验证软件在一定的压力情况下运行,观察性能指标是否出现拐点。

压力性能测试

系统处于临界饱和的情况下,观察系统性能指标。(往往会把系统搞崩溃)

可靠性测试

验证系统在一个持续的时间段内运行,在这个运行时间段内,观察系统各项性能指标是否正常。

持续1day -> 持续运行一周 -> 持续运行1个月 -> 一个季度 -> 一年

如果持续一天没问题就持续一周,如果持续一周没问题就持续一个月……

可靠性就是可用性,正常使用时间的占比。可靠性 = 正常运行时间/(正常运行时间+非正常运行时间)* 100*%*可用性指标一般要求达到4个或5个“9”,即99.99%或者99.999%

如果可用性达到99.99%,对于一个全年不间断(7*24的方式)运行的系统,意味着全年(252600min)不能

正常工作的时间只有52min,不到一个小时。

如果可用性达到99.999%,意味着全年不能正常工作的时间只有5min 。

可靠性测试靠人为是达不到要求的,需要借助工具比如(loadrunner)

造成可靠性降低的原因:软件硬件出现问题,网络故障出现问题,自然灾害导致服务器损坏出现问题,停电。

4.性能测试的执行流程

功能测试的执行流程:需求分析→测试计划→ 测试设计、测试开发→ 测试执行→ 测试评估(发布测试报告)→ 上线

性能测试的执行流程:需求分析→测试计划→选择一款性能测试工具→性能测试脚本编写→执行性能测试脚本→产生性能测试报告

性能测试中出现了不符合预期的情况,我们不叫做BUG,叫做性能瓶颈

在性能测试中,出现了性能瓶颈,开发修复的过程叫做优化

相关文章:

【软件测试】性能测试相关指标

性能测试 了解性能测试相关指标 1.什么是做性能测试 1.1 生活中遇到的软件性能问题 软件用着用着就不能用了,一看热搜,发现该软件的服务器崩崩溃了。 1.2 性能测试定义 测试人员借助性能测试工具,模拟系统在不同场景下,对应…...

Leetcode 2943. Maximize Area of Square Hole in Grid

Leetcode 2943. Maximize Area of Square Hole in Grid 1. 解题思路2. 代码实现 题目链接:2943. Maximize Area of Square Hole in Grid 1. 解题思路 这一题的话其实横轴和竖轴可以分开来独立考察,因为两者互不影响,我们最终的答案一定是两…...

qt 简单了解QHBoxLayout QVBoxLayout QFormLayout水平,垂直,表单布局管理器.

QHBoxLayout水平布局,QVBoxLayout垂直布局,QFormLayout表单布局管理器,是常用的布局管理器,是用代码编写应用界面必不可少的功能类. 1.tips 这里值得注意的是,2个单选按钮(QRadioButton)同时放进一个水平布局管理器(QHBoxLayout)中,相当于放进了一个分组器中,此时,2个单选按钮…...

springboot中4级配置文件优先级

springboot中4级配置文件优先级...

Python(八十九)函数的参数的内存分析

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…...

西南科技大学C++程序设计实验二(类与对象一)

C++最大的特点就是面向对象,掌握它的几种基本性质还是好理解的,可以看我C++专栏的期末速成,希望对你们学习C++有帮助。 一、实验目的 1.理解简单类的定义、说明与使用 2.理解类中不同属性数据成员的访问特点 3.理解构造函数、析构函数的作用 重点:掌握类的定义与实现,…...

代码随想录二刷 |哈希表 |四数之和

代码随想录二刷 |哈希表 |四数之和 题目描述解题思路 & 代码实现 题目描述 18.四数之和 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nu…...

KMP算法【数据结构】

KMP算法 KMP算法是一种改进的字符串匹配算法 Next[j] k :一个用来存放子串返回位置的数组,回溯的位置用字母k来表示。其实就是从匹配失败位置,找到他前面的字符串的最大前后相等子串长度。默认第一个k值为-1(Next[0] -1),第二个k值为0(Next[1] 0),我…...

测开笔记--Typescript: 文件复制到指定目录

开发背景: 自动化开发语言使用的是TypeScript;框架用的是playwright。有个测试脚本需要先将几个文件复制粘贴到新建的项目文件夹下,系统会读取该文件,然后生成页面信息。 关键字:文件复制粘贴; 新建的项目…...

数字滚动vue-count-to

数字滚动 下载插件 npm i vue-count-to 使用 start-val 起始值&#xff0c;表示从什么值开始滚 end-val 终点值&#xff0c;表示要滚到多大值 duration 滚动事件&#xff0c;表示用多长时间来滚动 <countTo :start-val"0" :end-val"228" :duration&quo…...

扩散模型实战(十一):剖析Stable Diffusion Pipeline各个组件

推荐阅读列表&#xff1a; 扩散模型实战&#xff08;一&#xff09;&#xff1a;基本原理介绍 扩散模型实战&#xff08;二&#xff09;&#xff1a;扩散模型的发展 扩散模型实战&#xff08;三&#xff09;&#xff1a;扩散模型的应用 扩散模型实战&#xff08;四&#xff…...

Mysql面试题总结

数据库三大范式是什么 第一范式&#xff1a;每个列都不可以再拆分。 第二范式&#xff1a;在第一范式的基础上&#xff0c;非主键列完全依赖于主键&#xff0c;而不能是依赖于主键的一部分。 第三范式&#xff1a;在第二范式的基础上&#xff0c;非主键列只依赖于主键&#…...

学习知识随笔(Django)

文章目录 MVC与MTV模型MVCMTV Django目录结构Django请求生命周期流程图路由控制路由是什么路由匹配反向解析路由分发 视图层视图函数语法reqeust对象属性reqeust对象方法 MVC与MTV模型 MVC Web服务器开发领域里著名的MVC模式&#xff0c;所谓MVC就是把Web应用分为模型(M&#…...

基于element自动表格

需求是根据JSON文件生成表格&#xff0c;包含配置和自动props属性以及过滤器&#xff1b; 数据示例&#xff1a; 表格设置&#xff1a; /*** 表格表头信息* chineseToPinYin: 这是封装的根据中文汉字转换为拼音的方法* prop: 表头字段名* filter: 数据过滤器* label: 表头显示…...

Python基础语法之学习数据转换

Python基础语法之学习数据转换 一、代码二、效果 一、代码 #数字转换成字符串 num_str str(11) print(type(num_str))#字符串转整数 numint("11") print(type(num),num)#浮点数转整数 float_num int(11.1) print(type(float_num),float_num)#整数转浮点数 num_flo…...

最新AI创作系统ChatGPT网站运营源码、支持GPT-4-Turbo模型,图片对话识图理解,支持DALL-E3文生图

一、AI创作系统 SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01;本系统使用NestjsVueTypescript框架技术&#xff0c;持续集成AI能力到本系统。支持OpenAI DALL-E3文生图&#xff0c;…...

Kotlin中常见的List使用

文章目录 1.filter2.map3.count4.first,last5.any,all,none6.find&#xff0c;findLast7.indexOf()和lastIndexOf()查找元素下标8.Slice切片9.Take()和drop()获取指定长度 1.filter filter 就像其本意一样&#xff0c;可以通过 filter 对 Kotlin list 进行过滤。 fun main() …...

汽车电子 -- 车载ADAS之LCA(变道辅助系统)

相关法规文件: LCA: ISO 17387-2008 Intelligent transport systems — Lane change decision aid systems 一、变道辅助系统 LCA &#xff08;Lane Change Assist&#xff09; LCA 系统&#xff08;变道辅助系统&#xff09;监测后方相邻车道区域&#xff0c;如果有车辆在后…...

MongoDB——golang操作(链接,CURD,聚合)

MongoDB golang操作 中文文档 链接 package mainimport ("context""fmt""log""go.mongodb.org/mongo-driver/mongo""go.mongodb.org/mongo-driver/mongo/options" )func main() {// 设置客户端连接配置clientOptions : o…...

音视频项目—基于FFmpeg和SDL的音视频播放器解析(十八)

介绍 在本系列&#xff0c;我打算花大篇幅讲解我的 gitee 项目音视频播放器&#xff0c;在这个项目&#xff0c;您可以学到音视频解封装&#xff0c;解码&#xff0c;SDL渲染相关的知识。您对源代码感兴趣的话&#xff0c;请查看基于FFmpeg和SDL的音视频播放器 如果您不理解本…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...

TCP/IP 网络编程 | 服务端 客户端的封装

设计模式 文章目录 设计模式一、socket.h 接口&#xff08;interface&#xff09;二、socket.cpp 实现&#xff08;implementation&#xff09;三、server.cpp 使用封装&#xff08;main 函数&#xff09;四、client.cpp 使用封装&#xff08;main 函数&#xff09;五、退出方法…...

Java数组Arrays操作全攻略

Arrays类的概述 Java中的Arrays类位于java.util包中&#xff0c;提供了一系列静态方法用于操作数组&#xff08;如排序、搜索、填充、比较等&#xff09;。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序&#xff08;sort&#xff09; 对数组进行升序…...

Django RBAC项目后端实战 - 03 DRF权限控制实现

项目背景 在上一篇文章中&#xff0c;我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统&#xff0c;为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...