TinyIM的测试设计

TinyIM是一款IM软件,因为IM的消息发送和接收一般都是异步操作,在编写联调测试代码的时候不是特别的方便,所以我把IM设计成了UI和Core分离的架构。这样的设计的作用除了可以分离GUI和Core来方便开发以外,还可以对测试起到帮助的作用。

1. Server端测试设计

对于Server端来说,主要的操作有以下几个方面,1、接收和发送消息(TCP消息和UDP消息)。2、对请求消息进行处理,生成回复消息。3、数据库的相关操作等。

  1. 接收和发送消息 这个部分的模拟相对困难一些,所以在TinyIM的测试中,采取的是对这一部分不进行模拟,在联调测试的时候进行测试。

  2. 对请求的消息进行处理

这个部分分成两个小的模块,一个是以Handle开头的一系列的函数,主要的功能是完成消息的分发处理。还有一些是以Do开头的一系列函数,主要的功能时完成实际的消息处理,从请求消息生成对应的回复消息。对这部分的函数可以进行测试,进而完成业务逻辑的测试工作。

  1. 数据库相关的操作

数据库的操作主要就是CURD,此部分的测试可以单独进行,TinyIM在这部分有测试,但是从测试的覆盖率来说还不够,需要加强。 总体来说,这部分的测试可以单独进行,不依赖于其他的部分。

2. Client端测试设计

对于Client端来说,主要的操作和服务器的差别不是很大,所以用到的相关测试方法也类似,在此处就不再描述了。

3. 联调测试设计

因为IM的消息都是异步收发的,在测试的时候不太方便。我在设计的时候将Client端的GUI和Core的部分分开设计,并且在Core的部分除了TCP的接口以外,还另外增加了HTTP接口。这样的操作除了可以方便使用Electron等技术栈来开发客户端以外,还将TCP的异步消息转为了HTTP的同步消息,便于测试代码的编写。也是因为有了HTTP的接口,也给编写IMRobot提供了便利。只是在Client端的逻辑上,因为拆分的原因,显得设计有些复杂了。