一、概述

常见的即时聊天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)测试场景设计

(参考产品设计 与“测试场景设计关注点”:略)

测试场景 场景描述 场景目标 执行策略 期望结果
性能基准测试        
负载测试        
容量测试        
可用性测试        
可靠性测试        
……        

五、备注

脚本需要实现 文本消息发送 和 文本消息送达 的断言、延迟、送达率测试。