二八定律在性能测试中的应用

在生活中,做任何事情之前,最好先确定一个目标。

同样的,在我们日常做性能测试之前,最好把本次预期性能指标确定下来,没有预期指标的衡量,将无法评估测试结果数据是否满足预期。

比如以下这样的指标:

在实际工作中呢,最理想的情况是,开发/产品/项目经理已经提前确定好了性能指标,然后把指标明确的告诉你。

但是理想很丰满,现实很骨感,根据我多年的性能测试经验来看,大多数提性能需求的人,大多是不太懂性能的,所以根本不会有指标的,或者虽然有指标,但是是拍脑袋决定的,没有任何依据。

所以作为一个测试人员,很有必要去通过一些数据分析,在测试之前就先明确一个相对科学的指标,这样测试才会更加有价值。

一般来讲,我们将压测的项目分为两类,一种是老项目,一种新项目。

先看看老项目,老项目是指项目已经上线了,并且已经运行了一段时间,这时候会产生一些历史数据,可以通过以下手段对历史数据进行分析

01

业务监控系统

在一些大厂,或者一些发展比较成熟的公司,大多都有各种各样的业务监控系统,定期监控各业务模块核心接口的调用量、平均耗时等等,一般是以分钟级别做监控,如下图

我们可以在系统里查看过去一周(或者一个月)内,接口调用量最高的那一天,然后再找到当天中接口调用量最高的时间点(分钟级别),比如说是在12:10调用量为10000,那么我们再换算为每秒调用量10000/60=166,因此可以确定这个接口tps只要达到166即可满足。

02

日志

有的公司(大多数都是创业型公司)根本没有上述的业务监控系统,那有没有办法去评估预期指标呢。

方法也是有的,那就是通过中间件的日志,每个中间件都有访问日志。比如Nginx的access.log,该日志中详细记录了每个HTTP请求的访问时间、url、响应状态码、响应时间等,如下图

有了这些数据就好说了,我们可以通过一些脚本(自己编写或者找运维帮忙),统计出每个接口在哪个时间段调用最高,调用量峰值是多少。根据峰值数据,最终可以计算出每秒的调用量,然后可以将这个指标定为接口的预期TPS。

接下来我们重点说一下新项目,也是在实际工作中遇到最多的情况。

新项目是还没有上线,在上线前希望先进行一轮压测,评估项目性能是否能支撑当前的用户,这个时候性能预期指标更为重要。但是由于是新项目,线上并没有任何的历史监控数据和日志数据,所以之前介绍的方法就不再适用,这个时候需要使用另外一种方法来评估性能指标,那就是“二八定律”。

03

二八定律

什么是二八定律?

先来看一下定义:

二八定律又名80/20定律、帕累托法则(Pareto‘s principle)也叫巴莱特定律、朱伦法则(Juran‘s Principle)、关键少数法则(Vital FeRule)、不重要多数法则(Trivial Many Rule)最省力的法则、不平衡原则等,被广泛应用于社会学及企业管理学等。

二八定律是19世纪末20世纪初意大利经济学家帕累托发现的。他认为,在任何一种事物中,最重要的只占其中一小部分,约20%,其余80%尽管是多数,却是次要的。

从经济学上看,世界上80%的财富,都集中的20%的人手里

从心理学来说,人类80%的智慧,都集中在20%人身上

二八定律是一种社会准则,符合大多数社会现象的规律。同样也适用于互联网领域。

一个网站有成千上万的用户,但是80%的用户请求是发生在20%的时间内,比如大家去网上购物,基本也都集中在中午休息或晚上下班后。二八定律的核心原则是关注重要部分,忽略次要部分。系统性能如果能支撑发生在20%时间内的高并发请求,必然也能支持非高峰期的访问。

具体来说下怎么通过二八定律来计算预期指标。

首先先预估系统的每日总请求数,这个没有固定的方法,如果没有任何历史数据参考,一般是通过用户量或者其他关联系统来评估。

比如某网站新增了一个每日签到送积分功能,由于还没有上线,所以没有签到的数据。网站的注册用户1000w,日活跃用户大概是100w左右,那么最极端情况下,这100w人都会来签到(实际肯定不会这么多人来签到,但是评估指标要尽量往高评,以免出现极端情况),那么每天大概有100w次签到请求,80%的请求数就是100w*0.8=80w。

其次确定系统的20%时间,大多数系统是24小时对外提供服务的(也有一些系统,比如政府类的项目,是在一天的某个时间段提供服务的)。但是大多数系统在0点-6点之间访问量很少,从一天的总访问量来看,可以忽略不计。所以统计时间的时候,可以把这段时间去掉,一天24小时去掉这6个小时,还剩下18个小时,那20%的时间=18小时*3600秒*0.2=12960秒。

最终计算出来的结果为80w请求/12960秒=61左右。也就是说接口TPS满足61即可。

但是也需要考虑一个问题,因为上面的用户请求是按照100w评估,也有可能推出这个活动后,每日会有超过100w的用户来签到。签到业务每个用户只能执行一次,如果是其他业务,可能会有多次操作。所以评估出来指标后,为了更加保险一些,最好再乘以一个冗余系数,提高预期指标,防止人为评估造成预期指标偏低的情况。

这个冗余系数一般定为2-5之间(个人经验),上面计算出来的tps指标为61,如果再乘以一个冗余系数3,那么最终tps指标就定为183。同时,将来项目上线后,可以通过对项目接口的峰值监控,来对比之前评估的算法结果,调整冗余系数,最终随着不断的数据积累,将会形成一套本项目的性能模型。

那么将来项目上线后,接口的访问量真的和计算的一模一样吗?这个肯定不会,大家一定得知道一个原则,性能测试从来都不是一门非常精确的技术。二八定律也并不是100%适用于所有业务场景。在没有任何历史数据参考的背景下,二八定律相对来说是一种相对来说靠谱的算法,最起码有一定的理论依据,比拍脑袋猜的值靠谱多了。

总结一下,二八定律的算法为 80%的请求 / 20%的时间 * 冗余系数

看了上面一大堆分析,有的朋友可能又说了,别整这些有的没的,我们公司的项目就是啥都没有,三无产品,没有业务监控、没有中间件日志,也没有日活数据,那怎么评估预期指标。

对于这样的系统和公司,我的建议是,可以不要管什么指标了,直接开始测试,测试完成后,把本次测试数据发送给相关人员,然后大家召开会议会结果进行讨论,最终由领导来拍板决定系统性能是否满足需求。

作  者:Testfan 北河

出  处:微信公众号:自动化软件测试平台

版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接

原文地址:https://www.cnblogs.com/testfan2019/p/12401317.html

时间: 2024-10-18 13:44:23

二八定律在性能测试中的应用的相关文章

管理学定律五:二八定律与木桶理论

1.二八定律 1.1 来源 1897年,意大利经济学者帕累托偶然注意到19世纪英国人的财富和收益模式.在调查取样中,发现大部份的财富流向了少数人手里.同时,他还从早期的资料中发现,在其他的国家,都发现有这种微妙关系一再出现,而且在数学上呈现出一种稳定的关系.于是,帕累托从大量具体的事实中发现:社会上20%的人占有80%的社会财富,即:财富在人口中的分配是不平衡的. 同时,人们还发现生活中存在许多不平衡的现象.因此,二八定律成了这种不平等关系的简称,不管结果是不是恰好为80%和20%(从统计学上来

Redis的二八定律

常用命令: 1.setex key 有效时间 value ----------意思就是添加并设置该键值对的存活时间 2.mset key1 value1 key2 value2 key3 value3 ....... -----------------意思就是一次性添加多个键值对 3.getset oldKey newValue -------------意思就是重新设置已存在的key的值,返回被覆盖的旧值 4.getrange key startIndex endIndex ---------

蜜汁二八定律,成为顶级程序员真的有那么难吗?

在软件开发领域,二八定律同样适用.头部 20%的研发人员或许就是许多人眼中的"alpha"程序员,甚至是领导者.开拓者.潮流引领者等,比如发明 B 语言的 Thompson.发明 C 语言的丹尼斯·里奇.以及发明万维网的伯纳斯李,这些是谷歌.阿里巴巴.腾讯.百度和华为更喜欢的求职者. 反之,80%的程序员构成了软件开发行业的大部分,这些程序员大多毕业于一所还可以的学校,专业是计算机相关方向,掌握了足够的 JavaScript.Java.C ++ 和 Python 等基础知识,然后去了银

数据建模在性能测试中的理解

百度搜索:小强测试品牌 如果觉得本文不错,请多多转发一下哈 引子 概念是一个让人又爱又恨的东西,有些东西需要概念来解释,但有些东西又被概念所迷惑.很多所谓高大上的概念其实你剥开来看并没有那么高级. 因为在小强测试品牌培训班中看到了有的学员聊了这个话题,所以今天就顺便写写关于数据建模这个概念在性能测试中到底是个啥? 我所理解的数据建模 按照我个人的理解在性能测试中的数据建模可以分成两个方面来理解,一个是基础数据有的人也叫铺底数据(概念也是越玩越花),另一个是业务场景(其实就是场景用例). 1 基础

性能测试中关键指标的监控与分析

一.软件性能测试需要监控哪些关键指标? 软件性能测试的目的主要有以下三点: Ø  评价系统当前性能,判断系统是否满足预期的性能需求. Ø  寻找软件系统可能存在的性能问题,定位性能瓶颈并解决问题. Ø  判定软件系统的性能表现,预见系统负载压力承受力,在应用部署之前,评估系统性能. 而对于用户来说,则最关注的是当前系统: Ø  是否满足上线性能要求? Ø  系统极限承载如何? Ø  系统稳定性如何? 因此,针对以上性能测试的目的以及用户的关注点,要达到以上目的并回答用户的关注点,就必须首先执行性

转:性能测试中的性能测试指标与用户体验分析

转自:http://www.ltesting.net/ceshi/ceshijishu/xncs/2012/0223/204182_2.html 性能测试中的性能测试指标与用户体验分析 网络应用性能分析的目的是准确展示网络带宽.延迟.负载和TCP端口的变化是如何影响用户的响应时间的.利用网络应用性能分析工具,例如 Application Expert,能够发现应用的瓶颈,我们可知应用在网络上运行时在每个阶 网络应用性能分析的目的是准确展示网络带宽.延迟.负载和TCP端口的变化是如何影响用户的响应

LoadRunner性能测试中Controller场景创建需注意的几点

在LR工具做性能测试中,最关键的一步是Controller场景的设计,因为场景的设计与测试用例的设计相关联,而测试用例的执行,直接影响最终的测试结果是怎么的,因此,我们每设计一种场景,就有可能是一个测试用例的执行(一个场景设计里面可以有多个脚本,场景计划方式可以按组方式,也可以按场景方式),如果场景的设计不正确或不合理,那也无谓在Analysis中结果分析了,对吧? 下面分享一下,在Controller设计场景时需要注意和理解的问题: 1.  在场景中持续时间设置将覆盖Vuser迭代设置.这意味

浅谈软件性能测试中关键指标的监控与分析

浅谈软件性能测试中关键指标的监控与分析 一.软件性能测试需要监控哪些关键指标? 软件性能测试的目的主要有以下三点: Ø  评价系统当前性能,判断系统是否满足预期的性能需求. Ø  寻找软件系统可能存在的性能问题,定位性能瓶颈并解决问题. Ø  判定软件系统的性能表现,预见系统负载压力承受力,在应用部署之前,评估系统性能. 而对于用户来说,则最关注的是当前系统: Ø  是否满足上线性能要求? Ø  系统极限承载如何? Ø  系统稳定性如何? 因此,针对以上性能测试的目的以及用户的关注点,要达到以上

性能测试中的TPS与HPS

性能测试中的TPS与HPS TPS(Transaction per second) 是估算应用系统性能的重要依据.其意义是应用系统每秒钟处理完成的交易数量.一般的,评价系统性能均以每秒钟完成的技术交易的数量来衡量. 系统整体处理能力取决于处理能力最低模块的TPS 值.依据经验,应用系统的处理能力一般要求在10-100左右.不同应用系统的TPS有着十分大的差别,一般需要通过性能测试进行准确估算.HPS:Hits per Second 每秒点击次数是指在一秒钟的时间内用户对Web页面的链接.提交按钮