性能测试概念

性能测试的意义

现状

互联网行业发展快,用户量大大增加;

业务和系统架构越来越复杂,数据越来越多,用户不仅仅满足于功能的实现,在某些场景下,更在意系统性能。

什么是性能测试

通过一定的手段,在多并发情况下,获取被测系统的各项性能指标,验证被测系统在高并发下的处理能力、响应能力,稳定性等,能否满足预期。定位性能瓶颈,排查性能隐患,保障系统的质量,提升用户体验。

什么样的系统需要做性能测试

1. 用户量大,PV比较高的系统(PV代表浏览量)

2. 系统核心模块/接口(非常重要,不容有失的接口,核心)

3. 业务逻辑/算法比较复杂(例如一些加密解密运算比较高,CPU占用较高)

4. 促销/活动推广计划(电商,人数较多)

5. 新系统,新项目

6. 线上性能问题验证和调优(比如线上经常挂,问题复现)

7. 新技术选型(采用新框架或新组件,想要保证技术不能更差,新的框架和旧的框架都测一下,以便来决定是否采用新的框架)

8. 性能容量评估和规划(在现有的基础上,线上测试来决定需要增加多少容量)

9. 日常系统性能回归(例如:每过一个月,测下性能【线下测试】)

性能测试指标—TPS

事务

在性能测试领域里,衡量一个系统性能的好坏,主要看的是单位时间内,系统可以处理多少业务量。各个系统的业务各不相同,为了方便使用统一指标来衡量业务的性能。用事务来代表业务操作,一个事务可以代表一个业务,也可以代表多个业务操作。事务是用户定义的,想测试什么业务的性能,就把该业务加到事务中。

TPS/QPS

Transaction Per Second 每秒处理的事务数。

QPS 每秒钟的查询量【每秒钟发了多少个请求】

性能测试指标—平均响应时间

一个请求的响应时间都包含哪些时间?

响应时间=网络传输的总时间+各组件业务处理时间

平均响应时间:在测试过程中,所有请求的平均耗时

性能测试指标 —TOP响应时间

TOP响应时间

将所有请求的响应时间先从大到小进行排序,计算指定比例的请求都是小于某个时间。该指标统计的是大多数请求的耗时。

Tp90(90%响应时间):90%的请求耗时都低于某个时间

Tp95(95%响应时间):95%的请求耗时都低于某个时间

Tp99(99%响应时间):99%的请求耗时都低于某个时间

TOP响应时间算法:响应时间按降序排序,找到90%的位置(大多数请求的范围值)

备注:接口响应时间超过s,性能响应极差,需要优化。一线公司要求:接口响应时间如果是高频接口响应时间一般低于100ms,如果是低频接口响应时间一般低于200ms【参考公司内部规范】,超过200ms,性能比较差;超过500ms性能很差

静态页面一般存放于CDN里边。

性能测试指标

并发数/虚拟用户(Vuser)

压测工具中设置的并发线程/进程数量

成功率

请示的成功率

PV(Page View)

页面/接口的访问量

UV(Unique Visitor)

页面/接口的每日唯一访客【一般通过IP进行过滤,代表有多少人访客网站,日活跃用户】

吞吐量

网络中上行和下行的流量总和,吞吐量代表网络的流量,TPS越高,吞吐量越大

TPS、响应时间和并发数的关系

在系统达到性能瓶颈之前,TPS和并发数成正比关系

响应时间单位为秒的情况下:

TPS = 1/响应时间*并发数

TPS = 并发数/响应时间

性能测试流程

1. 需求调研

2. 测试计划

3. 环境搭建

4. 数据准备

5. 脚本编写

6. 压测执行

7. 调优回归

8. 测试报告

性能测试流程—需求调研

1. 项目背景

2. 测试范围【一般只测主要接口】

3. 业务逻辑&数据流向

4. 系统架构【布置架构、组件、数据库、缓存、中间件】

5. 配置信息【硬件配置,CPU几核,内存是几G的,这两比较重要,尽量与线上保存一致】

6. 测试数据量(量级要一致)【基于多少数据测,如果线上有100万数据,测试也要有100万数据】

7. 外部依赖【mock】

8. 系统使用场景,业务比例【比如一个系统同一时间,有人在登录,有人在注册,所以业务比例要确定】

9. 日常业务量

10. 预期指标

11. 上线时间

性能监控指标

操作系统级别监控

CPU使用率、内存使用率、网络IO(input/output)、磁盘(read/write/util)

中间件监控

连接数、长短连接、使用内存

应用层监控

线程状态、JVM参数、GC频率、锁

DB层监控

连接数、锁、缓存、内存、SQL效率

性能测试流程—测试计划

1. 项目描述

2. 业务模型及性能指标

3. 测试环境说明

4. 测试资源

5. 测试方法以及场景设计原则

  - 基准测试【单个用户来跑,添加新功能对比一下,性能是否下降。一般是跑3分钟或者5分钟】

  - 单交易负载测试【较重要】

  - 混合场景测试【较重要】

  - 高可用性测试

  - 异常场景测试

  - 稳定性测试【短时间内测不出来,一般要跑12个小时或24个小时】【较重要】

  - 其他特殊场景

6. 测试进度安排及测试准则

性能测试流程—环境搭建

注意要点

1. 测试机器硬件配置尽量和线上一致

2. 系统版本与线上一致

3. 测试环境部署线上最小单元模块

4. 应用、中间件、数据库配置要与线上一致

5. 其他特殊配置

性能测试流程—数据构造

测试数据分为两部分:基础数据和参数化数据

通常采用以下三种方法进行构造

业务接口

  - 适合数据表关系复杂

  - 优点:数据完整性比较好

存储过程

  - 适合表数量少,简单

  - 优点:速度最快

脚本导入

  - 适合数据逻辑复杂

  - 自由度比较高

性能测试流程 — 脚本编写

1. 选择工具(Loadrunner、Jmeter、Locust等)

2. 选择协议(Http、TCP、RPC)

3. 参数化

4. 关联

5. 检查点

6. 事务判断

性能测试流程 — 压测执行

1. 分布式执行

2. 监控

  - Linux

  - Jvm

  - 数据库

3. 收集测试结果

4. 数据分析

5. 瓶颈定位

注意:CPU占用率超过80%,添加机器

性能测试流程 — 调优回归

1. 性能调优需要整个团队完成

2. 反复尝试

3. 回归验证

4. 监控工具

5. 全链路排查

6. 日志分析

7. 模块隔离

性能测试流程 — 测试报告

1. 概述

2. 测试环境

3. 结果与分析

4. 调优说明

5. 项目时间表

6. 结论

7. 建议