一、背景

即时通信(Instant Message,简称 IM)是一个终端服务,允许两人或多人使用网络即时地传递文字信息、图片、语音、视频和文件。

IM 测试的重点是围绕着消息展开具体测试活动的,本文也旨在分享中通自研 IM 系统中的 “消息” 测试的实践经验。

二、测试分析介绍

消息的质量目标包括:准确性、时效性、可靠性、多端一致性、安全性、兼容性,这几个维度都是做好 IM 质量保障的重点及难点。

基于业务特性分析,我们梳理出 IM 测试点,大致如下

三、IM 测试实践

1、准确性保障

消息的准确性,简单来说,就是发出去的消息,和实际接收到的消息,要完全保持一致。消息准确性是 IM 所有特性的基础。
那么,如何测试消息的准确性呢?我们要明确消息准确性的关键点。

(1)时间准确性:消息发送方发出时间,和消息接收方接收时间,差值要在 500ms 以内。

(2)顺序准确性:单聊、群聊,每个人接收到的消息的顺序都是一样的。

(3)内容准确性:消息发送方发出的内容,和消息接收方接收到的内容,要一模一样,长度不会被截断,字符也不会被转义等。

(4)类型准确性:例如发出去的消息类型是视频,那么接收到的消息类型也应该是视频,而不能解析为文件。二者的差异不仅在于类型标签不一样,还在于视频可以直接在 IM 聊天框中播放,而文件只能下载不能播放。

(5)状态准确性:发送方发出去,如果接收方未读,那么发送方查验的接收方已读未读状态不能是已读。
我们构造以下 3 类场景来展开测试工作:在线场景,离线场景,历史消息场景。

在线场景:收发消息的帐号都保持在线状态,消息发出后,在接收方客户端就能实时收到消息,此时验证消息的时间、顺序、内容、类型、状态,是否和发送方保持一致。

离线场景:接收方不在线时,首先需要查询 Redis,验证接收方消息正常被记录。然后还需要验证,当接收方登录后,能够查询到消息,且消息的五个准确性维度,都和发送方保持一致。

历史消息场景:接收方清除客户端缓存,或者换设备登录,验证历史消息还能获取到。

2、时效性保障

消息时效性的性能指标主要是关注在高负载高并发场景下的消息收发时间。中通的架构师在架构设计之初,就已经确定了一个参考值,在 10000 QPS 下,消息收发在 500ms 以内。当然这个数据是足够支持集团几十万人正常使用 IM 的。

3、可靠性保障

IM 可靠性,通过模拟各种异常场景,来检查 IM 客户端的表现是否符合预期。总的来讲有 2 个关注点,即:消息不丢,消息不重。我们通过构造以下场景来测试:

(1)网络异常场景

网络异常场景主要分弱网和断网。

弱网场景:通过抓包工具的 Throttle Settings,修改上下行速率、丢包率等参数,模拟弱网环境。

断网场景:在使用过程中,通过断开网络,或者关闭防火墙等方式来模拟断网场景。

(2)接口异常场景

通过代理工具,模拟接口未返回、返回异常,或者返回字段类型与约定不一致(例如约定是数字类型,实际返回字符串类型),以及模拟接口返回报文超出边界值等场景。

(3)服务器异常场景

服务端服务不可用场景(例如 kill 单个微服务节点)和服务端资源即将耗尽或者已经耗尽场景(例如修改容器内存或 CPU)。

4、多端一致性保障

多端一致性,主要指的是 PC 端和移动端,数据能够互通且准确、实时。

我们通过构造以下场景来验证多端一致性:

(1)多端推送场景

例如多端同时在线情况下,多端要同时收到推送消息,且能查询到推送消息详情,两端接收到推送的时间,相差不能超过 1 秒。再例如一端在线,另一端离线的情况下,后台给两端推送的时间,也应该保持一致,区别在于离线的那端重新登录后,要能查到离线消息,且消息内容和在线端收到的保持一致。

(2)多端消息漫游场景

例如用户仅登录电脑端,收发消息后,然后又登录一台从来没有登录过的新的移动端设备,此时验证用户登录移动端后,能够拉取历史消息(由于考虑到成本和性能等方面 ,大部分系统可能会设置一个诸如最多只能拉取最近 200 条历史消息的阈值),消息的五个准确性维度都是需要验证的点。

5、安全性保障
IM 相关的安全测试,主要包括敏感信息是否加密、必要参数是否后端也进行加密、接口是否存在越权请求、SQL 注入、XSS 攻击、是否能防止拦截篡改等等。其中最常见的是越权测试,例如不在聊天群内的用户,是否会接收到群聊里的消息,是否可以越权调用获取其他群聊的信息等。

6、移动专项保障
由于自研 IM 产品的重要载体是移动 App,因此还涉及到移动专项测试,包括:兼容性测试、耗电量测试、流量测试、冷启动性能等。

四、其他抓手

充分利用中通测试团队的 “探索性测试” 虚拟组织,补充测试盲点,提升发现缺陷的效率,同时这也是提升产品体验的好途径。

而种子用户群的建立,同样也是用户场景的重要补充。结合灰度发布,更是提高缺陷识别的效率,控制发布风险。

由于篇幅原因,本文不详细介绍中通测试的 “探索性测试” 活动,后面会有相关类似的文章推出,敬请关注。

五、总结及展望

IM 测试,看似简单,其实个中门道很深。通过两年的中通自研 IM 平台测试实践,我们总结出以下经验:

1、充分的用例场景是质量保障的基石。

2、接口自动化是回归测试的利器。

产品还在小步快跑,试错迭代,我们的测试活动并没有停止,同样我们的测试场景和接口脚本还在不停地增长,未来还需要进一步深度探索 IM 测试。欢迎同行伙伴们一起交流经验。


↙↙↙阅读原文可查看相关链接,并与作者交流