性能专题:一文搞懂,性能测试指标评估方法

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 性能专题:一文搞懂,性能测试指标评估方法

1. 前言


在上一篇文章性能专题:一文搞懂性能测试常见指标中,已经介绍了,在开展性能测试时,各个维度的常见性能指标项有哪些。


而本文将继续介绍,对于软件性能而言,有哪些指标是需要重点关注的,并且这些重点关注的指标又是如何来评估和计算的。

2. 软件性能的关注点


对一个软件做性能测试时,一般需要关注哪些性能项呢?


换个角度来思考,我们在软件设计、部署、使用、维护中一共有哪些角色的参与,然后再考虑这些角色各自关注的性能点是什么?


首先,开发软件的目的是为了让用户使用,我们先站在用户的角度分析一下,用户会关注哪些性能呢。


对于用户来说,当点击一个按钮、链接或发出一条指令开始,到系统把结果以用户感知的形式展现出来为止,这个过程所消耗的时间是用户对这个软件性能的直观印象。也就是我们所说的响应时间,当响应时间较小时,用户体验是很好的。当然用户体验的响应时间包括个人主观因素和客观响应时间,在设计软件时,我们就需要考虑到如何更好地结合这两部分达到用户最佳的体验。如:用户在大数据量查询时,我们可以将先提取出来的数据展示给用户,在用户看的过程中继续进行数据检 索,这时用户并不知道我们后台在做什么。


因此,用户关注的是用户操作后软件的响应时间


其次,站在管理员或运维的角度考虑,他们一般关注的性能项有什么,通常来说,包括但不限如下一些指标项:

  • 响应时间
  • 服务器资源使用情况是否合理
  • 应用服务器和数据库资源使用是否合理
  • 系统最多支持多少用户访问、系统最大业务处理量是多少
  • 系统性能可能存在的瓶颈在哪里
  • 更换哪些设备可以提高性能
  • 系统能否支持7×24小时的业务访问


再者,站在开发(设计)人员角度去考虑,影响性能的因素,常见有如下一些。

  • 架构设计是否合理
  • 数据库设计是否合理
  • 代码是否存在性能方面的问题
  • 系统中是否有不合理的内存使用方式
  • 系统中是否存在不合理的线程同步方式
  • 系统中是否存在不合理的资源竞争

3. 衡量服务性能的关键指标及评估方法


在如此多的性能指标项中,最为重要的又有哪些?或者是说在衡量服务性能指标时,最常关注的几项性能指标有哪几个:QPS(TPS)、并发数、响应时间

  • QPS(TPS):每秒钟处理request/事务的数量。
  • 并发用户数: 系统同时处理的request/事务的用户数量。
  • 响应时间(Response Time,RT): 可以理解为服务器处理响应的耗时,一般取平均响应时间。


下面将对QPS(TPS)、并发数、响应时间几项最主要的指标评估方法进行介绍,别急,且往下看。

3.1 并发用户数

1. 提及并发用户数,如何理解什么才算是有效的并发用户?


并发用户:指的是现实系统中操作业务的用户,在性能测试工具中,一般称为虚拟用户数(Virutal User)。


需要注意的是,并发用户跟注册用户、在线用户有很大差别的,并发用户一定会对服务器产生压力的,而在线用户只是 ”挂” 在系统上,对服务器不产生压力,注册用户一般指的是数据库中存在的用户。


并发用户这些用户的最大特征是和服务器会产生交互,这种交互既可以是单向的传输数据,也可以是双向的传送数据。


2.并发用户数常见的评估方法

对于已有系统来说,评估并发用户数,可以从如下几个方面去做数据参考。

  • 1. 系统用户数
  • 2. 在线用户数
  • 3. 并发用户数


一般来说,可选取高峰时刻,在一定时间内使用系统的人数,这些人数可认为是在线用户数,而并发用户数可以取其中8%~15%的比例基数,例如在1个小时内,使用系统的在线用户数为10万,那么取8%~15%(即8000~1.5万)作为并发用户数就基本足够了。


当然,网上也流行另一种并发用户数评估计算方式(可供参考)


它是由几项因素来决定的:

  • 登录系统的用户数量(n),可以理解为平均每天访问用户数。
  • 用户从登录系统到退出系统的时间间隔(L),可以理解为一天内用户从登录到退出系统的时间间隔。
  • 被考察的时间长度(T),可以理解为一天内有多长时间有用户访问系统


利用经验公式估算系统的平均并发用户数和峰值数据,方法可供参考(并不一定准确):

  1. 平均并发用户数为: C = n*L/T
  2. 并发用户数峰值:  C‘ = C + 3*√C

 

> 其中√为根号


例如:某系统A,有3000个用户,平均每天大概有400个用户要访问该系统,对于一个典型用户来说,一天之内用户从登陆到退出的平均时间为4小时,而在一天之内,用户只有在8小时之内会使用该系统。那么,

  • 平均并发用户数为:C = 400*4/8 = 200
  • 并发用户数峰值为:C1 = 200 + 3*√200 = 243


对于新系统来说,如果没有历史数据作参考,建议通过业务部门进行评估。

3.2 响应时间

作为一个用户你可以对吞吐量(QPS、TPS)、并发用户数这些毫不关心,但响应时间却是用户感受系统性能的主要体现。从用户角度来说,软件性能就是软件对用户操作的响应时间。说得更明确一点,对用户来说,当用户单击一个按钮,发出一条指令或在web页面上单击一个链接,从用户单击开始到应用系统把本次操作的结果以用户能察觉的方式展示出来,这个过程所消耗的时间就是用户对软件性能的直观印象。


响应时间既然对用户体验如此重要,那这个时间又是如何评估计算出来的呢?

用一个公式来表示:


响应时间=网络传输时间(请求)+服务器处理时间(一层或是多层)+网络传输时间(响应)+页面前段解析时间

更具体来讲:


`响应时间=呈现时间+网络传输时间+系统处理时间


1. 呈现时间

呈现时间主要是指前端的响应时间,这部分时间主要取决于客户端而非服务端。当然,这个呈现时间也不能全怪罪客户端身上!它还和承载它的操作系统有关,以及电脑硬件比如cpu 、内存有关。


2. 网络传输时间

千万不要忽视数据传输时间。试想一下,如果你要寄信给你一个远方的朋友,你想是什么影响你将信息传递给远方的朋友?不是你写信的过程(如果你写的信不像书一样厚的话),也不是你朋友读信的过程,而是送信的过程。


你的带宽是多少?有没有考虑网络延迟? 互联网是个网,就是算是相同的起点与终点,它有可能走的不同的路线。


这也是为什么我们在一般做性能测试时,一般要强调要在局域网中进行


3. 系统处理时间

在进行性能测试时,呈现时间和数据传输时间通常都是我们很难控制的,用户使用的电脑千差万别,用户的网络状况也是千差万别。我们唯一能控制的就是将系统的处理请求的时间缩到最短。


如果我们对系统处理进行分解的话,它又是一个非常庞大与复杂的过程。包括了语言、语言框架、中间件,数据库、系统架构以及服务器系统等。


现在的测试工具一般都屏蔽呈现过程,只是模拟多用户并发请求,计算用户得到响应的时间,也不会将服务器的每个响应都向客户端呈现。

对于数据传输的问题,这也是我要强调的性能测试要在局域网中进行,在局域网中一般不会受到数据带宽的限制。所以,可以对数据的传输时间忽略不计。


关于响应时间,要特别说明的一点是,对客户来说,该值是否能够被接受是带有一定的用户主观色彩,也就是说,响应时间的“长”和“短”没有绝对的区别。


在互联网行业对于用户响应时间,有一个普遍的标准:2/5/10秒原则。也就是说,在2秒之内给客户响应被用户认为是“非常有吸引力”的用户体验。在5秒之内响应客户被认为“比较不错”的用户体验,在10秒内给用户响应被认为“糟糕”的用户体验。如果超过10秒还没有得到响应,那么大多用户会认为这次请求是失败的。这里我们还要考虑一个使用频率的因素。如果一个功能,一个月才用上一次,并且要求返回的结果也并非实时的,那么即便慢一些,对于用户来讲,也是可接受的。


3.3 系统吐吞量(QPS\TPS)

系统吞吐量指单位时间内系统处理用户的请求数。从业务角度看,吞吐量可以用:请求数/秒、页面数/秒、人数/天或处理业务数/小时等单位来衡量,从网络角度看,吞吐量可以用:字节/秒来衡量


对于交互式应用来说,吞吐量指标反映的是服务器承受的压力,他能够说明系统的负载能力。以不同方式表达的吞吐量可以说明不同层次的问题,例如,以字节数/秒方式可以表示主要受网络基础设施、服务器架构、应用服务器制约等方面的瓶颈;已请求数/秒的方式表示主要是受应用服务器和应用代码的制约体现出的瓶颈。


QPS:全名 Queries Per Second,意思是“每秒查询率”,是一台服务器每秒能够响应的查询次数,简单的说,QPS = req/sec = 请求数/秒。比如执行了select操作,相应的QPS就会增加,它代表的是服务器的机器的性能最大吞吐能力。


计算QPS的常用公式:


QPS(TPS)= 并发数/平均响应时间


另外,关于峰值QPS计算方式,一般也可参照2/8原则(供参考,并非一定):

  • 原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间
  • 公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS)
  • 问:每天300w PV 的在单台机器上,这台机器需要多少QPS?
  • 答:( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139 (QPS)



TPS即 Transactions Per Second 的缩写,指每秒处理的事务数量。一个事务是指一个客户机向服务器发送请求然后服务器做出回应的过程。


TPS 的过程包括:客户端请求服务端、服务端内部处理、服务端返回客户端。


关于TPS的获取评估方式,对于已有系统来说:可选取高峰时刻,在一定时间内(如3-10分钟),获取系统总业务量,计算单位时间(秒)内完成的笔数,乘以2-5倍作为峰值的TPS,例如峰值3分钟内处理订单18万笔,平均TPS是1000,峰值TPS可以是2000-5000。


对于新系统来说,因为没有历史数据作参考,一般建议通过业务部门进行评估。


QPS和TPS之间的区别,也是很多新手刚接触时容易搞混的,那他们之间到底有什么区别和联系。


一般来说,QPS基本类似于TPS,但不同的是,对于一个页面的一次访问,会形成一个TPS;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就会计入“QPS”之中。

如果是对一个接口(单场景)压测,且这个接口内部不会再去请求其它接口,那么TPS=QPS。


例如:访问一个 Index 页面会请求服务器 3 次,包括一次 html,一次 css,一次 js,那么访问这一个页面就会产生一个“TPS”,产生三个“QPS”。


对于衡量单个接口服务的处理能力,一般采用QPS比较多,一般如果衡量事务业务场景的处理能力一般则采用TPS。


注:Jmeter聚合报告中,Throughput是用来衡量吞吐量,通常是由TPS来表示。


4. 小结


一个系统处理性能能力通常由QPS(TPS)、并发数两个因素决定,每套系统这两个值都有一个相对极限值,在应用场景访问压力下,只要某一项达到系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而会下降,原因是系统超负荷工作,上下文切换、内存等其它消耗导致系统性能下降。


影响系统响应时间由CPU运算、IO、外部系统响应等因素组成。一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等紧密关联,单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。


最后,几点小结和建议:

  • 系统的性能一般由TPS决定,跟并发用户数没有太大直接关系。
  • 系统的最大TPS是一定的(在一个范围内),但并发用户数不一定,可以调整。
  • 建议性能测试的时候,不要设置过长的思考时间,以最坏的情况下对服务器施压。
  • 一般情况下,大型系统(业务量大、机器多)做压力测试,10000~50000个用户并发,中小型系统做压力测试,5000个用户并发比较常见。
  • 通过系统的监控工具,发现系统的性能瓶颈,通常会发生性能瓶颈的地方有CPU、内存、磁盘、网络、数据库等,而缓存系统容易发生瓶颈的地方是内存,储存型系统则是I/O。
相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
1天前
|
人工智能 测试技术 开发者
北大李戈团队提出大模型单测生成新方法,显著提升代码测试覆盖率
【9月更文挑战第27天】北京大学李戈团队在人工智能领域取得重要突破,提出HITS新方法,通过将待测方法分解为多个切片并利用大型语言模型逐个生成测试用例,显著提升代码测试覆盖率,尤其在处理复杂方法时效果显著,为软件开发和测试领域带来新希望。尽管存在一定局限性,HITS仍展示了巨大潜力,未来有望克服限制,推动软件测试领域的创新发展。论文详情见【https://www.arxiv.org/pdf/2408.11324】。
11 6
|
1天前
|
小程序 测试技术 程序员
『软件工程12』软件工程实践方法——软件测试
该文章详细阐述了软件测试的重要性和基本原则,并按测试阶段顺序介绍了单元测试、集成测试、确认测试以及系统测试的具体内容和实施步骤。
『软件工程12』软件工程实践方法——软件测试
|
1天前
|
测试技术 程序员 C语言
『软件测试4』耗子尾汁!2021年了,你还不知道这4种白盒测试方法吗?
该文章深入介绍了四种常用的白盒测试方法,包括语句覆盖、判定覆盖、条件覆盖以及路径覆盖,并探讨了这些方法在软件测试中的应用。
『软件测试4』耗子尾汁!2021年了,你还不知道这4种白盒测试方法吗?
|
3天前
|
敏捷开发 安全 测试技术
软件测试的艺术:确保质量与性能的平衡之道
【9月更文挑战第24天】在软件开发的海洋中,测试是导航灯塔,指引着项目安全抵达质量的彼岸。本文将深入探讨软件测试的核心原则、方法论以及如何通过精心设计的测试策略来保障产品的可靠性和性能。我们将从测试的基础知识出发,逐步深入到高级测试技巧,最终展示如何通过实际案例来应用这些知识以确保软件的成功交付。
|
6天前
|
测试技术 UED
软件测试中的探索性测试:一种有效的缺陷检测方法
探索性测试,作为一种灵活且强大的软件测试技术,越来越受到测试人员的青睐。它不仅依赖于预定义的测试用例,而是依靠测试人员的经验和直觉,动态地探索软件以发现缺陷。本文将深入探讨探索性测试的核心概念、优势以及如何在现代软件测试中有效应用这一方法。通过具体实例和实践技巧,我们将揭示如何利用探索性测试提高软件质量和测试效率。
16 4
|
8天前
|
测试技术 Python
软件测试的艺术:确保质量与性能
【9月更文挑战第19天】在数字化时代,软件已成为我们生活的一部分。然而,随着软件复杂性的增加,如何确保其质量和性能成为了一个挑战。本文将探讨软件测试的重要性,介绍常见的测试类型和策略,并提供实用的代码示例来帮助读者更好地理解和应用这些测试方法。无论你是开发人员、测试工程师还是项目管理者,这篇文章都将为你提供有价值的见解和技巧。
|
1天前
|
机器学习/深度学习 Web App开发 测试技术
『软件测试3』八大典型的黑盒测试方法已来袭,快快接住!
该文章介绍了八种常用的黑盒测试方法,包括等价类划分、边界值分析、错误推测法、因果图法、决策表测试、状态转换法、场景法以及随机测试,并提供了相应的案例说明。
|
11天前
|
敏捷开发 测试技术 UED
软件测试中的探索性测试方法
在软件开发过程中,测试是确保产品质量的重要环节。本文将探讨一种常被忽视但极其重要的测试方法——探索性测试。通过分析其定义、优势及实际应用案例,揭示如何更有效地发现软件缺陷,提升软件质量。
17 0
|
19天前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
46 2
|
14天前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存