大话性能测试系列(3)- 常用的性能指标

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 大话性能测试系列(3)- 常用的性能指标

如果你对性能测试感兴趣,但是又不熟悉理论知识,可以看下面的系列文章

https://www.cnblogs.com/poloyy/category/1620792.html

 

两种性能指标


  • 业务指标
  • 技术指标

通常我们会从两个层面定义性能场景的需求指标,它们有映射关系,技术指标不能脱离业务指标

image.png


并发


狭义

指同一个时间点执行相同的操作(如:秒杀)

 

广义

  • 同一时间点,向服务器发起的请求(可能是不同的请求)
  • 只要向服务器发起请求,那么服务器在这一时间点内都会收到请求(不管是不是同一个请求)

 

场景类比

高速公路上,同时有多少辆车经过同一个关卡,但不一定是同一个牌子的汽车

 

并发用户数(重点)


  • 同一时间点,发出请求的用户数,一个用户可以发出多个请求
  • 场景不一定是同一个
  • 和 CPU、响应时间有关系

 

和并发的关系

假设有 10 个用户数,每个用户同一时间点内发起 2 个请求,那么服务器收到的请求并发数就是 20

 

性能测试小场景一

  • 不同身份的用户,访问不同的页面或发起不同的请求(广义的并发)
  • 观察 CPU 使用率和响应时间

 

性能测试小场景二

  • 所有用户,同一个时间点发送同一个请求(狭义的并发)
  • 观察 CPU 使用率和响应时间

 

系统用户数

  • 系统累计注册用户数,不一定在线
  • 注册之后也可以一直不在线
  • 因为用户信息是存在数据库的,而数据库数据就是存在磁盘中,所以系统用户数和磁盘空间有关系

 

性能测试小场景

  • 写一个脚本添加很多条用户信息插入到数据库
  • 目的:测试系统容量,方便了解系统的最大容量
  • 实际项目中,当系统容量接近最大容量时,系统需要进行容量扩容(加磁盘空间),否则就会爆掉

 

在线用户数

  • 在线用户可能是正常发起请求,也可能只是挂机啥操作都没有,不一定同时做某一件事情
  • 在线用户可能是游客(未注册的用户),也可能是系统用户(已注册的用户)
  • 在线用户数并发用户数
  • 和内存有关系

 

性能测试小场景

  • 使用 Jmeter 让不同的用户不断上线,且不下线和发起其他请求,看看内存使用情况
  • 实际场景:12306 以前很多用户在线,响应时间会拉的很长

 

线程数

在 jmeter 中,线程数和并发用户数等价【和CPU、响应时间有关系】

 

事务


  • 客户端向服务器发送请求,然后服务器做出响应的过程
  • 登录、注册、下单等功能都属于一个事务
  • 一个事务可能会发起多个请求

 

jmeter 相关

jmerter 中,默认一个接口请求,就是一个事务;但也支持多个接口整合成一个事务

 

注意点

若一个业务或事务有多个接口,那么多个单接口的性能指标值相加 业务或事务的性能指标值

 

再来看看有哪些常见的性能指标值


image.png


响应时间(Respose Time)


响应时间对于性能测试来说

  • 从发起请求到收到请求响应的时间
  • 包含了:Request Time 和 Response Time
  • 等价于:发起请求网络传输时间 + 服务器处理时间 + 数据库系统处理时间 + 返回响应网络传输时间

 

 

对用户所感知的响应时间包括

  • 用户客户端渲染时间(多了这个)
  • 请求/响应数据网络传输时间
  • 应用服务器处理时间
  • 数据库系统处理时间

 

重点

在做性能测试时,要尽可能的降低网络传输时间,这样最终得出的 RT 会无限接近服务器处理时间,所以我们要把网络环境搞好

 

事务请求响应时间

完成单个事务所用的时间,可能包含了多个请求

 

假如用户说应用很慢,要怎么分析?(仅供参考)

  • 单个用户慢?还是多个用户慢?手上只有我们自己的应用慢?还是所有应用都这么慢?
  • 网络问题的话,带宽是用哪家营业商?不同营业商是不是都卡?还是只有用户所在的营业商卡?
  • .....等等等

 

响应时间多少合理?

  • 标准是:2、5、8
  • 2秒:很好
  • 5秒:可以接受
  • 8秒:不能接受

 

TPS(Transaction Per Second,最主要的指标)


服务器每秒处理事务数,衡量服务器处理能力的最主要指标

 

知道 T 是如何定义的

  • 在不同的行业、业务中,TPS 定义的颗粒度可能是不同的
  • 所以不管什么情况下,需要做性能测试的业务的相关方都要知道你的 T 是如何定义的

 

定义 TPS 的粒度

  • 一般会根据场景的目的来定义 TPS 的粒度
  • 接口层性能测试:T 可以定义为接口级
  • 业务级性能测试:T 可以定义为每个业务步骤和完整的业务流

 

栗子

image.png


如果要单独测试接口 1、2、3,那么 T 就是接口级

如果从用户角度下订单,那 1、2、3 都在一个 T 中,就是业务级

结合实际业务设计,库存服务一定是同步,而积分服务可以是异步,所以这个下单业务,可以只看作由 1、2 这两个接口组成,但是 3 接口还是要监控分析的

 

所以,性能中 TPS 中 T 的定义取决于场景的目标和 T 的作用

 

拿上图做个例子

接口级脚本

——事务 start(接口 1)

接口 1 脚本

——事务 end(接口 1)

——事务 start(接口 2)

接口 2 脚本

——事务 end(接口 2)

——事务 start(接口 3)

接口 3 脚本

——事务 end(接口 3)

 

业务级接口层脚本(就是用接口拼接出一个完整的业务流)

——事务 start(业务 A)

接口 1 脚本 - 接口 2(同步调用)

接口 1 脚本 - 接口 3(异步调用)

——事务 end(业务 A)

 

用户级脚本

——事务 start(业务 A)

点击 0 - 接口 1 脚本 - 接口 2(同步调用)

点击 0 - 接口 1 脚本 - 接口 3(异步调用)

——事务 end(业务 A)

 

总结

一般情况下,我们会按从上到下的顺序一一来测试,这样路径清晰地执行,容易定位问题

 

QPS(Queries per Second)


  • 每秒查询率,在数据库中每秒执行 SQL 数量
  • 一个请求可能会执行多条 SQL
  • 某些企业可能会用QPS代替TPS
  • 也是衡量服务端处理能力的一个指标,但不建议使用

 

RPS(Request per Second)


简单理解

每秒请求数,用户从客户端发起的请求数

 

深入挖掘

对于请求数来说,也要看是哪个层面的请求,把上面的图做一点点变化来描述请求数

image.png


如果一个用户点击了一次,发出来 3 个 HTTP Request,调用了 2 次订单服务,调用了 2 次库存服务,调用了 1 次积分服务

问:Request 数量如何计算

答:3+2+2+1 = 8?不, 应该是 3,因为发出了 3 个 Request,而调用服务会有单独的描述,以便做性能统计

 

 

HPS(Hit per Second)


  • 点击率,每秒点击数
  • 可直接理解为用户在界面上的点击次数
  • 一般在性能测试中,都用来描述 HTTP Request,那它代表每秒发送 HTTP 请求的数量,和 RPS 概念完全一样
  • HPS 越大对 Server 的压力越大

 

CPS/CPM(Calls Per Second/ Calls Per Minutes)


  • 每秒/每分钟调用次数
  • 通常用来描述 Service 层的单位时间内被其他服务调用的次数

 

栗子

上图的订单服务、库存服务、积分服务,各调用了2、2、1次,还是比较好理解的

 

TPS、QPS、RPS、HPS、CPS 的总结


有很多维度可以衡量一个系统的性能能力,但是如果把五个指标同时都拿来描述系统性能能力的话,未必太混乱了

 

为此我们可以这样做

  • TPS来统一形容系统的性能能力,其他的都在各层面加上限制条件来描述,比如说:接口调用 1000 Calls/s
  • 在团队中要定义清楚术语的使用场景,还有含义

 

吞吐量(Throughput)


单位时间内,网络处理的请求数量(事务/s)

网络没有瓶颈时,吞吐量≈TPS

 

吞吐率


单位时间内,在网络传输的数据量的平均速率(kB/s)

 

资源利用率


  • 服务器资源的使用程度,比如服务器(应用、服务器)的CPU利用率,内存利用率,磁盘利用率,网络带宽利用率
  • 一般不超过80%

 

Think Time 思考时间


从业务角度看

  • 它指的是用户进行操作时,每个请求之间的时间间隔
  • 比如:加入购物车后,多久之后会点击下单?浏览一个商品多久会加入购物车

 

从性能测试角度看

  • 为了模拟用户两次操作之间的时间间隔,才有 Think Time,更加真实的模拟用户的真实操作
  • 它和用户行为有关系,所以应该分析的是用户行为而非用户数

 

结尾


本篇博文,部分参考了高老师的《性能测试实战30讲》,因为指标那一块讲的特别好哦~

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
缓存 前端开发 测试技术
软件测试|性能测试中常用的性能指标有哪些?
软件测试|性能测试中常用的性能指标有哪些?
307 0
|
前端开发 JavaScript 安全
性能测试(3)——性能指标
指客户端向服务端发送请求时,所有的页面资源元素的请求的总数量。 点击数不是通常一般人认为的访问一个页面就是1次点击数,点击数是该页面包含的元素(图片、链接、框架等)向Web服 务器发出的请求数量。 通常我们也用每秒点击次数(Hits per Second)指标来衡量Web服务器的处理能力。 强调:非业务请求,是资源请求,如js,css等 ,只有web项目才有此指标 。
251 0
|
26天前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
51 2
|
2月前
|
测试技术 持续交付 Apache
深度挖掘:Python性能测试中JMeter与Locust的隐藏技能🔍
【8月更文挑战第5天】随着软件规模扩大,性能测试对系统稳定性至关重要。Apache JMeter和Locust是两大主流工具,各有千秋。本文探索它们在Python环境下的进阶用法,挖掘更多性能测试潜力。JMeter功能强大,支持多种协议,可通过命令行模式执行复杂测试计划,并与Python集成实现动态测试数据生成。Locust基于Python,通过编写简洁脚本模拟HTTP请求,支持自定义请求及与Python库深度集成。掌握这些技巧可实现高度定制化测试场景,有效识别性能瓶颈,提升应用稳定性。
115 1
|
2月前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
【8月更文挑战第5天】性能测试确保应用高负载下稳定运行。Apache JMeter与Locust是两大利器,助力识别解决性能瓶颈。本文介绍这两款工具的应用与优化技巧,并通过实战示例展示性能测试流程。首先,通过JMeter测试静态与动态资源;接着,利用Locust的Python脚本模拟HTTP请求。文中提供安装指南、命令行运行示例与性能优化建议,帮助读者掌握性能测试核心技能。
94 0
|
2月前
|
消息中间件 Java 测试技术
Python性能测试全攻略:JMeter与Locust,双剑合璧斩断性能瓶颈🗡️
【8月更文挑战第4天】在软件开发中,性能至关重要。对Python开发者来说,掌握高效性能测试方法尤为关键。本文将带您探索性能测试工具JMeter与Locust的强大功能。JMeter作为Java世界的巨擘,以其强大功能和灵活性在性能测试领域占有一席之地,不仅适用于Java应用,也能测试Python Web服务。
86 0
|
21天前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
25天前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
【9月更文挑战第10天】随着软件应用的不断扩展,性能测试成为确保系统稳定运行的关键环节。本文通过对比Apache JMeter和Locust,探讨了如何在Python环境中利用这两款工具挖掘更多性能测试潜力。JMeter是一款成熟且功能强大的开源工具,支持多种协议,适用于各种应用的测试;而Locust则基于Python,通过简单脚本模拟HTTP请求,更适合Web应用测试。
59 2