性能测试
性能测试的关注点
web类应用和手机端应用,一般以终端用户感受到的端到端响应时间来描述系统的性能
非交互式应用,如银行后台处理系统,响应时间关注的更多的是事件处理的速度,以及单位时间的事件吞吐量
衡量软件性能的四个维度
终端用户
软件设计开发人员
系统运维人员
性能测试人员
终端用户眼中的软件性能
表现为用户进行业务操作时的主观响应时间,时间越短体验越好
这个响应时间是终端用户对系统性能最直观印象,包括了系统响应时间和前端展现时间
系统响应时间:反应的是系统能力,可以细分为应用系统处理时间、数据库处理时间和网络传输时间
前端展现时间:取决于用户端的处理能力
从这个角度看,可以非常容易理解性能测试分为后端(服务器端)和前端(浏览器端)性能测试
系统运维人员眼中的软件性能
软件性能除了包括单个用户响应时间外,更要关注大量用户并发访问时的负载,以及可能的更大负载情况下系统健康状态、并发处理能力、当前部署地系统容量、可能地系统瓶颈、系统配置层面地调优、数据库调优以及长时间运行稳定性和可扩展性
目前,有些系统为了能够承载更多地并发用汉语,往往会牺牲等待时间而引入预期地等待机制(如火车票排队)
软件设计开发人员眼中的软件性能
软件性能关注的是性能相关的设计和实现细节,几乎涵盖了软件设计和开发的全过程,不仅仅是性能测试阶段要考虑地问题,而是整个软件研发生命周期都要考虑地内容,把围绕性能相关地活动称为性能工程
通常包括算法设计、架构设计、性能最佳实践、数据库相关、软件性能可测试性五大方面
1,算法设计包含的点
核心算法设计与实现是否高效
必要时,设计上是否采用buffer机制以提高性能,降低I/O
是否存在潜在的内存泄露
是否存在并发环境下的线程安全问题
是否存在不合理的线程同步方式
是否存在不合理的资源竞争
2,架构设计包含内容
站在整体系统角度,是否可以方便进行系统容量和性能扩展
应用集群的可扩展性是否经过测试和验证
缓存集群的可扩展性是否经过测试和验证
数据库的可扩展性是否经过测试和验证
3,性能最佳实践包含内容
代码实现是否遵守开发语言的性能最佳实践
关键代码是否在白盒级别进行性能测试
是否考虑前端性能优化
必要时是否采用数据压缩传输
对于既要压缩又要加密的场景,是否采用先压缩后加密的顺序
4,数据库相关的点
数据库表设计是否高效
是否引入必要的索引
SQL语句的执行计划是否合理
SQL语句除了功能是否要考虑性能要求
数据库是否需要引入读写分离机制
系统冷启动后,缓存大量不命中时,数据库承载的压力是否超负荷
5,软件性能可测试性包含的点
是否为性能分析提供必要的接口支持
是否支持高并发场景下的性能打点
是否支持全链路的性能分析
需要注意的是,开发人员一般不需要关注系统部署级别的性能,如软件运行目标操作系统的调优、应用服务器的参数调优、数据库的参数调优、网络环境的调优
系统部署级别的性能测试,目前一般在系统性能测试阶段或者系统容量规划阶段,由性能测试人员、系统架构师、数据库管理员DBA协作完成
性能测试人员眼中的软件性能
性能测试工程师关注的是算法设计、架构设计、性能最佳实践、数据库相关、软件性能的可测试性五大方面
性能测试人员既能准确把握软件的性能需求,又要能够准确定位引起'不好'