一种MQTT服务测试系统和方法转让专利

申请号 : CN202110155919.8

文献号 : CN112905454B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 郭斌昌王小辉王佳井科星雷宇龙王平

申请人 : 郑州信大捷安信息技术股份有限公司

摘要 :

本发明提供一种MQTT服务测试系统和方法。该测试系统包括:环境配置模块、测试执行模块以及数据收集分析模块;所述环境配置模块,用于构建所述测试执行模块所需要的基础配置信息;所述测试执行模块,用于建立海量的长链接,并维护长链接保活状态;在维护长链接的过程中记录长链接的状态信息;将日志数据信息提交到数据收集分析模块;所述数据收集分析模块,用于循环消息队列;接收其他模块在测试过程中提交的日志数据信息;根据日志数据信息分析测试系统的性能。本发明可以有效解决MQTT服务海量长链接测试困难,测试系统复杂等问题。

权利要求 :

1.一种MQTT服务测试系统,其特征在于,包括:环境配置模块、测试执行模块以及数据收集分析模块;

所述环境配置模块,用于构建所述测试执行模块所需要的基础配置信息;

所述测试执行模块,用于建立海量的长链接,并维护长链接保活状态;在维护长链接的过程中记录长链接的状态信息;将日志数据信息提交到数据收集分析模块;

所述数据收集分析模块,用于循环消息队列;接收其他模块在测试过程中提交的日志数据信息;根据日志数据信息分析测试系统的性能;

所述基础配置信息包括:为测试系统设置的多个虚拟IP、测试系统测试的目标MQTT服务、测试系统测试的长链接数量和测试系统所维护的长链接保活周期;

所述测试执行模块包括:

长链接信息管理子模块,用于基于基础配置信息,建立长链接维护管理数据结构;管理产生的长链接;记录长链接测试过程发生的异常情况;将日志数据信息提交到数据收集分析模块;

长链接生成监听子模块,用于利用虚拟IP创建海量的长链接socket,耗尽测试系统所有长链接socket数量或指定的长链接socket数量,使用linux系统调用epoll事件管理机制,监控海量长链接socket实现数据交互;将长链接信息委托给长链接信息管理子模块以供其维护长链接状态;将日志数据信息提交到数据收集分析模块;

长链接维护子模块,用于查询委托在长链接信息管理子模块的长链接状态,根据长链接状态,按照MQTT协议PING指令维护长链接的健康;以及用于执行停止测试操作、终止长链接维护操作和释放长链接资源操作;将日志数据信息提交到数据收集分析模块;

所述测试执行模块按照如下步骤运行内部的各个子模块:首先,初始化长链接信息管理子模块;

然后,执行长链接生成监听子模块;

最后,启动长链接维护子模块;

所述初始化长链接信息管理子模块,具体包括:加载环境配置模块的基础配置信息;

初始化长链接信息管理子模块的长链接维护管理数据结构;

通过epoll_create创建epoll句柄;

所述执行长链接生成监听子模块,具体包括:步骤A1:获取长链接信息管理子模块中的一个虚拟IP,以及目标MQTT服务信息;

步骤A2:创建MQTT服务长链接MQTT_CONNECT,以创建一个长链接socket;

步骤A3:判断当前的长链接socket是否创建成功,如果成功,则进入步骤A4,如果失败,则进入步骤A6;

步骤A4:委托长链接socket信息到所述长链接信息管理子模块;

步骤A5:创建epoll事件,添加epoll_ctl以及socket到监控列表中,并返回步骤A2以创建下一个长链接socket;

步骤A6:获取长链接信息管理子模块中的下一个虚拟IP;

步骤A7:判断是否有未使用的虚拟IP,如果有,则返回步骤A2以创建对应虚拟IP下的长链接socket,如果否,则所有长链接socket已创建完成;

所述启动长链接维护子模块,具体包括:步骤B1:判断长链接是否需要停止维护,如果是,则释放所有长链接socket,如果否,则进入步骤B2;

步骤B2:通过epoll_wait获取监听的socket列表是否收到数据事件;

步骤B3:读取发生事件的socket数据;

步骤B4:遍历长链接信息管理子模块中所有的MQTT长链接信息,逐个对应socket中发送MQTT_PING指令给服务端,使MQTT协议长链接持续保持。

2.根据权利要求1所述的一种MQTT服务测试系统,其特征在于,所述数据收集分析模块,用于通过消息队列接收其他模块提交的日志数据信息,并通过数据库系统记录日志数据信息,然后将日志数据信息进行分类存储;通过Web服务提供可视化日志查看界面。

3.一种MQTT服务测试方法,其特征在于,应用于权利要求1或2所述的测试系统,所述方法包括:

步骤1:通过环境配置模块为测试系统配置多个虚拟IP;

步骤2:通过测试执行模块基于每个虚拟IP分别创建多个长链接socket,进而创建得到海量的长链接socket;

步骤3:通过测试执行模块基于每个长链接socket按照MQTT协议发送PING指令给MQTT服务端,以对MQTT服务端产生压力;

步骤4:通过数据收集分析模块收集其他模块提交的日志数据信息,以进行分类存储和可视化展示,实现对MQTT服务端的压测。

说明书 :

一种MQTT服务测试系统和方法

技术领域

[0001] 本发明涉及软件测试技术领域,尤其涉及一种MQTT服务测试系统和方法。

背景技术

[0002] 物联网领域的应用系统,最基础的业务是保障设备和服务端的长链接,使得服务端可以实时感知客户端变化,以及获取客户端状态信息收集。物联网领域应用系统使用基
础数据交互协议基于MQTT协议实现。MQTT,即消息队列遥测传输协议,具有轻量、简单、开
放、易实现特点。这些特点使得该协议在机器通信、医疗设备、智能家居等方面广泛应用。
[0003] 服务于物联网系统的服务端对于系统容量、性能指标的检查和验证是至关重要的一个问题。服务端是否支持海量的设备建立长链接并进行正常数据交互,给测试验证带来
很大的挑战。
[0004] 现实环境无法以建造海量的设备和服务系统建立连接的方式对业务系统进行测试,只有使用一些模拟手段尝试建立海量长链接。然而,测试端常用测试系统单机无法创建
数以百万的网络连接socket和服务端进行通信,常见方案通过水平扩展测试机器,集群化
部署,才能达到集群测试单独MQTT服务的目标。并且,这样的测试方案测试系统部署复杂,
测试系统建设难度大,投入成本高,不利于测试工作的展开和长期跟进。对于集群化部署的
MQTT服务,测试工作更是难以展开。

发明内容

[0005] 针对传统测试方案存在测试系统部署复杂的问题,本发明提供一种MQTT服务测试系统和方法,可以有效解决MQTT服务海量长链接测试困难,测试系统复杂等问题。
[0006] 一方面,本发明提供一种MQTT服务测试系统,包括:环境配置模块、测试执行模块以及数据收集分析模块;
[0007] 所述环境配置模块,用于构建所述测试执行模块所需要的基础配置信息;
[0008] 所述测试执行模块,用于建立海量的长链接,并维护长链接保活状态;在维护长链接的过程中记录长链接的状态信息;将日志数据信息提交到数据收集分析模块;
[0009] 所述数据收集分析模块,用于循环消息队列;接收其他模块在测试过程中提交的日志数据信息;根据日志数据信息分析测试系统的性能。
[0010] 进一步地,所述基础配置信息包括:为测试系统设置的多个虚拟IP、测试系统测试的目标MQTT服务、测试系统测试的长链接数量和测试系统所维护的长链接保活周期。
[0011] 进一步地,所述测试执行模块包括:
[0012] 长链接信息管理子模块,用于基于基础配置信息,建立长链接维护管理数据结构;管理产生的长链接;记录长链接测试过程发生的异常情况;将日志数据信息提交到数据收
集分析模块;
[0013] 长链接生成监听子模块,用于利用虚拟IP创建海量的长链接socket,耗尽测试系统所有长链接socket数量或指定的长链接socket数量,使用linux系统调用epoll事件管理
机制,监控海量长链接socket实现数据交互;将长链接信息委托给长链接信息管理子模块
以供其维护长链接状态;将日志数据信息提交到数据收集分析模块;
[0014] 长链接维护子模块,用于查询委托在长链接信息管理子模块的长链接状态,根据长链接状态,按照MQTT协议PING指令维护长链接的健康;以及用于执行停止测试操作、终止
长链接维护操作和释放长链接资源操作;将日志数据信息提交到数据收集分析模块。
[0015] 进一步地,所述测试执行模块按照如下步骤运行内部的各个子模块:
[0016] 首先,初始化长链接信息管理子模块;
[0017] 然后,执行长链接生成监听子模块;
[0018] 最后,启动长链接维护子模块。
[0019] 进一步地,所述初始化长链接信息管理子模块,具体包括:
[0020] 加载环境配置模块的基础配置信息;
[0021] 初始化长链接信息管理子模块的长链接维护管理数据结构;
[0022] 通过epoll_create创建epoll句柄。
[0023] 进一步地,所述执行长链接生成监听子模块,具体包括:
[0024] 步骤A1:获取长链接信息管理子模块中的一个虚拟IP,以及目标MQTT服务信息;
[0025] 步骤A2:创建MQTT服务长链接MQTT_CONNECT,以创建一个长链接socket;
[0026] 步骤A3:判断当前的长链接socket是否创建成功,如果成功,则进入步骤A4,如果失败,则进入步骤A6;
[0027] 步骤A4:委托长链接socket信息到所述长链接信息管理子模块;
[0028] 步骤A5:创建epoll事件,添加epoll_ctl以及socket到监控列表中,并返回步骤A2以创建下一个长链接socket;
[0029] 步骤A6:获取长链接信息管理子模块中的下一个虚拟IP;
[0030] 步骤A7:判断是否有未使用的虚拟IP,如果有,则返回步骤A2以创建对应虚拟IP下的长链接socket,如果否,则所有长链接socket已创建完成。
[0031] 进一步地,所述启动长链接维护子模块,具体包括:
[0032] 步骤B1:判断长链接是否需要停止维护,如果是,则释放所有长链接socket,如果否,则进入步骤B2;
[0033] 步骤B2:通过epoll_wait获取监听的socket列表是否收到数据事件;
[0034] 步骤B3:读取发生事件的socket数据;
[0035] 步骤B4:遍历长链接信息管理子模块中所有的MQTT长链接信息,逐个对应socket中发送MQTT_PING指令给服务端,使MQTT协议长链接持续保持。
[0036] 进一步地,所述数据收集分析模块,用于通过消息队列接收其他模块提交的日志数据信息,并通过数据库系统记录日志数据信息,然后将日志数据信息进行分类存储;通过
Web服务提供可视化日志查看界面。
[0037] 另一方面,本发明提供一种MQTT服务测试方法,应用于上述的测试系统,所述方法包括:
[0038] 步骤1:通过环境配置模块为测试系统配置多个虚拟IP;
[0039] 步骤2:通过测试执行模块基于每个虚拟IP分别创建多个长链接socket,进而创建得到海量的长链接socket;
[0040] 步骤3:通过测试执行模块基于每个长链接socket按照MQTT协议发送PING指令给MQTT服务端,以对MQTT服务端产生压力;
[0041] 步骤4:通过数据收集分析模块收集其他模块提交的日志数据信息,以进行分类存储和可视化展示,实现对MQTT服务端的压测。
[0042] 本发明的有益效果:
[0043] 本发明可以有效的解决MQTT服务海量长链接测试困难,测试系统复杂等问题。而且,本发明的系统规模灵活,运行简单,可以满足测试持续跟进MQTT服务升级优化等开发工
作。

附图说明

[0044] 图1为本发明实施例提供的一种MQTT服务测试系统的框图;
[0045] 图2为本发明实施例提供的测试执行模块的结构图;
[0046] 图3为本发明实施例提供的测试执行模块的流程图;
[0047] 图4为本发明实施例提供的初始化长链接信息管理子模块的流程图;
[0048] 图5为本发明实施例提供的执行长链接生成监听子模块的流程图;
[0049] 图6为本发明实施例提供的启动长链接维护子模块的流程图;
[0050] 图7为本发明实施例提供的一种MQTT服务测试方法的流程图。

具体实施方式

[0051] 为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分
实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创
造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0052] 实施例1
[0053] 如图1所示,本发明实施例提出一种MQTT服务测试系统,所述系统包括环境配置模块、测试执行模块以及数据收集分析模块;
[0054] 所述环境配置模块,用于构建所述测试执行模块所需要的基础配置信息,以满足测试执行模块能够基于该基础配置信息创建海量的长链接;
[0055] 具体地,所述基础配置信息包括:为测试系统设置的多个虚拟IP、测试系统测试的目标MQTT服务、测试系统测试的长链接数量和测试系统所维护的长链接保活周期。
[0056] 所述测试执行模块,用于建立海量的长链接,并维护长链接保活状态;在维护长链接的过程中记录长链接的状态信息;将日志数据信息提交到数据收集分析模块;
[0057] 具体地,通过所述测试执行模块建立海量的长链接,并维护长链接保活状态,从而对MQTT服务端产生压力,以成功创建的接入端数量验证MQTT服务端所能承载的容量以及运
行性能。通过在维护长链接的过程中记录长链接的状态信息,以满足所述测试数据收集分
析模块定位MQTT服务测试系统的稳定性和性能。
[0058] 所述数据收集分析模块,用于循环消息队列;接收其他模块在测试过程中提交的日志数据信息;根据日志数据信息分析测试系统的性能。
[0059] 具体地,所述数据收集分析模块用于通过消息队列接收其他模块提交的日志数据信息,然后从消息队列中提取出日志数据信息,并通过数据库系统记录日志数据信息,然后
将日志数据信息进行分类存储;通过Web服务提供可视化日志查看界面。
[0060] 可以理解,数据收集分析模块包含上述4方面能力,即:提供结构化的日志规范设计,接收其他模块测试过程提交到消息队列的日志数据信息的能力;循环消息队列的能力;
分析日志数据信息归档到数据库的能力;在Web界面进行分类信息查看,实现日志差异分析
的能力。
[0061] 本发明实施例提供的MQTT服务测试系统,可以有效的解决MQTT服务海量长链接测试困难,测试系统复杂等问题。而且,本发明的系统规模灵活,运行简单,可以满足测试持续
跟进MQTT服务升级优化等开发工作。
[0062] 实施例2
[0063] 在上述实施例的基础上,作为一种可实施方式,所述环境配置模块构建的基础配置信息包括以下4个方面:为测试系统设置的多个虚拟IP、测试系统测试的目标MQTT服务、
测试系统测试的长链接数量和测试系统所维护的长链接保活周期。
[0064] 在实际应用中,本发明实施例的环境配置模块至少包括以上4个方面的配置功能,旨在构建测试执行模块所需要的基础环境、基本配置参数,满足测试执行模块使其能够创
建海量长链接。
[0065] 作为一种可实施方式,如图2所示,本发明实施例的所述测试执行模块包括:长链接信息管理子模块、长链接生成监听子模块和长链接维护子模块;其中:
[0066] 长链接信息管理子模块用于基于基础配置信息,建立长链接维护管理数据结构;管理产生的长链接;记录长链接测试过程发生的异常情况;
[0067] 具体地,管理产生的长链接的管理方式包括:添加、更新、删除相关信息。
[0068] 长链接生成监听子模块,用于利用虚拟IP创建海量的长链接socket,耗尽测试系统所有长链接socket数量或指定的长链接socket数量,使用linux系统调用epoll事件管理
机制,监控海量长链接socket实现数据交互;将长链接信息委托给长链接信息管理子模块
以供其维护长链接状态;将日志数据信息提交到数据收集分析模块;
[0069] 长链接维护子模块,用于查询委托在长链接信息管理子模块的长链接状态,根据长链接状态,按照MQTT协议PING指令维护长链接的健康;以及用于执行停止测试操作、终止
长链接维护操作和释放长链接资源操作;将日志数据信息提交到数据收集分析模块。
[0070] 本发明实施例提供的MQTT服务测试系统,通过测试执行模块建立海量的长链接,并且维护长链接保活状态,充分利用MQTT服务测试系统的socket资源,建立长链接,整个过
程对MQTT服务端产生压力,以成功创建的接入端数量验证MQTT服务端所能承载的容量,以
及MQTT服务端的运行性能。在海量长链接的维护过程中,记录长链接状态信息,满足数据收
集分析模块定位MQTT服务测试系统稳定性和性能问题。
[0071] 实施例3
[0072] 在上述各实施例的基础上,与上述实施例不同的是,本发明实施例提供了一种测试执行模块的工作流程,如图3所示,所述测试执行模块按照如下步骤运行内部的各个子模
块:
[0073] 首先,初始化长链接信息管理子模块;
[0074] 具体地,如图4所示,具体包括以下子步骤:加载环境配置模块的基础配置信息;初始化长链接信息管理子模块的长链接维护管理数据结构;通过epoll_create创建epoll句
柄;
[0075] 然后,执行长链接生成监听子模块;
[0076] 具体地,如图5所示,包括以下子步骤:
[0077] 步骤A1:获取长链接信息管理子模块中的一个虚拟IP,以及目标MQTT服务信息;
[0078] 步骤A2:创建MQTT服务长链接MQTT_CONNECT,以创建一个长链接socket;
[0079] 步骤A3:判断当前的长链接socket是否创建成功,如果成功,则进入步骤A4,如果失败,则进入步骤A6;
[0080] 步骤A4:委托长链接socket信息到所述长链接信息管理子模块;
[0081] 步骤A5:创建epoll事件,添加epoll_ctl以及socket到监控列表中,并返回步骤A2以创建下一个长链接socket;
[0082] 步骤A6:获取长链接信息管理子模块中的下一个虚拟IP;
[0083] 步骤A7:判断是否有未使用的虚拟IP,如果有,则返回步骤A2以创建对应虚拟IP下的长链接socket,如果否,则所有长链接socket已创建完成。
[0084] 可以理解,当前虚拟IP能创建的长链接socket已经耗尽,再使用下一个虚拟IP继续创建。所有虚拟IP能创建的长链接socket耗尽,所有测试长链接socket创建完毕。
[0085] 最后,启动长链接维护子模块。
[0086] 具体地,如图6所示,具体包括以下子步骤:
[0087] 步骤B1:判断长链接是否需要停止维护,如果是,则释放所有长链接socket,如果否,则进入步骤B2;
[0088] 步骤B2:通过epoll_wait获取监听的socket列表是否收到数据事件;
[0089] 步骤B3:读取发生事件的socket数据;
[0090] 步骤B4:遍历长链接信息管理子模块中所有的MQTT长链接信息,逐个对应socket中发送MQTT_PING指令给服务端,使MQTT协议长链接持续保持。
[0091] 具体地,创建的所有socket在长链接信息管理子模块中都有记录,如: socket_id1,socket_id2,socket_id3...;epoll_wati每次会获取到“有数据到来的socket”,如:
socket_id2,socket_id4,socket_id100...;epoll_wait将获取到的“有数据到来的
socket”在长链接信息管理子模块中对比查找,如找到:socket_id2, socket_id10...;读
取socket上的数据后,再发MQTT_PING指令给服务端。
[0092] 实施例4
[0093] 本发明实施例还提供一种MQTT服务测试方法,应用于上述各实施例中的MQTT服务测试系统,如图7所示,该方法包括以下步骤:
[0094] 图7示出了本发明一种MQTT服务测试方法的流程图。
[0095] S701:通过环境配置模块为测试系统配置多个虚拟IP;
[0096] S702:通过测试执行模块基于每个虚拟IP分别创建多个长链接socket,进而创建得到海量的长链接socket;
[0097] S703:通过测试执行模块基于每个长链接socket按照MQTT协议发送PING指令给MQTT服务端,以对MQTT服务端产生压力;
[0098] S704:通过数据收集分析模块收集其他模块提交的日志数据信息,以进行分类存储和可视化展示,实现对MQTT服务端的压测
[0099] 本发明的技术方案可以有效的解决MQTT服务海量长链接测试困难,测试系统复杂等问题。而且,本发明的系统规模灵活,运行简单,可以满足测试持续跟进MQTT服务升级优
化等开发工作。
[0100] 最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可
以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;
而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和
范围。