测试压力的方法、装置和系统与流程

文档序号:17640556发布日期:2019-05-11 00:38阅读:184来源:国知局
测试压力的方法、装置和系统与流程

本发明涉及计算机领域,具体而言,涉及一种测试压力的方法、装置和系统。



背景技术:

随着移动互联网用户群体的不断扩大,对网络游戏等热门互联网应用的服务器性能要求越来越高。为了保证服务器面对大量用户同时在线时能够稳定运行,服务器外放使用前需经过压力测试验证,主要是通过压测工具(一种计算机进程)来模拟大量用户同时在线操作,以验证服务器各项性能指标是否满足实际外放需求。

然而,随着网络服务器性能要求的不断提高和业务功能的不断增加,对压测工具的要求也越来越高,其中,要求压测工具可提供的最大网络请求并发数量的上限也越来越大。在单个设备上部署压测工具时由于设备本身性能限制,可提供的并发数会收到上限数量的限制。目前主要是将压测工具分布在多个设备上,通过集群方式扩大压测并发数。

随着设备的不断增多,压测工具部署复杂度也在不断增大,例如,每个设备上都要部署压测工具相关环境和测试用例,当测试用例需要新增或修改时,需要逐一在每个设备上对压测工具的代码进行同步。由于压测工具部署在不同的设备上,因此,压测工具的启动与关闭也需要逐一在设备上执行,操作繁琐。

另外,压测工具分布在不同设备上,各压测工具间执行任务的同步、数据交互、压测数据收集汇总等问题处理属于多进程操作,也会增加压测工具法开发难度。为了模拟多客户端并发请求,现有的压测工具采用多线程技术。然而多线程的数据竞争问题会进一步增加压测用例的开发难度。随着集群设备数量的不断增多,上述问题会明显暴露出来。

针对上述的集群压测方法中,在大集群机器数量下,各设备压测工具代码环境部署、启动、执行压测用例时操作复杂度显著提升,且各压测单元在多线程、多进程运行环境下,压测用例开发受数据同步问题困扰,执行效率不高的问题,目前尚未提出有效的解决方案。



技术实现要素:

本发明实施例提供了一种测试压力的方法、装置和系统,以至少解决现有的集群压测方法在对服务器进行压力测试时,操作复杂的技术问题。

根据本发明实施例的一个方面,提供了一种测试压力的方法,包括:接收中心控制设备发送的控制信息,控制信息至少包括:操作指令、压测进程的标识信息、待更新文件;控制待执行设备上的至少一个压测进程执行操作指令,并生成压测数据,其中,每个待执行设备上部署有至少一个压测进程,压测进程用于压力测试;发送压测数据至中心控制设备,以使中心控制设备展示压力测试结果。

进一步地,测试压力的方法还包括:获取中心控制设备发送的至少一个压测进程的标识信息;控制与标识信息对应的压测进程执行操作指令。

进一步地,测试压力的方法还包括:获取中心控制设备发送的待更新文件;获取与标识信息对应的压测进程的第一文件;基于待更新文件对第一文件进行更新,得到第二文件;基于第二文件创建虚拟客户端,其中,虚拟客户端运行时生成压测数据。

进一步地,测试压力的方法还包括:发送第一文件至中心控制设备,以使中心控制设备在检测到第一文件与待更新文件存在差异的情况下,发送待更新文件。

进一步地,测试压力的方法还包括:发送第一文件至中心控制设备,以使中心控制设备在检测到第一文件与待更新文件存在差异的情况下,发送待更新文件中的差异部分。

进一步地,测试压力的方法还包括:在加载待更新文件的过程中,创建正在执行压测任务的虚拟客户端的类实例,以使虚拟客户端执行压测任务,并对第一文件进行更新。

进一步地,测试压力的方法还包括:控制每个虚拟客户端以协程的形式执行压测任务,并生成压测数据,其中,每个虚拟客户端对应的协程设置于激活队列中;其中,在检测到阻塞异常的情况下,存储当前协程至等待列表中,并运行激活队列中的协程;在检测到阻塞异常结束的情况下,将等待列表中的协程存储至激活列表中。

进一步地,测试压力的方法还包括:对至少一个压测进程进行第一标记,得到目标压测进程,其中,目标压测进程为需要收集压测数据的压测进程;向目标压测进程发送收集指令,其中,收集指令至少包括时间戳;接收目标压测进程返回的目标压测数据,并对目标压测进程进行第二标记,其中,至少一个压测进程根据时间戳对压测数据进行筛选,并进行统计得到目标压测数据;发送目标压测数据至中心控制设备。

根据本发明实施例的另一方面,还提供了一种测试压力的系统,包括:中心控制设备,用于生成控制信息,接收并展示至少一个待执行设备反馈的压测数据,控制信息至少包括:操作指令、压测进程的标识信息、本地代码文件;至少一个待执行设备,其中,每个待执行设备上部署有至少一个压测进程,至少一个压测进程用于执行操作指令,并生成压测数据。

根据本发明实施例的另一方面,还提供了一种测试压力的装置,包括:接收模块,用于接收中心控制设备发送的控制信息,控制信息至少包括:操作指令、压测进程的标识信息、待更新文件;生成模块,用于控制待执行设备上的至少一个压测进程执行操作指令,并生成压测数据,其中,待执行设备上部署有至少一个压测进程,压测进程用于压力测试;发送模块,用于发送压测数据至中心控制设备,以使中心控制设备展示压力测试结果。

根据本发明实施例的另一方面,还提供了一种存储介质,该存储介质包括存储的程序,其中,在程序运行时控制存储介质所在设备执行测试压力的方法。

根据本发明实施例的另一方面,还提供了一种处理器,该处理器用于运行程序,其中,程序运行时执行测试压力的方法。

在本发明实施例中,采用中心控制设备对待执行设备上的压测进程进行管理的方式,在接收到中心控制设备发送的控制信息之后,控制待执行设备上的至少一个压测进程执行操作指令,并生成压测数据,然后将压测数据发送至中心控制设备,以使中心控制设备展示压测测试结果,其中,控制信息至少包括:操作指令、压测进程的标识信息、待更新文件,待执行设备上部署有至少一个压测进程,压测进程用于压力测试。

在上述过程中,中心控制设备可对待侧设备上的压测进程进行统一管理,用户无需单独对每个待执行设备上的每个压测进程进行单独管理,从而实现了简便快速地在各待执行设备上同步压测进程的执行环境、压测进程的启停以及压测数据的汇总,简化了服务器压力测试的操作步骤,提高了服务器压力测试的效率。

由此可见,本申请所提供的方案可以解决现有的集群压测方法在对服务器进行压力测试时,操作复杂的技术问题。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是根据本发明实施例的一种测试压力的系统结构示意图;

图2是根据本发明实施例的一种可选的测试压力的系统结构示意图;

图3是根据本发明实施例的一种测试压力的方法流程图;以及

图4是根据本发明实施例的一种测试压力的装置结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

根据本发明实施例,提供了一种测试压力的系统实施例,其中,图1是根据本发明实施例的测试压力的系统结构示意图,如图1所示,该系统主要包括中心控制设备10和至少一个待执行设备20(图1中仅示出了一个)。

可选的,中心控制设备10,用于生成控制信息,接收并展示至少一个待执行设备反馈的压测数据,控制信息至少包括:操作指令、压测进程的标识信息、待更新文件。至少一个压测进程用于执行操作指令,并生成压测数据。每个待执行设备上部署有至少一个压测进程,每个待执行设备上与一个分发控制进程相对应,每个分发控制进程对至少一个压测进程进行管理。

需要说明的是,中心控制设备为ip地址固定的设备,其中,中心控制设备可以为但不限于windows系统的设备,还可以为linux系统的开发设备。

可选的,图2示出了一种可选的测试压力的系统结构示意图,由图2可知,中心控制设备包括第一网络服务器模块、分发控制管理模块、用户交互模块、第一网络处理模块、压测代码同步模块以及压测数据汇总模块。其中,第一网络服务器模块与第一网络处理模块相结合用于处理网络连接请求和数据通信。中心控制设备启动后,第一网络服务器模块也启动,并对中心控制设备的固定ip地址进行监听,通过网络处理线程实时处理各种网络操作。分发控制管理模块用于管理所有待执行设备上所部署的分发控制进程的连接,其中,每个待执行设备的分发控制进程均与分发控制管理模块中的数据管理对象相对应,数据管理对象具有唯一标识,通过唯一标识可索引到分发控制管理模块中与分发控制进程对应的数据管理对象。用户交互模块可接收用户输入的控制指令,并输出中心控制设备的相关信息。其中,中心控制设备对外展示的交互界面可根据所在设备的系统而变化,例如,在windows系统上部署图形ui交互界面,在linux系统的开发机上部署命令行窗口。此外,用户交互模块还可搭建web站点,其中,web站点的前端以web页面形式展示,用户输入和信息输出都可通过前端web页面操作。在执行压力测试之前,用户需要将最新的压测进程的代码部署在中心控制设备本地的固定目录下,压测代码同步模块可将本地最新的压测代码文件同步更新至各个待执行设备上的压测进程的目录下,从而简化了因压测项目更改或压测用例频繁修改,需要手动拷贝压测进程的代码目录到各待执行设备的操作。压测数据汇总模块用于收集各个待执行设备上所有压测进程在预设时间内的压测数据,并汇总展示在中心控制设备的ui交互界面上。

需要说明的是,每一个待执行设备上均部署有一个分发控制进程,其中,待执行设备可以为但不限于windows系统的设备以及linux系统的开发机,分发控制进程以后台守护进程的运行方式在待执行设备上运行。由图2可知,分发控制进程包括:第一网络客户端、第二网络处理模块、数据中转模块、第二网络服务器模块以及压测进程管理模块。其中,第一网络客户端用于连接中心控制设备的第一网络服务器模块,其中,第一网络客户端也跟随分发控制进程的启动而启动,并根据配置的第一网络服务器模块的网络地址与中心控制设备进行实时通信。第二网络服务器模块用于处理分发控制进程与压测进程的网络连接以及通信收发包。第二网络处理模块用于处理分发控制进程中网络客户单与中心控制设备的网络连接以及通信收发包。数据中转模块用于收集待执行设备上所有压测进程在预设时间内的压测数据,并将压测数据转发至中心控制节点中的压测数据汇总模块进行汇总统计。压测进程管理模块用于管理待执行设备中所有压测进程的连接,并将相关数据封装成压测数据对象,具有唯一标识以便于索引,保存在待执行设备中。

需要说明的是,分发控制节点与中心控制设备连接后,通过网络连接可实时同步待执行设备上的相关压测信息,其中,压测信息包括但不限于待执行设备中所有启动的压测进程的进程摘要信息、各个压测进程当前创建的虚拟客户端数量、各个压测进程当前执行的压测任务的名称。中心控制设备中的分发控制管理模块将各个分发控制进程的相关信息存储在对应的数据管理对象中。中心控制设备中的用户交互模块通过分发控制管理模块实时获取各个待执行设备上传的数据,并展示在交互界面上提供给用户查询。

此外,还需要说明的是,在每个待执行设备上均部署由有在每一台施压机上,需要部署至少一个以上的实用于进行压力测试任务的压测进程,压测进程以后台守护进程的形式运行。其中,在同一个待执行设备上可同时运行多个压测进程,每个压测进程执行压测任务的逻辑在主逻辑线程中实现,同一个待执行设备上启动多个压测进程,可充分利用待执行设备的cpu多个核,使待执行设备的资源充分利用。

可选的,由图2可知,每个压测进程包括:第二网络客户端、压测用例管理模块、虚拟客户端管理模块、压测数据统计模块。其中,第二网络客户端用于处理压测节点中第二网络客户端与分发控制进程中第二网络服务器模块之间的网络连接以及通信收发包。压测数据统计模块用于记录压测进程执行压测任务的过程中,每个虚拟客户单的压测网络行为的网络性能数据。压测用例管理模块用于在压测进行加载对应的代码文件之后,保存加载为类声明对象的压测任务,并可通过任务的标识信息进行索引。另外,压测进程在执行压测任务时,是通过创建一定数量的虚拟客户端来模拟真实客户端对网络服务器的网络连接、网络收发包等操作的,而压测进程中的虚拟客户端管理模块可保存该压测进程所创建的所有虚拟客户端的相关信息。其中,每个虚拟客户端执行压测工作时均会设置一个压测任务,通过压测数据统计模块获取压测任务类声明对象,并创建实例,然后根据压测任务的逻辑对网络服务器进行压测操作。

需要说明的是,压测进程的启动/关闭可根据待执行设备的配置性能与实际使用需求进行调整。其中,压测进程的启动/关闭可通过待执行设备的分发控制进程通过调用系统命令来执行,用户在中心控制设备的交互界面上进行相关操作,中心控制设备中的第一网络服务器模块将操作对应的指令发送至分发控制进程,再由分发控制进程将该指令发送至对应的压测进程。

另外,分发控制进程可通过网络连接向压测进程发送控制指令,以实现对压测进程的相关参数的配置。其中,分发控制进程中的第二网络服务器模块中的协议与压测进程中第二网络客户端中的协议相同。各个待执行设备上的分发控制进程启动后,每个分发控制进程对应的第二网络服务器模块也开始启动;各个待执行设备上启动的压测进程启动后,每个压测进程对应的第二网络客户端也启动,并自动与对应的分发控制进程中的第二网络服务器模块进行通信连接。

可选的,压测进程的程序包括引擎部分和脚本部分,其中,压测进程通过引擎部分启动运行,并运行脚本虚拟机,然后再通过脚本虚拟机加载压测进程进行压测任务的脚本代码文件。在上述过程中,压测进程执行压测任务的逻辑以脚本代码的形式进行开发,其开发语言可以为但不限于python语言。另外,每个压测任务均以预设格式的类进行定义和开发,并具有唯一的任务名标识。

需要说明的是,脚本虚拟机是用于管理压测进程的脚本部分的管理器,每一个压测用例脚本文件都可通过脚本虚拟机解析加载生成内存中的用于执行压测逻辑的类对象声明,脚本虚拟机可管理压测用例类对象创建运行,每一个虚拟客户端在执行压测任务时都会独立创建一个由脚本虚拟机管理的压测用例类对象实例,并根据这个压测用例运行过程中的逻辑行为对待测试服务器进行压测操作。

另外,中心控制设备与分发控制进程、分发控制进程与压测进程之间进行通信时的通信协议可以包括但不限于tcp、udp、websocket等协议。其中,中心控制设备中的第一网络服务器模块的协议与分发控制进程中第一网络客户端的协议相同,分发控制进程中的第二网络服务器模块的协议与压测进程中第二网络客户端的协议相同。在本申请中,所有通信协议均采用tcp连接方式。

可选的,由图2可知,测试压力的系统还包括数据交互进程。其中,数据交互进程在待执行设备上运行,其可支持任意两个虚拟客户端在执行压测任务的过程中的数据交互,对搭建多用户操作集合的压测情景测试任务起到较好的支持作用,例如,压测好友间的互相操作、网络游戏中双方建立的房间对战等需要用户相互配合才能实现压力检测的行为。

由上可知,采用中心控制设备对待执行设备上的压测进程进行管理的方式,在接收到中心控制设备发送的控制信息之后,控制待执行设备上的至少一个压测进程执行操作指令,并生成压测数据,然后将压测数据发送至中心控制设备,以使中心控制设备展示压测测试结果,其中,控制信息至少包括:操作指令、压测进程的标识信息、本地代码文件,待执行设备上部署有至少一个压测进程,压测进程用于压力测试。

容易注意到的是,中心控制设备可对待侧设备上的压测进程进行统一管理,用户无需单独对每个待执行设备上的每个压测进程进行单独管理,从而实现了简便快速地在各待执行设备上同步压测进程的执行环境、压测进程的启停以及压测数据的汇总,简化了服务器压力测试的操作步骤,提高了服务器压力测试的效率。

由此可见,本申请所提供的方案可以解决现有的集群压测方法在对服务器进行压力测试时,操作复杂的技术问题。

需要说明的是,本发明提供的测试压力的系统在部署的过程中,中心控制设备、分发控制进程以及数据交互进程之间具有较强的通用性,待执行设备上部署分发控制进程以及数据交互进程之后,无须频繁更改。压测进程因压测项目不同与压测任务的迭代需求,压测进程的运行代码文件可能有修改需求,也可以通过中心控制设备与分发控制进程间的网络通信快速更新同步到各个待执行设备上。本发明提供的压测方案部署成本低,对不同压测项目适用性强。

根据本发明实施例,还提供了一种测试压力的方法实施例,需要说明的是,该方法可由上述测试压力的系统执行。其中,图3是根据本发明实施例的测试压力的方法流程图,如图3所示,该方法包括如下步骤:

步骤s302,接收中心控制设备发送的控制信息,控制信息至少包括:操作指令、压测进程的标识信息、待更新文件。

需要说明的是,步骤s302中的中心控制设备为上述测试压力的系统中的中心控制设备,其中,在中心控制设备为windows系统的设备时,可以通过pyqt库来实现ui交互界面,其中,ui交互界面的相关代码可通过py2exe打包成可执行应用程序并在中心控制设备中运行;在中心控制设备为linux系统的开发机时,可执行运行python代码启动中心控制设备中的进程,并采用cmd命令行作为交互界面,或者,在进程中部署http站点服务器,相关ui操作可通过前端浏览器访问web站点,在浏览器web前端页面里操作实现。在中心控制设备的部署完成之后,启动中心控制设备对应的进程,同时,中心控制设备中的第一网络服务器模块也启动,并监听中心控制设备的ip地址和配置的网络端口。

在一种可选的方案中,用户通过中心控制设备上的ui交互界面向各个待执行设备发送操作指令,其中,操作指令包括但不限于启动压测进程、控制压测进程执行压测任务、控制压测进程创建虚拟客户端、暂停压测进程、关闭压测进程、同步压测进程的文件、收集压测数据等。中心控制设备将操作指令发送至待执行设备,待执行设备接收到操作指令之后,控制对应的进程执行相关操作。

可选的,用户通过中心控制设备的ui交互界面输入需要操作的待执行设备和/或压测进程的标识信息,中心控制设备根据标识信息向与标识信息对应的待执行设备和/或压测进行发送操作指令。另外,在操作指令指示对压测进程的代码文件更新的情况下,控制信息中包括待更新文件,中心控制设备将待更新文件发送至对应的待测进程,并对待测进程的代码文件进行更新。

步骤s304,控制待执行设备上的至少一个压测进程执行操作指令,并生成压测数据,其中,待执行设备上部署有至少一个压测进程,压测进程用于压力测试。

在一种可选的方案中,在操作指令为设置虚拟客户端的数量的情况下,压测进程中的虚拟客户端管理模块判断当前运行的虚拟客户端数量与预设数量是否一致,如果一致,则虚拟客户端管理模块不执行任何操作;如果不一致,则进一步检测当前运行的虚拟客户端数量是否小于预设数量,如果小于预设数量,则计算两者的差值,并创建与差值对应数量的虚拟客户端,然后从中心控制设备中的数据管理对象中获取任务类对象,并创建新实例,设置新增加的虚拟客户端的压测任务逻辑,并控制新增加的虚拟客户端按照压测任务逻辑执行压测任务。如果当前运行的虚拟客户端数量不小于预设数量,则虚拟客户端管理模块计算两者的差值,并销毁与差值对应数量的虚拟客户端。

在另一种可选的方案中,在操作指令为设置当前运行的压测用例任务的情况下,虚拟客户端管理模块根据预设的测试任务用例名称,与当前设置的用例任务名称进行比较,如果两者一致,则不进行任何处理;如果两者不一致,则在数据管理对象中索引新的任务类对象,并为当前正在运行的虚拟客户端创建新的任务类实例,在为虚拟客户端设置新的任务类实例后,重新开始按照新的类实例逻辑执行压测任务。

还存在一种可选的方案,在操作指令为设置当前运行压测用例暂停/恢复的情况下,虚拟客户端管理模块根据设置暂停/恢复的标记,设置全局变量标记,每个虚拟客户端执行压测任务的过程中判断全局变量标记的当前值,并根据当前值来确定是否暂停正在执行的用例。例如,标记为0,表示暂停正在执行的用例;标记为1,表示恢复执行已暂停执行的用例。

步骤s306,发送压测数据至中心控制设备,以使中心控制设备展示压力测试结果。

需要说明的是,上述压力测试结果包括但不限于网络服务器的cpu占用率、内存占用率、io使用率、并发请求数量、协议响应时间等。

在一种可选的方案中,待执行设备对应的压测进程执行中心控制设备发送的操作指令之后,待执行设备获取各个压测进程执行操作命令的相关信息,并将相关更新信息通过网络发送给中心控制设备,中心控制设备在对应数据管理对象中更新相应压测进程的摘要信息。

在另一种可选的方案中,中心控制设备在确定待执行设备的网络连接之后,在分发控制管理模块中创建对应的数据管理对象,并保存所有待执行设备对应的分发控制进程的运行状态以及所有待执行设备上的压测数据。中心控制设备在接收到分发控制进程发送的压测数据之后,将压测数据保存在数据管理对象中,并通过用户交互模块进行展示。用户可查看包括对应分发控制进程所在的待执行设备上的当前启动的各个压测进程的进程列表,以及标记各个压测进程当前所执行压测任务的信息以及所创建的虚拟客户端的数量。

基于上述步骤s302至步骤s306所限定的方案,可以获知,采用中心控制设备对待执行设备上的压测进程进行管理的方式,在接收到中心控制设备发送的控制信息之后,控制待执行设备上的至少一个压测进程执行操作指令,并生成压测数据,然后将压测数据发送至中心控制设备,以使中心控制设备展示压测测试结果,其中,控制信息至少包括:操作指令、压测进程的标识信息、待更新文件,待执行设备上部署有至少一个压测进程,压测进程用于压力测试。

容易注意到的是,中心控制设备可对待侧设备上的压测进程进行统一管理,用户无需单独对每个待执行设备上的每个压测进程进行单独管理,从而实现了简便快速地在各待执行设备上同步压测进程的执行环境、压测进程的启停以及压测数据的汇总,简化了服务器压力测试的操作步骤,提高了服务器压力测试的效率。

由此可见,本申请所提供的方案可以解决现有的集群压测方法在对服务器进行压力测试时,操作复杂的技术问题。

在一种可选的方案中,在接收到中心控制设备发送的控制信息之后,待执行设备获取中心控制设备发送的至少一个压测进程的标识信息,并控制与标识信息对应的压测进程执行操作指令。

可选的,用户通过中心控制设备控制待执行设备a中的进程a暂停执行压测任务,则中心控制设备将待执行设备a的标识信息、进程a的标识信息发送至待执行设备a。待执行设备a在接收到控制信息之后,对控制信息进行解析,解析得到操作指令为暂停指令,压测进程的标识信息为进程a,则待执行设备控制进行a暂停执行压测任务。

可选的,在操作指令为更新指令的情况下,待执行设备获取中心控制设备发送的待更新文件以及与标识信息对应的压测进程的第一文件,然后基于待更新文件对第一文件进行更新,得到第二文件,并基于第二文件创建虚拟客户端,其中,虚拟客户端运行时生成压测数据。

在一种可选的方案中,用户通过中心控制设备的ui界面将压测进程的代码文件部署在中心控制设备的固定目录下。在中心控制设备启动后,中心控制设备的压测代码同步模块可固定目录设置为工作目录,并从压测进程对应的根目录文件下遍历所有文件,然后记录各个文件在压测进程的根目录文件下的相对路径和文件md5(messagedigestalgorithm,消息摘要算法第五版)码。当中心控制设备的固定目录下的文件(即待更新文件)有修改时,用户可通过ui界面控制压测代码同步模块对压测进程对应的根目录文件下的文件进行更新。

在一种可选的方案中,在分发控制进程与中心控制设备连接之后,分发控制进程将压测进程对应的根目录文件下的相对路径以及文件md5码进行序列化,并将序列化后的相对路径以及md5码通过网络发包发送至中心控制设备。中心控制设备将分发控制进程所在待执行设备中的压测进程的根目录文件下的相对路径信息保存在数据管理对象中,用户可通过中心控制设备的ui交互界面查询各个待执行设备中的压测进程所对应的根目录文件的相对路径信息。

可选的,用户通过ui交互界面,选择任意待执行设备以查看该待执行设备上压测进程对应的根目录文件下的文件与中心控制设备固定目录下的文件的对比差异。中心控制设备的压测代码同步模块可获取所有压测进程对应的根目录文件的相对路径和md5码进行比对计算来得到两者的对比差异,其中,相对路径用于对比文件是否新增或已删除,md5码用于比对同一个路径文件是否相同。最后,压测代码同步模块将各个文件的比对结果展示在ui交互界面上供用户查询。

进一步地,用户还可将中心控制设备的固定目录下的待更新文件更新至预设的待执行设备中。可选的,在待执行设备中尚未部署压测进程的情况下,中心控制设备的压测代码同步模块对中心控制设备的固定目录下的每个文件进行解析,并将每个文件相对于压测进程的根目录的相对路径以及文件内容进行二进制字节流序列化处理,得到网络发包,并将网络发包发送至对应的待执行设备的分发控制进程中。分发控制进程在接收到网络发包之后,在分发控制进程对应的待执行设备中对应压测进程的根目录下重建文件。

需要说明的是,如果用户选择了多个文件进行更新,则中心控制设备的压测代码同步模块只对所选中文件进行文件路径和二进制字节流序列化处理,并将网络包发送给分发控制进程进行本地重建。该方式可用于用户有特殊压测操作需要的情况下,对指定的待执行设备上压测进程的指定文件进行同步更新。

另外,用户还可选择自动同步方式,此时,中心控制设备的压测代码同步模块根据本地文件目录和待执行设备上根目录下各文件的对比情况,将所有存在差异文件进行网络发包,并将文件内容同步到对应的待执行设备上,以进行文件重建。其中,如果用户需要删除待执行设备上的文件,则压测代码同步模块发送的网络发包只附带文件路径和删除标记。

此外,还需要说明的是,待执行设备本地的代码文件重建之后,待执行设备发送当前最新的文件路径和md5码至中心控制设备,中心控制设备将最新的文件路径以及md5码存储在数据管理对象中。如果是对文件的删除操作,则在删除本地文件之后,待执行设备只发送已删除文件和删除成功标记至中心控制设备。

在一种可选的方案中,在获取中心控制设备发送的待更新文件之前,中心控制设备可对固定目录下的待更新文件进行更新。其中,中心控制设备可以对整个待更新文件进行更新,还可仅对差异部分进行更新。

具体的,待执行设备发送第一文件至中心控制设备,以使中心控制设备在检测到第一文件与待更新文件存在差异的情况下,发送待更新文件。或者,待执行设备发送第一文件至中心控制设备,以使中心控制设备在检测到第一文件与待更新文件存在差异的情况下,发送待更新文件中的差异部分。

需要说明的是,在待执行设备没有部署压测进程的代码文件目录或压测进程的代码目录已发生修改情况下,用户才对压测进程的代码目录的文件进行更新,如果待执行设备上已部署有压测进程的代码目录,并且代码目录下的文件均与中心控制设备的固定目录下的文件完全一致,则待执行设备不执行代码更新步骤。

可选的,用户通过中心控制设备的用户交互模块的ui交互界面来查看各个待执行设备上压测进程对应的目录下各个文件与中心控制设备的固定根目录下最新的代码文件版本(即待更新文件)的差异信息,其中,差异信息包括但不限于待执行设备上压测进程对应的目录下某文件或文件夹与中心控制设备的固定目录下的待更新文件相比,是否新增、是否已删除、是否修改等。

可选的,用户通过中心控制设备的用户交互模块的ui交互界面来对各个待执行设备下的全部代码文件进行全部更新,也可选择某个文件夹下所有文件对待执行设备中压测进程对应的目录下的文件进行更新,还可选择自动同步功能,此时,中心控制设备根据获取到的各个待执行设备上压测进程对应目录下文件与中心控制设备的本地文件目录下文件的差异列表,自动同步所有存在差异的文件,并自动覆盖待执行设备上对应文件。

需要说明的是,在待执行设备上已运行压测进程的情况下,用户无需重启压测进程即可实现对压测进程的代码文件的更新。具体的,在加载待更新文件的过程中,待测设备创建正在执行压测任务的虚拟客户端的类实例,以使虚拟客户端执行压测任务,并对第一文件进行更新。

在一种可选的方案中,用户通过中心控制设备的ui交互界面,修改中心控制设备固定目录下的压测进程对应的代码文件,得到待更新文件,并选择需要进行更新的压测进程。然后中心控制设备将待更新文件以及对应压测进程的标识信息通过网络发包的形式发送至对应的待执行设备上。待执行设备对应的分发控制进程在接收到网络发包之后,获取进行更新的压测进程的标识信息,并在压测进程管理模块中索引到与标识信息对应的压测进程,然后将网络发包发送至该压测进程。压测进程在接收到收到网络发包之后,压测进程对应的脚本虚拟机对当前压测进程对应的目录下各个脚本都执行重新加载,生成新的用例任务类声明对象,并更新保存进压测用例管理模块中。如果该压测进程存在正在执行压测任务的虚拟客户端,则压测用例管理模块重新为每一个虚拟客户端创建当前运行任务的类实例,并重新开始执行压测任务。

需要说明的是,本实施例中支持脚本代码文件的热更新操作,可以方便用户在执行压测任务过程中,根据压测需求,差异化地对压测进程当前执行的用例任务逻辑进行修改,丰富了压测行为。另外,在本实施例中,一个压测进程中有多个虚拟客户端同时执行压测任务,各个虚拟客户端的逻辑操作运行在同一个主逻辑线程中进行多路复用,不采用各虚拟客户端单独启用一个逻辑线程单独执行任务的方式,以避免启动过多线程占用系统资源,导致整体进程运行效率下降。

此外,还需要说明的是,本实施例中,同一个压测进程上创建的所有虚拟客户端的逻辑运行在同一个脚本逻辑的主线程上,主线程通过主循环定帧方式,每隔预设时间(例如,1秒)都为各个虚拟客户端分配一定的执行次数,以确保各个虚拟客户端都能分配到稳定的逻辑执行时间。

各个虚拟客户端在创建之后都分配了一个执行协程,该协程运行在同一个线程中的,各协程间的执行过程是串行执行,共享同一份内存数据,且不存在内存数据竞争访问的问题,各个协程之间可通过程序进行自主切换,其中,协程切换的触发条件包括但不限于i/o阻塞行为、sleep等逻辑等待行为、执行压测任务的过程中的阻塞行为。

可选的,i/o阻塞行为触发条件,是指虚拟客户端在进行压测任务过程中发生i/o阻塞的操作,主要出现在和被压测服务器进行网络操作行为时进行触发切换,其中,网络操作行为包括但不限于网络连接、收包、发包等底层网络的i/o读写行为。

sleep等逻辑等待行为触发条件,是指虚拟客户端在进行压测任务的过程中,根据压测逻辑操作间隔,虚拟客户端在逻辑中主动调用sleep操作时等待固定时间,当虚拟客户端进入等待时间时,协程触发切换。

执行压测任务的过程中的阻塞行为触发条件,是指虚拟客户端每次在执行过程中遇到阻塞行为时,压测进程的引擎底层会触发协程切换,将当前操作中的协程切换给其他虚拟客户端的协程运行,通过引擎的事件侦听机制捕获到阻塞行为结束时,让出协程的虚拟客户端等待其他虚拟客户端的协程发生让出时重新获取运行权,恢复原来协程的运行,整个压测过程中,压测逻辑主线程无阻塞。相比于线程方式,采用协程的方式可以提高并发效率,并且各个虚拟客户端的运行逻辑均在一个主线程下,涉及到互相访问数据的逻辑无需考虑多线程数据同步的问题,从而使得压测逻辑开发更简单。

在一种可选的方案中,每个虚拟客户端与一个协程相对应。其中,待执行设备以协程的方式执行压测任务。具体的,待执行设备控制每个虚拟客户端以协程的形式执行压测任务,并生成压测数据,在检测到阻塞异常的情况下,存储当前协程至等待列表中,并运行激活队列中的协程;在检测到阻塞异常结束的情况下,将等待列表中的协程存储至激活列表中。其中,每个虚拟客户端对应的协程设置于激活队列中。

可选的,虚拟客户端在创建成功之后,压测进程中的虚拟客户端管理模块为每个虚拟客户端分配一个执行协程,并将该协程放入激活队列中,虚拟客户端管理模块根据先进先出原则,控制队头协程先出队,确定每个虚拟客户端的执行权,并控制对应的虚拟客户端执行协程。在协程执行压测逻辑的过程中,如果出现了阻塞异常,则引擎底层触发协程切换,当前协程让出执行权,并进入休眠状态,虚拟客户端管理模块将当前协程放进等待列表中,并从激活队列的队头中取出协程出队,执行该协程。在等待列表中的协程,通过引擎底层检测到阻塞行为结束后,通知虚拟客户端管理模块,虚拟客户端管理模块将对应协程从等待列表中取出,放进激活列表中,等待获取执行权之后继续执行。让出执行权的协程重新获得执行权时,恢复让出执行权时的逻辑上下文,继续之前的执行逻辑。

需要说明的是,在上述过程中,判断阻塞行为结束的条件可以为但不限于网络收发包结束、达到sleep等待时间。另外,用户还可通过中心控制设备的ui交互界面实时查看各时段内所有待执行设备所汇总的压测数据,其中,压测数包括每个虚拟客户端的执行时间、执行成功状态、网络包流量大小、协议处理失败错误日志等。

在一种可选的方案中,在得到压测数据之后,待测设备对至少一个压测进程进行第一标记,得到目标压测进程,然后向目标压测进程发送收集指令,并接收目标压测进程返回的目标压测数据,并对目标压测进程进行第二标记,其中,至少一个压测进程根据时间戳对压测数据进行筛选,并进行统计得到目标压测数据。最后,发送目标压测数据至中心控制设备。其中,目标压测进程为需要收集压测数据的压测进程,收集指令至少包括时间戳。

可选的,各个待执行设备的压测进程上创建的所有虚拟客户端执行压测任务之后,虚拟客户端记录并追踪所有与被压测服务器相关的网络行为数据(即压测数据),并将网络行为数据以及采集网络行为数据对应的时间戳存储在压测进程中的压测数据统计模块的缓存列表中。在上述过程中,压测数据包括但不限于网络连接情况、协议收包、协议发包等。

进一步地,中心控制设备的压测数据汇总模块定期发送收集指令,并附上当前收集时的时间戳。然后,在中心控制设备与各个待执行设备的分发控制进程网络连接之后,将收集指令广播至各个分发控制进程。分发控制进程在接收到收集指令之后,由压测数据汇总模块记录相关的收集状态,然后将收集状态发送给该当前分发控制进程对应的压测进程,并进行第一标记,得到目标压测数据。其中,第一标记表明正在收集压测数据。压测进程在接收到收集指令之后,根据时间戳,将压测数据统计模块当前缓存的所有时间戳小于收集指令中的时间戳的压测数据进行汇总,统计计算出网络性能统计参数,其中,网络性能统计参数至少包括总的网络行为访问持续时间、总的网络流量大小、总的网络协议处理成功数量、总的网络协议处理失败数量、各错误日志类型的内容种类和对应总的出现次数,以及分网络协议统计各协议访问总数量。对网络性能统计参数进行序列化,并将序列化后的网络性能统计参数发送至中心控制设备,并在压测数据统计模块中清理掉时间戳小于收集指令中的时间戳的压测数据。

更进一步地,分发控制进程在接收到压测进程发送的压测数据之后,将压测数据保存在数据中转模块的数据统计缓存中,并标记该压测节点已收集完成(即进行第二标记),待所有进行第一标记的压测节点的压测数据全部收集完成之后,数据中转模块对各个压测进程发送的压测数据再次进行汇总,计算出网络性能统计参数,并对网络性能统计参数进行序列化,最后将序列化的网络性能统计参数发送至中心控制设备。中心控制设备在接收到所有分发控制进程发送的压测数据后,中心控制设备的压测数据汇总模块根据压测数据计算出预设时间内总的网络协议访问数量、总的访问成功数量、总的访问失败数量、分协议统计总的访问数量、总的访问成功数量、总的访问失败数量、收集时间段内平均每秒访问数量、平均访问成功数量、平均访问失败数量等,并汇总成列表展示在ui交互界面上。

需要说明的是,在本实施例中,每个待执行设备上部署的分发控制进程在与中心控制设备连接之后,可以分配到中心控制设备中唯一的索引分发键值,每个分发控制进程本地启动的压测进程在与分发控制进程连接之后,也将分配到一个本地分发控制进程内唯一的索引进程键值,每个压测进程中创建的每个虚拟客户端也会在本地压测进程里分配唯一的索引虚拟客户端键值,通过分发键值、进程键值和虚拟客户端键值,可以通过组合的形式为整个集群下各虚拟客户端分配一个全局唯一的索引标识。

本实施例中同一压测进程内的虚拟客户端在进行压测时,如果虚拟客户端之间需要互相访问压测信息,则可直接在同一个压测进程下访问对方的内存数据,也可通过读写全局变量等方式互相共享数据。如果分布在不同压测进程上的虚拟客户端需要互相访问对方的压测数据,或者,分布在不同待执行设备上的两个虚拟客户端需要访问对象的压测数据,此时,可通过数据交互进程来实现各个虚拟客户端之间的无障碍访问数据。

需要说明的是,数据交互进程为单独部署在独立设备上的数据缓存系统,该设备的系统可以是windows、linux、mac等系统环境,该设备可提供固定的ip端口以供外部通过网络连接进行读写访问。数据交互进程的核心存储系统可以采用当前主流的key-value型高速内存存储系统,例如,redis、memcache。数据交互进程内部的存储系统可根据使用需求采用集群或单一存储节点的方式进行部署,对外访问提供统一的网络访问方式。

可选的,本实施例中采用redis作为数据交互进程的存储系统,redis具有存储速度快的优点,redis的数据以key-value哈希表方式保存,索引方便,而且支持数据类型丰富,存储系统支持集群扩展。本实施例中,执行压测任务过程中,各个运行中的虚拟客户端可根据压测行为逻辑通过网络访问接口,实时向数据交互进程上传自身的数据或查询相关数据,并以自身全局唯一索引作为存储的键值,并作为其他虚拟客户端访问自身数据的索引标识。在数据交互进程中,也约定一些固定键值的公共存储数据,支持各虚拟客户端共同读写访问,等价于全局变量数据。

另外,数据交互进程支持任意两个虚拟客户端在执行用例过程中的数据交互,对搭建多用户操作结合的压测情景测试任务起到很好支持作用,例如,压测好友间互相操作、网络游戏中双方建立房间对战等需要用户相互配合才能实现的压测行为。

根据本发明实施例,还提供了一种测试压力的装置实施例,其中,图4是根据本发明实施例的测试压力的装置结构示意图,如图4所示,该装置包括:接收模块401、生成模块403以及发送模块405。

其中,接收模块401,用于接收中心控制设备发送的控制信息,控制信息至少包括:操作指令、压测进程的标识信息、本地代码文件;生成模块403,用于控制待执行设备上的至少一个压测进程执行操作指令,并生成压测数据,其中,待执行设备上部署有至少一个压测进程,压测进程用于压力测试;发送模块405,用于发送压测数据至中心控制设备,以使中心控制设备展示压力测试结果。

此处需要说明的是,上述接收模块401、生成模块403以及发送模块405对应于上述实施例的步骤s302至步骤s306,三个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例所公开的内容。

在一种可选的方案中,生成模块包括:第一获取模块以及第一控制模块。其中,第一获取模块,用于获取中心控制设备发送的至少一个压测进程的标识信息;第一控制模块,用于控制与标识信息对应的压测进程执行操作指令。

在一种可选的方案中,第一控制模块包括:第二获取模块、第三获取模块、第一更新模块以及第一创建模块。其中,第二获取模块,用于获取中心控制设备发送的待更新文件;第三获取模块,用于获取与标识信息对应的压测进程的第一文件;第一更新模块,用于基于待更新文件对第一文件进行更新,得到第二文件;第一创建模块,用于基于第二文件创建虚拟客户端,其中,虚拟客户端运行时生成压测数据。

在一种可选的方案中,测试压力的装置还包括:第一发送模块。其中,第一发送模块,用于发送第一文件至中心控制设备,以使中心控制设备在检测到第一文件与待更新文件存在差异的情况下,发送待更新文件。

在一种可选的方案中,测试压力的装置还包括:第二发送模块。其中,第二发送模块,用于发送第一文件至中心控制设备,以使中心控制设备在检测到第一文件与待更新文件存在差异的情况下,发送待更新文件中的差异部分。

在一种可选的方案中,第一更新模块包括:第二创建模块。其中,第二创建模块,用于在加载待更新文件的过程中,创建正在执行压测任务的虚拟客户端的类实例,以使虚拟客户端执行压测任务,并对第一文件进行更新。

在一种可选的方案中,每个虚拟客户端与一个协程相对应,其中,第一创建模块包括:第二控制模块。其中,第二控制模块,用于控制每个虚拟客户端以协程的形式执行压测任务,并生成压测数据,其中,每个虚拟客户端对应的协程设置于激活队列中;其中,在检测到阻塞异常的情况下,存储当前协程至等待列表中,并运行激活队列中的协程;在检测到阻塞异常结束的情况下,将等待列表中的协程存储至激活列表中。

在一种可选的方案中,发送模块包括:处理模块、第三发送模块、第一接收模块以及第四发送模块。其中,处理模块,用于对至少一个压测进程进行第一标记,得到目标压测进程,其中,目标压测进程为需要收集压测数据的压测进程;第三发送模块,用于向目标压测进程发送收集指令,其中,收集指令至少包括时间戳;第一接收模块,用于接收目标压测进程返回的目标压测数据,并对目标压测进程进行第二标记,其中,至少一个压测进程根据时间戳对压测数据进行筛选,并进行统计得到目标压测数据;第四发送模块,用于发送目标压测数据至中心控制设备。

根据本发明实施例的另一方面,还提供了一种存储介质,该存储介质包括存储的程序,其中,在程序运行时控制存储介质所在设备执行上述测试压力的方法。

根据本发明实施例的另一方面,还提供了一种处理器,该处理器用于运行程序,其中,程序运行时执行上述测试压力的方法。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1