性能测试基础
性能测试概述
典型的性能缺陷案例
2008年奥运会票务系统“瘫痪”
2012年11月11日,某企业双11活动正式启动,系统被“抢瘫”
2014年1月9日,12306火车票订票网站多次瘫痪
2014年11月6日亚马逊网站瘫痪
性能测试简介
性能测试:是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
性能测试与其他测试的区别
- 功能测试、自动化测试 关注的是系统“能不能用”,重点在于“找bug”,也就是预期结果和实际结果的区别,模拟一个用户的操作
- 性能测试关注的是系统是否“又好又快”,重点在于一系列的性能指标,模拟的是多个用户同时操作
- 安全测试关注的是系统是否安全可靠,尤其是数据的安全
性能测试的三个特点
- 通常,性能测试需要借助工具来实现;
- 性能测试除了关注普通的正常情况外,还重点关注空间和时间上的很多峰值或异常的系统运行情况;
- 性能测试借助所监控和收集的各项指标来分析系统的性能。
性能测试分类
一般性能测试:验证软件在正常情况和系统条件下是否满足性能指标
负载测试:逐步增加系统负载,测试系统性能变化,直到系统性能出现 拐点
,并最终确定系统所能承受的最大负载量区间( 拐点区间
)。 拐点区间
可根据以下场景判断:
- 接口或服务是否出现报错
- TPS是否出现明显下降
- 响应时间是否变长(1.5s)
压力测试:通过一定量(最大并发用户数的20%或80%)的用户数,使得系统在已经处于极限负载下,或者某指标已经处于饱和状态下运行一定的时间,查看系统服务及各资源利用情况的稳定性,验证系统性能的表现
大数据量测试:验证系统在使用大批量数据对系统产生压力或影响的情况下系统各种指标是否正常
配置测试:验证系统在不同的软件和硬件配置的情况下,找出系统各项资源的最优分配
稳定性测试:验证系统在连续运行的情况下,查看系统的各项性能指标。MTBF(错误发生的平均时间间隔)
容量测试:在进行性能测试时,如果数据库的数据量级是不一致的,性能指标值,也可能存在差异。
所以在做性能测试时,数据库的数据量级一定要保持一致。生产环境上的数据量级都是超过百万级的,所以性能测试不能用功能测试环境、自动化测试环境、验收环境、生产环境,需要独立搭建性能测试环境。
独立环境要求机器资源配置与生产完全一致:
- 硬件配置一致(服务器)
- 数量一致
- 网络一致(网络架构、网络基础),不能使用无线网络、VPN、桥连网络,尽可能使用局域网
- 架构参数一致(数据库、JDK)
其他专项性能测试
不同角色看性能
黑盒测试的角度
- 黑盒测试操作应用界面
- 数据请求经过网络发送
- 服务器前端接收处理
- 在数据库服务器获取相关数据
- 前端处理后返回数据
- 应用界面接收到数据响应
开发角度
- 结构合理性
- 数据库设计合理性
- 代码与算法
- 系统中内存的使用方式
- 系统中线程的使用方式
- 系统资源是否有恶性、不合理竞争
系统管理员角度
- 硬件资源利用率
- JVM
- DB(数据库)
- 换何种硬件可以提高系统性能
- 系统能否支持7*24的服务
- 扩展性、兼容性、最大容量、可能的瓶颈
性能测试角度
- 服务器硬件性能
- 根据需求和历史数据制定性能目标
- 建立性能通过模型
- 对开发代码框架和硬件框架进行性能分析
- 针对开发发布版本的基准测试
- 对软件进行性能验收和稳定性测试
- 生产环境的配置和优化
- 制定性能测试测试用例
- 制定性能测试场景设计
- 特定性能分析
性能测试职业技能
性能测试流程
性能测试流程
测试执行分为 性能测试脚本开发
和 性能测试脚本执行
,对测试结果进行分析,还需要进行调优处理,这一块是一个循环的过程,最后输出性能测试报告并进行结果跟踪
性能测试的难点
- 需求分析
- 场景设计
- 性能诊断调优
- 环境搭建和模拟
性能测试的重点
- 评估系统,需求分析。关注核心业务,用户量最大优先,可测性内容,需要反复沟通确认性能指标。
- 场景设计,用例设计
- 测试执行,是否通过
- 性能诊断优化
性能测试流程中要考虑的内容
- 系统硬件资源相互之间的关系及原理
- 选择可靠性能指标以及指标之间的关联和判定方法
- 永不宕机的实现原理和常见错误
- 排队系统与延迟级缓存的优化关系
- 优化的成本和性价比
- 业务优化的操作实施
- 多系统串联原理级测试隔离
性能测试中服务器指标的相关内容
性能测试工具选择
-
通过进程模拟多用户发起请求,获取性能指标值的工具,如 Loadrunner。
进程是系统进行资源分配和调度的基本单位,资源消耗比较大。
-
通过进程模拟多用户发起请求,获取性能指标值的工具,如 Jmeter、Loadrunner(默认是线程)。
线程是程序执行流的的最小单元,线程不独立拥有资源,他跟同一个进程下的其他线程共享资源
-
通过进程+线程模拟多用户发起请求,获取性能指标值的工具,如 ngrinder。
-
通过携程模拟多用户发起请求,获取性能指标值的工具,如 python+locust库。
协程是微线程,跟线程一样,相对独立,有自己的上下文
选择测试工具考虑的因素
- 专业、稳定、高效,如Loadrunner,工业级的性能负载工具;
- 简单且容易上手,在测试脚本上不用花太多时间;
- 有技术支持,文档完善,不用在软件使用的疑难问题上花费时间;
- 性价比与投入产出比
性能测试测试用例设计
用例模板
用例1:
用例2: