性能测试概论
随着互联网技术的迅速发展、软件系统的日益复杂,性能已经成为软件质量重要的衡量标准之一。
中国银联业务也曾经因性能问题中断 6 小时,数百万笔跨行交易无法进行,损失超过 10 亿元。由性能所导致的问题影响越来越广泛,因此企业对于软件产品的性能要求越来越高,也越来越关注。
一个好的建筑师首先需要清楚了解各建筑材料的特性,同样,一个好的性能测试工程师也需要对性能的基础知识有全面的了解。下面就让我们一起来学习性能测试的基础知识。
1. 什么是性能测试
-
性能(Performance)
计算机系统或子系统实现其功能的能力。
对计算机系统或子系统执行其功能的能力的度量。
例如,响应时间、吞吐能力、事务处理数。
-
性能测试
性能测试是通过自动化的测试工具模拟多种正常、峰值及异常负载条件来对系统的
各项性能指标
进行测试。它的覆盖面非常广泛,对于一个软件系统而言包括了执行效率、资源占用、稳定性、安全性、兼容性、可扩展性、可靠性等。
性能测试用来保证产品发布后,系统的性能满足用户的需求。性能测试在软件质量保证过程中起到重要的作用。
通俗地讲,通过模拟
生产运行
的业务压力和使用场景组合,测试系统的性能是否满足生产性能要求。即在特定的运行条件下验证系统的能力状况。
图是当前典型的系统性能涉及的方面,需要多个工种(有架构师、开发、系统管理员、DBA 、测试等)一起协调才能完成工作,每个环节都可能是瓶颈,造成阻塞。
相对于目前国内的 IT 软件部门环境,因为需要协调多部门,所以性能测试工作人员必须是一个复合型人才,对于各工作的知识有所了解也要求有一定的项目协调能力,来引导大家同心协力地完成此项复合任务,靠单人是不太可能完成如此具有挑战的工作。
技术部门一般有以下几种常见的角色:开发、测试、架构师、运维人员(系统管理员、DBA) 等。下面我们看看不同角度对于系统的要求。
-
用户角度
用户关注的性能,主要为主观用户体验。
一方面是用户查询、提交等业务操作的响应速度,从用户发起请求到服务器返回结果的时间。
另一方面是页面展示、页面解析、渲染的速度,包含了用户计算机和网站服务器的通信时间、网站服务器的处理时间、用户计算机浏览器构造请求解析响应数据的时间。
-
黑盒测试的角度
黑盒测试操作应用界面 -> 数据请求经过网络发送 -> 服务器前端接收处理 -> 在 DB server 获取相关数据 -> 前端处理后返回数据 -> 应用界面收到数据响应。
黑盒测试只关心应用程序的单步响应时间,性能好坏就看应用时间多少,也就是数据流经过服务器 / 服务器集群经过网络传输后往返的时间总和。
-
开发人员角度
- 从架构层面看,关注应用层、服务层、数据层的性能。
- 从系统功能层面看,关注各个模块、模块之间、接口之间的性能。
- 在应用服务器端:服务器本地缓存、分布式缓存、异步消息队列、集群(应用服务器集群、缓存服务器集群、数据服务器缓存)。
- 在数据库服务器端:索引、缓存、SQL 优化、NoSQL。
- 在代码层面:多线程、改善内存管理。
具体体现:包括响应延迟、系统吞吐量、并发处理能力、资源消耗、系统稳定性。
作为一个开发人员,只关注功能的代码实现,很少有精力去关注数据库的设计,框架的设计是否合理,系统里内存的使用方式是否合理、系统里线程使用方式是否合理、系统资源会不会有可能存在不合理竞争。他们通常认为这些是架构师去考虑的问题,但是在我国普遍的中小软件公司,很少有去考虑这些事情。
-
系统管理员角度
- 硬件资源利用
- JVM
- DB
- 换哪些硬件能提高系统性能
- 系统能否支持 7*24 的服务
- 扩展性,兼容性,最大容量,可能的瓶颈
作为运维人员通常关注这套系统所有服务器是否正常运行,一般关注这些服务器(数据库、中间件等服务器)的硬件资源利用率情况,如内存是否有可用空间, CPU 是否超过 70%, 网络是否通畅、I/0 是否存在瓶颈。这些服务器和配置是否能支撑几个月甚至几年稳定无问题地运行这套系统。除此之外还考虑,随着公司业务的增大,吞吐量需求加大,是否增加服务器就可以等比例地提高系统的综合吞吐量。
-
性能测试的角度
- 服务器硬件性能
- 根据需求和历史数据制定性能目标
- 建立性能通过模型
- 对开发代码框架和硬件框架进行性能分析
- 针对开发发布版本的基准测试
- 执行软件性能验收及稳定性测试
- 生产环境的配置和优化
- 制定性能测试的测试用例
- 制定性能测试的场景设计
- 协调各部门配合
- 特定的性能分析
性能测试是一项综合性的工作,致力于暴露性能问题,评估性能趋势。性能测试工作实质是利用工具去模拟大量用户来验证系统能够承受的负载情况,找出潜在的性能问题,分析并解决;找出系统性能变化趋势,为后续的扩展提供参考。
2. 性能测试的必要性
随着互联网的发展,单机软件的逐渐减少,系统从单机步入“云”时代,软件系统功能和规模也越来越庞大,用户规模也越来越大,用户对产品的要求也越来越高,以前可能看重功能方面,现在正在逐步转变为性能方面。随着用户数量的增多,系统稳定性就成为企业的首要技术保障,稳定才能带来流量,才能赚钱。
因为从这几年发生的事件来看,性能带来的严重问题以及损失不容忽视,而性能测试的重要性也不言而喻。
-
案例 1
2008 年的奥运会票务系统,由于庞大的订票人数超出预期,奥运票务系统
开工
后不久便陷入瘫痪
状态,当时对外公布的是奥运票务系统每小时能处理 15 万张门票的销售,以及承担每小时 100 万次以上的网上浏览量,但 10 月 30 日系统死机前每小时的网上浏览量达到 800 万,1 小时售出的票也达到了 20 万张。由于预估工作的缺陷,导致很多人无法通过网络订到自己想要的票。 -
案例 2
魔兽世界在中国的代理商由九城变更为网易,与九城服务器经常死机不无关系,但是换作网易后,服务器也经常死机。2010 年 10 月 11 日,魔兽世界服务器故障时,官网论坛上的游戏玩家纷纷发
贺词
表示不满,从这可以看出公司对魔兽世界的性能预估存在不足。也正是因为对性能严重忽视间接导致了九城在失去魔兽世界之后,从一家土豪公司成了一家几乎被人遗忘的公司。 -
案例 4
2010 年,中国最大的微博平台新浪微博死机 4 小时,新浪官方解释说:之所以掉线几小时,是因为用户增长超出预期,服务器备感压力。自上午 10 点起,用户无法登录,新浪的报错页面几次更改,最初的
微博正在升级,将于 11:30 恢复
,然后改为12:00 恢复
,过了一段时间,干脆改为稍后恢复
,然而,估计是看不到恢复希望,提示信息又改为微博系统压力过大正在抢修,我们深表歉意
。悲剧的是歉意
竟然写成了谦意
。 -
12306 订票