即时通讯 APP 后端性能测试思路
原创发布:https://www.cnblogs.com/huanghaopeng/
作者信息:HHP
一、概述
常见的即时聊天APP通常包含 即时通讯(IM) 和 实时通讯(RTC) 两种场景的功能实现
- 即时通讯 指文字聊天、语音消息发送、文件传输、附件发送,数据路径:C->S->C 或 S->C 或 C->S
- 实时通讯 指语音、视频电话会议
- 即时通讯 对消息送达率相对更敏感,宁可延迟,不可丢包(文本消息是可以稍微延迟送达的,但是不能丢失)
- 实时通讯 则对消息延迟相对更敏感,宁可丢包,不可延迟(语音画面是允许掉帧的,但是画面和语音总是延迟就没法正常对话了)
二、性能需求
关键角色 | 性能体验 |
---|---|
用户视角1(即时通讯) | 连接延迟和稳定性、消息送达率、消息发送延迟 |
用户视角2(实时通讯) | 会话连接的延迟、会话建立的延迟、语音画面的延迟、语音画面丢帧 |
用户视角3(其它功能) | 注册登录、拉取通讯录、个性化内容加载、扫码识别 等 |
运维视角 | 针对于同时支持会话数的横向扩容、即时通讯过程产生的内容存储、确保即时通讯可靠性的多线机房 |
开发视角 | 核心业务接口的QPS、核心业务的TPS |
运营视角 | 线下推广 与 线上推广 所涉及主要功能场景:注册、登录、添加好友 等 |
三、测试实现
1)通讯协议
- 为了满足 即时通讯 对送达率和连接稳定性的这个更高优先级的需求,通常采用 TCP 协议,如 MQTT、XMPP
- 实时通讯 中,偶尔的画面卡顿、丢包是可接受的,但延迟要求较高,因此通常采用 UDP 协议,如 WebRTC
2)测试工具
工具 | 支持协议 | 说明 |
---|---|---|
Locust | 自带 HTTP Client,其它协议需自行实现 Client | 采用(单进程)协程+IO复用实现并发负载 |
Jmeter | / | 采用多线程实现并发负载 |
四、测试策略
说明:本质上是围绕 建立连接的延迟、连接稳定性、数据报文延迟、数据报文送达率 的测试。
1)核心角色与业务
即时通讯
角色 | 业务类型 | 前置条件 | 备注 |
---|---|---|---|
用户 | 私聊:一对一文本消息收发 | 双方在线(C->S->C) | |
用户 | 私聊:一对一文本消息收发 | 单方在线(先 C->S 后 S->C) | |
用户 | 群聊:一对多文本消息收发 | 部分在线 & 全员在线 | |
用户 | 私聊:一对一附件消息收发 | 单、双方在线(均为:先C->S 后 S->C) | |
用户 | 群聊:一对多附件消息收发 | 部分在线 & 全员在线 | |
用户 | 离线消息收取 | / |
实时通讯
- 语音通话 & 语音+视频通话:参考“即时通讯”
其它功能
- 用户 的 线上交互场景:注册、登录、添加好友 等
- 用户 的 线下交互场景:钱包、卡包、积分、凭证展示 等
- ……(其它参考产品设计)
2)测试用例编写参考
用户角色
- 用户登录:身份验证、通讯录列表加载(联系人信息、状态、数量)、个性化内容加载
- 消息收、发(私聊):短文本、长文本、图片、文件、链接等其它分享
- 消息收、发(群聊)
- 离线消息收取
- 附件收、发
- 用户注册、登录
- 添加好友 / 加入群聊
风控、客服 等管理运营角色
- 略(参考产品设计)
3)测试场景设计关注点
0、业务配比
- 对文本、消息、语音、语音+视频的业务配比,参考日度业务量、支持连接的需求进行正确估算配置
1、性能基准
- 对 连接 的 最高支持数量、建立延迟、稳定性、连接建立TPS 进行测试
- 对 消息 的 TPS、送达延迟、送达率 进行测试
- 对 版本迭代 中的性能优化前后的基准数据进行比较
2、负载测试
- 关注 日度 业务峰值负载(业务量、时间、时长)
- 关注 周/月 中业务峰值负载(业务量、时间、时长)
- 关注 运营推广 过程中所涉及的业务负载(业务量、时间、时长)
- 关注 意外负载 的出现时机、负载特点
3、容量测试
- 基于“性能基准”结果,参考:1000 - 2000 - 3000 - XXXX 的方式进行在线用户数量的递增
- 关注 良好性能体验 条件下的最高支持在线用户数
- 关注 可容忍上限 条件下的最高支持在线用户数
- 关注 系统资源充裕 条件下的最高支持在线用户数
- 关注 系统资源不足 条件下的最高支持在线用户数
4、可用性测试
- 以施加峰值负载的方式达到考核时间周期的业务量
5、可靠性测试
- 关注 网络异常 对性能基准的影响
- 关注 服务异常 对性能基准的影响
- 关注 冗余节点 随机的上、下线对性能基准的影响
- 关注 冗余节点 随机的上、下线对:功能可用性、事务性、性能、持久化设计 的影响
6、资源规划 / 扩容配置
- 关注核心业务在性能上横向扩容过程中,节点增加与性能削减的关系
- 关注即时通讯对服务产生的存储空间占用开销
- 关注即时通讯对服务产生的带宽占用开销
4)测试场景设计
(参考产品设计 与“测试场景设计关注点”:略)
测试场景 | 场景描述 | 场景目标 | 执行策略 | 期望结果 |
---|---|---|---|---|
性能基准测试 | ||||
负载测试 | ||||
容量测试 | ||||
可用性测试 | ||||
可靠性测试 | ||||
…… |
五、备注
脚本需要实现 文本消息发送 和 文本消息送达 的断言、延迟、送达率测试。