zoukankan      html  css  js  c++  java
  • 即时通讯 APP 后端性能测试思路

    即时通讯 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)测试场景设计

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

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

    五、备注

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

  • 相关阅读:
    4、数组及字符串
    3、处理数据
    2、开始学习C++
    1、C++学习预备知识
    Django【进阶篇 】
    Django【基础篇】
    Python操作MySQL
    MySQL(二)
    python日记-使用队列写出特殊字数串
    python日记-快速排序算法
  • 原文地址:https://www.cnblogs.com/huanghaopeng/p/13130458.html
Copyright © 2011-2022 走看看