跟着芒果一起,好好学习,天天向上。上周六是我们TestOps性能课程的第五天,我们来为这一天的课程做个小总结~(关于第四天的课程总结,芒果之后再为大家推出)
从大的角度来说性能测试有三大步骤:负载、监控以及调优。而我们要完成这三大步的前提就是需求,必须分析清楚需求,才能做好性能测试,但是很多时候的真实情况是很难有人去想明白需求,尤其是性能需求。所以周六的性能课云层老师专门花了一天的时间带大家理解和分析性能测试需求。
因为这一天的课程内容实在是太过丰富(芒果太懒),所以选取其中的一部分进行总结。
性能需求开发
云层老师在谈到性能需求开发的时候提到以下四点可以帮助到我们:
与用户沟通
需求来源于客户,如果我们的客户懂需求,我们可以从客户那里得到数据:我们需要多少用户去负载什么样的业务(负载量),达到什么样的性能指标(响应时间、处理能力等),会消耗多少资源(资源占用)。按照这个需求我们去执行性能测试,然后验证结果即可。但是很多时候问题在于,无论是客户还是执行性能测试的我们都很难把需求说清楚,也很难把需求很好的拆分,所以这时候我们就需要其他的一些方法帮我们做性能需求开发了。
历史日志
我们可以通过历史最大峰值访问量、负载特性、行业规则来帮助我们确定性能需求。日志分析是个非常靠谱的需求分析方法,现在有非常多的在线(比如51LA)或者非在线(比如将日志导入InfluxDB,做groupby操作后按照时间段查看)日志分析工具帮我们做日志分析。很多时候我们用历史最高的访问量进行性能测试系统满足需求,是可以说明系统的性能测试是通过的。我们通过历史日志也可以清楚用户的操作习惯流程是什么,是哪一个页面到哪一个页面,我们也可以按照这个方式来执行我们的性能测试。
同类产品
我们可以通过同类型产品的物理特性、最大负载量和系统性能状态来推断我们自己系统的情况。但是有几个方面我们需要注意的是,同类型产品的数据不一定是真实的(城里套路深,本宝宝想回农村);当我们需要显现出比同类型产品的优势时,仅仅参考同类型产品的数据肯定是不够的;还有一个就是同类型产品的公司能承受的,自己的公司不一定能承受(大家还记得那个有名的领导说让我做一个跟淘宝差不多的购物网站的段子么)。
80/20原则
软件测试界也有所谓的80/20原则,比如20%的bug隐藏在80%的代码中,80%的bug是由20%的测试人员发现的,80%的bug属于20%的错误类型等等;在性能测试中,也会使用泊松分布理论来计算并发用户峰值。其实这都是核心业务、核心负载时间等方面基于经验的做法,大多时候真实情况并不是这样的,所以我们仅仅只能它拿来作为参考;当然80/20原则作为一大杀器,我们也可以用来说服外行人士(这里必须配上手打表情[奸笑][奸笑][奸笑])。
性能需求分析
对于性能需求的分析,通常有这样的一个过程:知道测什么 -> 知道被测对象是什么 -> 知道被测对象以后会被怎么使用 -> 知道我应该怎么测 -> 知道我测出来的结果怎么才算通过。
要知道测什么、被测对象是什么,我们必须熟悉系统的架构,也就是俗称的要懂业务,我们要清楚详细的需求说明,知道我们的数据从输入到输出中间发生了什么样的变化,知道最后的输出结果。我们还应该知道我们的系统是如何实现的,这个不一定需要自己能写一套这个系统,但是我们一定要知道这个系统是如何工作的。
对于被测对象以后怎么用,我们主要是看负载量等信息。比如某某接口跑多少负载时能够获得什么样的响应时间和吞吐量,在什么配置下,资源占用路不超过80%等。
对于怎么测这个问题主要是关系到用何种协议、实现架构、使用的工具以及性能测试脚本的开发了。当然也要考虑能不能测试的情况,比如对于客户端的测试,当客户端的业务没办法实现时,我们就无法进行测试。
性能需求分析举例
在课堂上云层老师对于性能需求分析做了个小总结之后,举了几个例子带大家充分熟悉和掌握性能需求分析。我这里拿西门子某PLC进行机械状态采集,采集点众多导致的性能问题跟大家分享一下:
总的来说,这个系统的原理很简单,就是利用采集器采集数据,采集器上发数据,确认上发成功就行了。PLC的工作原理我们可能不太好理解,可以把它看成我们熟悉的浏览器,它具有定时刷新功能,刷新的内容是一个表单,表单里会包含当前系统时间和一个采集到的数字。我们只需要做到模拟PLC服务器上发数据的过程,形成多用户并发,然后测试服务器对于多节点的处理能力就可以了。至于怎么模拟:PLC既然能够上报到服务器,一定会有两个过程:一定会有SDK这样的东西,我们可以调用SDK来实现模拟物理信号的问题;一个是把物理信号转化为数字信号提交给某个模块,该模块再和服务器产生网络请求。
这样一分析我们的性能测试是不是简单了很多?
其他问题
性能测试还应该考虑:
被测系统到底是一个c/s、或者是一个b/s,还是一个单机的;要解决负载源的问题,当然解决负载源的关键是如何重写个客户端;跟踪记录客户端所产生负载的对应指标。
到底是使用何种工具来进行测试?是使用Loadrunner、Jmeter,还是自己写个代码以jar或者dll的负载模式。
当然这一天的课程内容还有性能测试的请求模拟工具、负载工具、监控工具及其他辅助工具的介绍;测试计划的介绍;测试方案的介绍;测试策略的介绍;测试环境对真实生产环境模拟的介绍;场景设计等等内容。因为篇幅原因介绍不过来,所以大家还是跟着云层老师在课堂上好好学习吧~