性能测试
- 例子:北京奥运会的售票宕机
1. 什么是性能测试
- 验证产品的性能在特定负载和环境条件下使用是否满足性能指标
- 进一步发现系统中存在的性能瓶颈,优化系统
1.1. 性能测试的度量方法
- 不同的关注对象采用不同的性能的度量方法
- 服务端性能采用CPU、内存等使用率来度量
- 客户端性能通常根据系统处理特定用户请求的响应时间来度量
1.2. 响应时间
- 系统对请求作出响应所需要的时间
- 响应时间的细划分
- 服务端响应时间:请求发出开始到客户端接收到最后一个字节数据所消耗的时间
- 客户端响应时间:客户端收到响应数据后呈现/响应用户所需的时间。
1.3. 并发用户数
- 并发用户数取决于测试对象的目标业务场景
- 先确定业务场景,然后基于场景采用某些对应方法计算并发用户数。
- 并发用户数与同时在线数是有区别的
1.4. 吞吐量
- 单位时间内处理的用户请求数量
- 访问人数/天,页面数/秒,请求数/秒,处理业务数/小时等等
1.5. 性能计数器
- 性能计数器是描述系统性能的一些数据指标
- Eg.内存使用率、CPU使用率、进程时间等都是常见服务器性能计数器
- 性能计数器与系统配置情况、系统架构、开发方式都有密切联系。
1.6. 负载测试
- 负载测试用于验证系统在正常负载条件下的行为
- 两种方式:负载数:并发用户数,事务数
- 直接到达负载数
- 逐步增加负载数
1.7. 压力测试
- 压力测试是评估应用系统处于或者超过预期负载时的行为。
- 压力测试关注的行为不一定是性能行为,可能是某种Bug,比如同步问题,性能泄露
- 压力级别逐渐增加的时候,系统性能应该按照预期缓慢下降,但是不应该崩溃。(系统性能能不能回来)
- 压力测试还可以发现系统崩溃的临界点,从而发现系统的薄弱点。
2. 具体实践
- 测试后期管理和测试。
2.1. 趋势IWSaaS+AWS性能测试
- IWSaaS:部署在云上的安全网关,部署在Amazon云平台,为全球提供服务(发布周期是1-2星期)
- Auto Scaling:动态调整实例
- 使用了一个监控服务器和性能测试控制服务器
2.1.1. 测试难点
- 十万级用户支持
- 20 + 安全网关实例
- 20 + Jmeter实例
- 动态实例:安全网关的数量是动态的,IP地址是动态的
- Jmeter多机联合不适合:负载会比较重
- 动态网关策略:
- CPU负载>70%,多开
- CPU负载<40%,少开
2.1.2. 测试要求和方案
- 基本测试要求:平均页面响应时间<2s
- 测试方案:
- Jmeter模拟用户产生HTTP流量来通过安全网关
- 初识用户数,逐渐增加用户数,直到找到符合条件的最大用户量和吞吐量
- 不断测试到大于2s为止
2.1.3. 无人值守性能测试
- 部署自动化
- 性能测试自动化
- 控制服务器
- 自动上传测试脚本
- 自动上传测试报告
- 持续集成
- Jenkins集成,自动触发
- 及早发现和快速定位问题
2.1.4. 测试环境
- 公网测试和本地测试
- splunk:管理系统
- 对于大量的服务器的log汇总到一起来查看
- Zenoss:自动组机测试
2.2. 淘宝Web性能测试
2.2.1. 页面加载事件的重要性
- 大多数用户期望的网站加载时间是3s,如果时间长于3s,网站就开始流失用户
- Amazon加载事件每多1s,收入少16亿收入
- 关注浏览器
2.2.2. 页面访问瀑布图
- 大量的时间浪费在了前端绘制上
2.2.3. 前端优化
- 前端的优化是性价比很高的工具
2.2.4. 服务器端性能测试流程
- 性能测试需求采集
- 性能方案评估
- 性能测试计划制定
- 性能测试方案的编写
- 性能测试方案的评审
- 开发脚本
- 数据准备
- 环境准备
- 执行性能测试
- 性能调优
- 编写性能报告
- 录入界限库
- 知识沉淀
2.2.5. 性能测试指标
- PV:压测方法和重要决策依据
- 前3个是重要的性能指标
- CPU消耗一定要注意不同核之间的负载均衡
- 保证CPU的满负荷运行
- 我们关心Java虚拟机中老生带(Old Generation)和内存变化情况
- 老生代GC在一小时以上
- 考虑网卡的瓶颈:
- 减少请求返回数量
- 缓存数据在本地
- 增大网卡带宽
2.2.6. 性能测试压力变化模型以及测试类型
2.2.7. 通过标准
- 决定是否能发布
2.2.8. PTS介绍和架构
- PTS 对于阿里云用户免费,第一次会有引导。
- 测试脚本
- 域名绑定:绑定好域名
- 登录模块:保证只需要登录一次。
- 支持上传参数(在请求连接里面选择右键从文件中进行选择变量)首先上传本地CSV,之后快速启动即可以完成测试
- 场景:
- 三种不同测试
- 施压器:乘以并发数得到最后的总数
- 任务:
- 持续时间
- 开始时候晚于当前则会排机测试,不然则需要手动触发
- 计费以实际为准
- 实时监控:查看更多的信息
- 可以查看服务器的日志情况
2.3. JMeter 使用