一、简介
简介部分就不用过多描述了,无非项目的背景,进行此次性能测试的原因,以及性能测试覆盖的范围等等,几乎所有项目文档都在开端对项目进行简单的阐述。
二、性能测试需求
寻找的被测试对象和压力点
要测试的对象不是凭空想象出来,而是经过分析与系统数据收集得到。下取几个典型的压力点
登录:对于一般的系统来说,登录是用户操作系统的前提,如果用户根本就登录不了,那么其它功能将毫无用处。例如网游戏,开新服的时候,玩家挤破了脑袋只为登录。
查询:查询一般比较消耗系统和数据库资源。搜索引擎的查询功能就是典型,如果你在输入框内输入内容,很久就得不到结果。我想被称为“互联网入口”的搜索引擎就不会存在。
交易:对于一些电子商务系统来说,交易过程的性能要求是很高的,如果交易过程消耗用户很长时间的话。我宁愿去超市买东西了。当然,除了交易速度外,对交易的成功率要求也是非常高的。不然,造成的损失也是不可估量的。
被测的系统应该是最重要的最基本的功能,也是用户使用最频繁的功能。
一般的性能要求包括:
系统容量:系统最大容纳多少个用户注册。
访问数:同时访问系统的用户数。
并发数:一个操作同时执行的并发数目,一个系统中应该有不同操作的并发数的组合(一般是有权限进行操作的用户)。
系统的最大用户数与最佳用户数:系统在承受的最大并发用户数量,系统在最佳状态下承受的并发用户数据。
响应时间:用户提交一个操作到得到响应的时间间隔。
吞吐率:系统每秒钟处理的TPS
性能测试关键的一个因素就是压力,性能是在系统设计满足的最大压力下的性能。并发数要不小于系统正常运行的峰值,数据总量不小于系统正常运行3个月的数据量。
在描述并发用户数目时,总是会带有相应的时间段限制。系统的性能指标实质上应当使用单位时间内系统处理请求的个数以及请求响应时间描述。单位时间内能处 理的请求个数就是系统的业务吞吐量。虚拟并发用户的数量可以使用如下的公式换算:(真实用户数×每个真实用户请求数)/(总请求响应时间+真实用户总思考 时间)=(虚拟用户数×每用户请求个数)/(总请求响应时间+虚拟用户总思考时间)=吞吐量。
三、测试环境
这里的测试环境主要指的软件硬件环境和网络环境。
笔者认为性能测试最好在一个独立的环境内进行,这样不会受到外界的干扰,能够保证测试的数据是独立有效的。如果现你对某个已经上线的网站进行压力测试,那么你得到的数据不是独立的,因为你在做压力测试的时候,其它散户也在访问系统。
软件环境:
这里的软件环境主要指项目运行的环境,比如采用什么样的操作系统、中间件、和数据库。
硬件环境:
这里的硬件环境除了主要包括主机内部部件,cpu、内存、磁盘以及主板、网卡等,传输介质和路由器也应该考虑在内,
网络环境:
网络环境除了考虑测试机与被系统服务器在一个局域网中进行,还应该保证这个网络的独立性。如果在在性能测试的过程中,其它机子也在消耗着路由器资源。那么路由器也会影响到数据库的传输速度。
在很多时候,我们是要准备测试数据的,例如系统不允许相同用户的重复登录,那么必须要生成合法的用户数据。有时要对系统进行查询测试,只有在系 统有一定数据量进才能验证出系统的真实性能。一个数据库中有两条数据和有两千万条数据,同相一条查询操作,对系统造成的压力是完全不一样的。
系统所需数据的分析可以参考以下方式:
历史数据分析有助于数据量级的确定。从历史数据入手,找出高峰期数据量。
从其他相似或者相同系统入手,进行数据分析,找出高峰期数据量。
无历史或者相关系统可以参考的时候,就要对系统的性能数据进行估算,包含系统容量,并发数等数据,估算以后给相关人员进行评审或者修订以后,按照大家同意的性能指标进行测试。
…………
测试数据最好和真实数据相同,如果能够获得真实系统运行3个月的数据,我们就可以在此基础上进行性能测试。
关于数据的生成,我们可以祝一个工具完成,如数据库数据生成工具,大小文件生成工具等。
五、测试工具
前面已经介绍如何分析需求,需求确定下来之后,我们可以考虑引入什么样的工具适合性能需求。
当然,在引入工具的时候除了考虑可以是否满足需求,还应该考虑工具的成本,这不单指工具的购买成本,还有测试人员对工具的学习成本。
关于测试工具的选择,后面会单独有一章节介绍,这里就不细说了。
如果你选择的性能测试工具不是足够的强大的话,你可能还需要其它的辅助的工具。如果jmeter利用badboy来录制脚本,更能提高脚本开发 效率。在压力测试的过程中也可能需要性能计数器来记录软硬件的性能。如监控服务器cpu、内存的计数器,记录中间件日志的监控中工具,监控数据库性能的监 控工具等。
六、测试策略
对于一个特定的业务系统,用户一般会分散在一天的各个时间段进行访问。在不同的时间段中,用户使用业务系统的频率不同,而系统的繁忙程度不同。 在一些特定的条件下,可能出现短时间内用户集中访问某个业务系统的情况。例如对于公文处理子系统而言,可能就存在短时间内大量用户查看并办理某条公文的情 况。 在进行性能测试时,应当使用“考虑最坏情况的原则”。也就是应当在用户使用业务系统最频繁、对系统造成最大压力的情况下对系统的功能进行测试,判断各功能 和页面是否能够满足性能的要求,系统的响应时间是否过长。
另一方面,系统性能的验证必须做到“覆盖全面”。虽然系统中各个功能的使用频率并不相同,一些功能的使用频率相对于其他功能来说比较低,但是在 进行性能测试和优化时,不能忽略这些功能,编制测试用例时也不能仅仅选择最常用功能。例如可能所有的用户都会访问我的通知列表,但是一般只有5%的用户会 使用通过系统设置模块查找某个用户的信息;但是在测试时,我们并不能因为查看用户信息功能的使用频率相对较少,而忽略掉这项功能的测试。所以,这里进行系 统性能测试时,对于不同业务,用户的访问比例应该做一个合理分配。
在测试策略上,我们还应该考虑,同一个系统在不同硬件环境下的性能表现。从而让系统满足需求的情况下,硬件配置也能达到一个最佳的状态。过份的增加硬件来满足需求也是一种浪费。再说增加硬件设备不是能解决所有性能问题的。
七、人力与时间安排
最后一条,就是要根据项目的进度要求以及规模,来进行人力与时间的安排。对于大型的性能测试,项目前期的需求调研,环境的部署,工具的选购或开 发,人员对测试工具的学习与使用,性能测试的后进行,后期数据的分析与调优。都需要人员安排的。有可以需要专业的,系统工程师、数据库工程师、软件开发工 程师、网络工程师以及性能测试工程师的共同参与配合完成。不是一个性能测试人员就可以全部搞定的。
笔者听说,最牛x的性能测试,需要几个国家的十几个城市的性能测试团队同步时行。前期的准备工作就需要几个月的时间。如何把控性能测试的同步进 行。后期测试数据的汇总与分析。是一个非常复杂的过程。这个例子有待考证,我想说明的是,对于大项目的性能测试,人员与时间安排也至关重要。
----------------------
根据项目的不同,我们在做性能测试计划椒考虑的问题不仅仅上面这些内容,这一节所罗列的内容是基本需要考虑的因素。
====================================分割线================================
最新内容请见作者的GitHub页:http://qaseven.github.io/