13丨性能测试场景:如何进行场景设计?
13丨性能测试场景:如何进行场景设计?
讲述:高楼
时长24:41大小22.61M
基准性能场景
业务 1
业务 2
业务 3
业务 4
业务 5
业务 6
容量性能场景
稳定性性能场景
异常性能场景
总结
思考题
赞 7
提建议
精选留言(98)
- 杜艳2020-02-07还是不会做这些结果图啊,能对应jmeter讲解具体点吗?知道怎么分析了,不知道这些数据图怎么来的。
作者回复: 这个专栏没有规划要讲jmeter的基本使用,所以不清楚你要讲的jmeter具体功能是什么,如果呼声高的话,后面,我可以加餐。
共 15 条评论63 - Coby2020-03-13高老师,您好。您的文章让我受益匪浅。这篇文章中有几个问题: 1.不同场景测试方法的问题。以前看到其他的性能书籍中介绍,基准性能场景是使用单线程做,目的是为了获取单线程时TPS值。容量性能场景是按照需测试的业务一个个做,找出最大TPS、线程数或瓶颈点;混合性能场景是按照业务比例(这个比例大多数是拍脑袋决定的)做;稳定性场景一般是按照时间长度,比如连续不断8小时、24小时、3x24小时等等。这样的做法不对吗? 2.针对一个新开发的系统,没有上线使用过,不管是客户方的业务部门或者我方的产品经理均无法给出业务比例,这时这么确定业务比例呢? 3.异常性能场景一般很少会被提及,渐渐大家都忘了这个场景。做这种场景的时候不用考虑单独一个区域中断的情况吗?比如您示意图中区域一、二、三、五都是应用服务器,只中断区域一中一半服务器后的TPS、响应时间情况。展开
作者回复: 1. 不知道你看的是什么书籍,从我的理念上来说,那是绝对错误的理念。像你说的: “基准性能场景是使用单线程做,目的是为了获取单线程时TPS值。” 这个都不用测试呀,脚本直接跑一遍,看一下响应时间,就知道TPS了。这还能叫场景这么复杂的词吗?这就是验证一下脚本而已。 ”容量性能场景是按照需测试的业务一个个做,找出最大TPS、线程数或瓶颈点;混合性能场景是按照业务比例(这个比例大多数是拍脑袋决定的)做;“ 这个听起来似乎没有什么不同的逻辑。但是你说的”容量性能场景“和”混合性能场景“,从词的本身含义上来说,你能区分谁做什么吗?我觉得容量性能测试这个词就可以是混合的,按你这样的说法,我只能理解为”容量性能场景“其实就是单业务的最大TPS场景。如果这样的话“容量”这个词就完全不是它本来该有的含义了。而“混合性能场景”是在表达生产场景的含义,要非这么说也没什么,只是字不同。 只是在我的理念中:基准就是测试单业务的最大TPS;容量就是测试生产场景的所有业务混合的场景。这样清晰又简单,字面意思就能理解。 “稳定性场景一般是按照时间长度,比如连续不断8小时、24小时、3x24小时等等。” 在我看来,这样设置时间长度,必然不对。最简单的来说,你测试了24小时的场景,如果让你回答“系统什么时候会死”或者“系统能不能运行一个月”,可以回答得了吗?在我的经历中,我没看到有人敢拍着胸脯保证的。 不是因为时间长度不够,而是因为没有逻辑推算判断就直接拍了一个时间,自己也拿不准。 所以这样配置时间的思路必然是不对的。 2. 这个问题,我觉得好奇怪,很多人问。做为一个性能团队,业务比例也不是自己定的,为什么要把这个责任揽到自己头上呢? 做为一个新开发的系统,如果连参照物都没有,那系统从哪来的呢?项目中没有一个人是有类似项目经验的吗?还是都不敢承担责任呢?就算是从线下搬到线上的系统也必然是有线下业务统计数据的呀。 在我的经验中,如果所有人都没有给的话。那我肯定会给出一个最傻瓜的比例,那就是所有业务都是1:1。这时你拿着1:1的业务比例跟别人讨论时,别人就会有意见了:“你这个1:1配置不合理呀?!” 好吧,那不合理的话,你为什么不给一个?这时肯定会有人说,这个业务应该是比一点,那个应该少一点。你看,这时候是不是业务比例就开始慢慢要形成了。 不过还是奉劝做性能的人,不要背这个锅。 3. 异常场景肯定是从小做到大的。每个区域中的每个组件,甚至到参数,我们都要做的。只是在一个文章中没法尽述,我只能举一个最复杂的最大的例子。如果全写出来,我估计还得来30多篇。
共 2 条评论31 - kubxy2020-03-14在容量场景中,您说要控制比例。这里控制的是什么的比例?线程数吗?您这里没有给出Jmeter的配置(具体环境的上下文缺失),很容易导致理解上的误区。
作者回复: 工具操作类的,觉得在度娘上能找到,所以没有写。不然有些有经验的就认为专栏过于基础了。 你的这个可以在jmeter中用throughput controller实现。直接输入比例值就可以。如果具体不会操作,可以在微信上找我。
共 7 条评论9 - Geek_f932342020-02-09老师,文中的这段话:在这个示例中,业务 + 运维部门联合给出了一个指标,那就是系统要稳定运行一周,支持 2000 万业务量。运维团队每周做全面系统的健康检查。当然谁没事也不用去重启系统,只要检查系统是否还在健康运行即可。大部分时候运维是等着系统警告的。那么针对前面给出的容量结果,容量 TPS 能达到 3800(业务 1 到业务 6 的容量测试结果 TPS 总和)。所以稳定性场景时间应该是:20000000/3800 = 1.46 小时。 不明白稳定性场景时间为什么要这么计算?能详细分析一下吗? 还有我之前看到的很多都是这么来确定稳定性场景的执行时间的:一般来说,对于正常工作日(8小时)运行的系统,至少应该能保证系统稳定运行8小时以上,对于7*24运行的系统,至少应该能够保证系统稳定运行24小时以上。展开
作者回复: 一个系统只有一种情况会需要像你这样来设计场景,就是系统的稳定性只和时间和关,和业务积累量无关。 我说的是用计算业务积累量的角度。
共 4 条评论8 - Geek_65c0a22020-01-13高老师,我有个小白问题哈。为什么容量测试的结果会比单业务测的结果高呢?😄
作者回复: 走的路径不一样。单业务涉及到的机器也没有容量场景涉及的机器多。
7 - 😂2021-03-26老师,您好,目前最大的疑问就是我应该设置多少个线程去压测,递增策略和递交策略,持续时间,这些该如何确定啊?
作者回复: 这个之所以没有固定的说法是因为它本身就没法固定。 要根据实际的业务场景去做相应的调整才可以。 通常我的做法就是: 1. 先确定单线程时响应时间是多少。假设响应时间在10毫秒以下,我会一个一个线程增加,因为tps在这时增加的很快。这就确定了梯度。 2. 我会用二分法确定系统的上限。比如说,我先加100个压力线程,看系统的tps是多少,如果这时tps没到上限,就用200个压力线程,以此类推。但如果在100个压力线程时就已经达到了tps上限,我会降到50压力线程再看,直到得到合适的压力线程为止。这就确定了压力工具中的线程数。 3. 持续时间在容量场景中,对我来说,我只要看到稳定运行一段时间即可,通常我会用一小时左右的持续时间。
共 3 条评论6 - kubxy2020-03-14老师,性能场景中,比例控制这一块您能否结合jmeter等性能工具的具体设置来讲解?这里直接上测报报告,让我们这些性能测试新手理解起来很困难。总有一种是懂非懂的感觉
作者回复: 另一评论中已回复。
5 - rainbowzhouj2020-01-14高老师,您好。以下是我对两个思考题的回答。 第一个问题: 性能场景设计前应了解实际场景中对应业务的目标值。然后查看对应业务的组成,采用先局部后整体的思想进行性能场景设计。具体而言,就如文章中所述先将单业务的基准性能测试结果得出,再进行混合业务的性能测试。值得一提的是通常情况下时间是稀缺资源,所以进行性能场景设计时,应时刻谨记以终为始的理念,得出结果后判断是否能满足业务目标。 第二个问题: 二八法则好比万金油,换句话说就是可有可无,进行稳定性场景的测试就是为了知道会不会由于长时间处理业务而引发潜在瓶颈。此时已经了解了对应业务的目标值,那么只要系统在正常处理,资源没有出现问题,也没有报错下,业务目标能满足,而且更确信,这样会更好。展开
作者回复: 理解的挺正确。
4 - 村夫2020-01-13老师,有几个问题和想法。首先场景不断这个应该怎么理解?其次是老师例子中的业务一到六是一个接口还是多个接口?再次是控制业务比例,如果可以拿jmeter举例子会好很多,让我们能把您的想法落地,前面那几篇工具篇能匀一篇说业务比例如何设计该多好。最后是容量场景下最大tps应该怎么看?我看您的图都是曲线图,难道是看曲线图约摸着得出一个结果?
作者回复: 场景不断,就是从低到高线程递增。 业务1到6,都是有业务含义的,后端会有很多个接口。 控制业务比例的过程通常是这样的:1. 先是拿线程数和TPS、响应时间来计算业务比例来做;2. 当运行过程中出来业务比例偏差时,就调整线程数;3. 在jmeter中可以有控制吞吐量的控制器。 业务比例设计的后面有一篇是专门描述这个的。 最大TPS,我是通过曲线图的一段来做计算的,你要是“约摸”这个词,也不是不可以。哈哈。
4 - 学员1412021-09-13老师,批处理、大数据这种业务是不是不用脚本,直接准备批量数据,实时调用分析?
作者回复: 对呀。
3 - 月亮和六便士2020-04-04高老师,请教一下,容量测试的时候 :假如有三个接口,没有顺序,但是有业务比例,是不是把三个接口放一个线程组里,每个接口添加事物,按照业务比例设置throughput controller控制就可以,如果有顺序,设置一个大事物就可以?
作者回复: 是的,我理解你说的这样设置没问题。
3 - Geek4%2020-02-27老师,需要怎么设置线程与时间关系才能出现阶梯的TPS图
作者回复: 设置ramp-up就可以了呀。
共 3 条评论3 - johnny2021-05-18老师,关于文中的混合业务线程数图。 我有两个问题,帮忙解答一下。 问题1:各业务的线程之间的比例和业务比例是不是比较接近? 问题2:各业务的线程递增策略是不是不一样(基准场景中响应时间快的业务会设置的线程递增较慢些,相应慢的业务会设置线程递增较快些)?
作者回复: 1. 根据响应时间计算出来看了才知道。 2. 搞不懂这个思路从哪来的。难道是要两个业务相互追平的意思吗?在我的逻辑中递增策略相同即可,关键是保持住业务比例。
2 - SeaYang2021-04-02高老师,之前面试时面试官问秒杀活动怎么设计压测场景,我说梯度加压得到最大稳定Tps,再结合限流策略保障稳定性。但面试官不认可,说秒杀是突增流量,不是梯度流量。我再说可以考虑集合点的方式模拟突增流量,面试官才说是他想要的点。。。可我还是觉得不管是不是秒杀活动,系统最大稳定tps都是会有一个确定的值,只是对于秒杀来说,需要采取限流、降级等策略来保障系统不挂。对此,老师您怎么看呢?
作者回复: 你可以做一个示例来看一下。 递增在秒杀场景中也是可以适用的,只是递增的速度很快。集合点其实只是压力工具中的集合,并不是服务器端的集合。 如果考虑服务端对同一请求的同时的处理,注意哦,那是在不同的线程里。
2 - jy2020-06-011、稳定性场景,是不是只要跑运维周期的业务量即可?而不是运维周期这个时间长度? 2、运维周期是个什么概念?我们没这个说法呢
作者回复: 1. 只要跑运维周期的业务量即可。 2. 就是多长时间做系统的清理、巡检等。
2 - jy2020-05-31我们平时在很多场合下所说的场景范围都有些狭隘,觉得场景就是业务比例,就是用多少数据。而实际做过多个性能项目之后,你就会发现,工具中的一个小小的配置,也会对结果产生巨大的影响。【------摘抄自第四课】 场景如何转换为压测脚本?文中只有非gui的html报告截图,完全看不到jmeter脚本一个大概的设计,比如,是单线程组还是多线程组?业务比例通过什么来控制?线程设置多少或者如何算? 我觉得这是关键的一环,但是缺失了。希望老师能补充展开
作者回复: 我在写的时候考虑到这个是工具的功能,所以没有写细。这个是单线程组、多线程组都不重要,业务比例控制方式也有好几种,所以没有一一列举。
共 2 条评论2 - 小呀么小二郎2020-03-24今日思考题: 性能场景应该按什么样的逻辑设计? 按照基准性能场景、容量性能场景、稳定性性能场景和异常性能场景来进行设计。 在做基准性能场景前,需要先列出自己要测试的业务比例、业务目标TPS和响应时间指标。业务比例通常是由生产环境统计的数据得出的。 基准性能场景的目的是为了测试出单业务的最大容量,以便在混合容量场景中判断哪个业务对整体容量最有影响。 容量性能场景的目的是为了模拟真实生产环境的业务进行测试,保证性能测试的有效性。测试重点是场景不断以及控制比例。容量性能场景不止一个。 稳定性性能场景的目的是为了知道系统是否会由于长时间处理业务而引发瓶颈。时间长度取决于系统上线后的运维周期。 异常性能场景的目的是为了判断所执行的操作(比如kill、断电、断网卡等)对系统产生的影响,测试过程中要保持TPS的稳定(通常用容量场景中最大TPS的50%来进行测试)。异常性能场景也不止一个。 性能场景应该按什么样的逻辑设计? 首先,稳定性性能场景的目的就是为了知道系统是否会由于长时间处理业务而引发潜在瓶颈,对于用多少TPS没有具体的要求。 其次,如果系统用最大TPS跑下来,业务一直正常,那就达到了稳定性性能目标,这个场景是有效的。既然有效,那么用最大TPS是没有问题的。 最后,理论要结合实际,我们在测试的时候也要结合场景目标以及系统真实情况来做,而不是道听途说的“原则”。 老师这节课的干货太多了。我需要找个实际项目练练手才能消化了。展开
作者回复: 很快就出师了!
2 - 顺利2020-01-17拿到基准测试的结果后,您是如何按照业务比例设计出容量性能场景的,这块弄不懂,文中也没有计算的过程,不知道基准测试结果起到说明作用,老师能否详细说明。
作者回复: 业务比例在容量场景中直接通过控制tps来体现就可以了。后面说了工具中各用什么功能来控制。不知道你的具体疑惑点是什么呢? 基准测试起到的作用就是先把最基本的瓶颈解决掉。我这里已经给出的是优化后的基准测试结果。其实这个过程中遇到的瓶颈很多。 只有先把这些问题解决,基准测试的响应时间和tps才能对容量测试有比对的作用。
2 - kubxy2020-01-13老师,我一直有一个疑问。在做业务的性能测试时,是只测实现这个业务逻辑的接口,还是要测完成这个业务时访问的所有接口?比如,登录业务。在接口文档里只是一个登录接口,但使用JMeter录制登录操作,还会请求其他接口。
作者回复: 你这个问题的前提是:你想做的是什么场景? 只有分析了你要做的场景,才能判断出应该如何访问接口。 比如说,你的目的是只测试登录,那就完全没必要请求后面的接口。即使是录制实现了登录,并且连带了后面的接口请求。也应该把后面的接口请求给删掉。
2 - 土耳其小土豆2020-01-13先占个坑2