一种基于镜像流量的压测方法、装置、存储介质和设备与流程

文档序号:26442769发布日期:2021-08-27 13:42阅读:69来源:国知局
一种基于镜像流量的压测方法、装置、存储介质和设备与流程

本申请涉及软件测试领域,尤其涉及一种基于镜像流量的压测方法、装置、存储介质和设备。



背景技术:

目前常用的压测(压测具体是指:向测试环境发送请求数据,用以观察测试环境的负载能力)工具,例如jmeter、以及tsung等,均是使用人工配置的url和参数对测试环境进行压测,其产生的请求与生产环境的实际流量(在本技术领域内,请求数据都称之为访问流量,即简称为流量)存在一定的差异,致使测试环境的压测结果与实际生产环境的性能存在偏差。

为此,如何提高压测结果的准确性,保证压测结果与生产环境相符合,成为本领域亟需解决的问题。



技术实现要素:

本申请提供了一种基于镜像流量的压测方法、装置、存储介质和设备,目的在于提高压测结果的准确性,保证压测结果与生产环境相符合。

为了实现上述目的,本申请提供了以下技术方案:

一种基于镜像流量的压测方法,包括:

在接收到测试指令的情况下,对预设端口内的http协议的请求数据进行镜像,得到镜像流量;

将所述镜像流量写入预设的流量仓库中;

触发预设控制进程按照预设速率从所述流量仓库中读取所述镜像流量,并将读取得到的所述镜像流量写入预设的消息队列中;

将y个预先部署的流量拷贝进程作为所述消息队列的消费者,触发y个所述流量拷贝进程并行从所述消息队列中读取x个所述镜像流量,并将读取得到的所述镜像流量发送至测试环境中;其中,y和x均为正整数。

可选的,还包括:

实时检测所述流量仓库中所述镜像流量的存放时间;

在检测到所述存放时间大于预设时长的情况下,将所述镜像流量从所述流量仓库中剔除。

可选的,所述触发y个所述流量拷贝进程并行从所述消息队列中读取x个所述镜像流量,并将读取得到的所述镜像流量发送至测试环境中,包括:

预先触发一个所述流量拷贝进程从所述消息队列中读取x个所述镜像流量,并将读取得到的所述镜像流量发送至测试环境中;

按照预设时间间隔,调整所述流量拷贝进程的触发数量,使得所述流量拷贝进程的触发数量由一个逐渐增加至y个。

可选的,还包括:

预先部署多层代理服务;

控制所述代理服务对所述镜像流量中所包含的目标流量进行过滤;其中,所述目标流量包括会对所述测试环境的线上数据造成影响的请求数据。

一种基于镜像流量的压测装置,包括:

镜像单元,用于在接收到测试指令的情况下,对预设端口内的http协议的请求数据进行镜像,得到镜像流量;

写入单元,用于将所述镜像流量写入预设的流量仓库中;

第一触发单元,用于触发预设控制进程按照预设速率从所述流量仓库中读取所述镜像流量,并将读取得到的所述镜像流量写入预设的消息队列中;

第二触发单元,用于将y个预先部署的流量拷贝进程作为所述消息队列的消费者,触发y个所述流量拷贝进程并行从所述消息队列中读取x个所述镜像流量,并将读取得到的所述镜像流量发送至测试环境中;其中,y和x均为正整数。

可选的,还包括:

检测单元,用于实时检测所述流量仓库中所述镜像流量的存放时间;

所述检测单元,还用于在检测到所述存放时间大于预设时长的情况下,将所述镜像流量从所述流量仓库中剔除。

可选的,所述第二触发单元用于:

预先触发一个所述流量拷贝进程从所述消息队列中读取x个所述镜像流量,并将读取得到的所述镜像流量发送至测试环境中;

按照预设时间间隔,调整所述流量拷贝进程的触发数量,使得所述流量拷贝进程的触发数量由一个逐渐增加至y个。

可选的,还包括:

过滤单元,用于预先部署多层代理服务;

所述过滤单元,还用于控制所述代理服务对所述镜像流量中所包含的目标流量进行过滤;其中,所述目标流量包括会对所述测试环境的线上数据造成影响的请求数据。

一种计算机可读存储介质,所述计算机可读存储介质包括存储的程序,其中,所述程序执行所述的基于镜像流量的压测方法。

一种基于镜像流量的压测设备,包括:处理器、存储器和总线;所述处理器与所述存储器通过所述总线连接;

所述存储器用于存储程序,所述处理器用于运行程序,其中,所述程序运行时执行所述的基于镜像流量的压测方法。

本申请提供的技术方案,在接收到测试指令的情况下,对预设端口内的http协议的请求数据进行镜像,得到镜像流量。将镜像流量写入预设的流量仓库中,触发预设控制进程按照预设速率从流量仓库中读取镜像流量,并将读取得到的镜像流量写入预设的消息队列中。将y个预先部署的流量拷贝进程作为消息队列的消费者,触发y个流量拷贝进程并行从消息队列中读取x个镜像流量,并将读取得到的镜像流量发送至测试环境中,其中,y和x均为正整数。对预设端口内的http协议的请求数据进行镜像,得到镜像流量,实现通过镜像的方式将生产环境流量复制到测试环境使用,不会对生产环境的实际请求产生任何影响。此外,通过调整流量拷贝进程的触发数量,实现对测试环境的阶梯式压测,来评估测试环境的系统性能,其所得到的评估结果更贴近真实的生产环境。可见,利用本申请所述的方案,能够显著提高压测结果的准确性,保证压测结果与生产环境相符合。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为申请实施例提供的一种基于镜像流量的压测方法的示意图;

图2为申请实施例提供的另一种基于镜像流量的压测方法的示意图;

图3为申请实施例提供的一种基于镜像流量的压测装置的架构示意图。

具体实施方式

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

如图1所示,为本申请实施例提供的一种基于镜像流量的压测方法的示意图,包括如下步骤:

s101:在生产环境的服务器上,预先部署流量拷贝进程。

其中,所谓的流量拷贝进程,既可用于抓取生产环境流量,并可以将流量发送给测试环境的工具,为本领域技术人员所熟悉的公知常识。在本申请实施例中,流量拷贝进程可以为goreplay。

s102:在接收到测试指令的情况下,对预设端口内的http协议的请求数据进行镜像,得到镜像流量。

其中,生产环境对用户提供服务一般通过http协议进行数据交互,http协议需要监听固定端口,提供用户访问,具体的,以标准http服务监听80端口为例,用户通过浏览器等方式访问服务器,就是向服务器的80端口发起http请求,服务器获取到用户请求并处理完成后,再以http协议将响应数据发送给用户。

在本申请实施例中,所谓的镜像,也可以称之为复制,属于本领域技术人员所熟悉的公知常识,即对生产环境的真实用户产生的请求数据进行复制,得到请求数据的副本。所谓的镜像流量,即请求数据的副本。

具体的,http协议的请求数据包括但不限于为:request_url、request_method、以及request_header等数据,request_header中又包含有host、cookie、user-agent、remote-ip等标准http协议中的数据。

需要说明的是,除了接收用户(即测试人员)下发的测试指令之外,还可以接收预设进程定时下发的测试指令。所谓的预设进程,包括但不限为crontab管理进程(即现有的定时任务调度管理工具)。

s103:将镜像流量写入预设的流量仓库中,并实时检测流量仓库中镜像流量的存放时间。

其中,流量仓库中每个镜像流量的存放时间,均用于指示镜像流量在流量仓库中所存放的时间。

s104:在检测到镜像流量的存放时间大于预设时长的情况下,将镜像流量从流量仓库中剔除。

其中,针对流量仓库中的每个镜像流量,在检测到镜像流量的存放时间大于预设时长的情况下,将镜像流量从流量仓库中剔除,可以保证流量仓库中所存放的镜像流量均为最新的流量。

s105:触发预设控制进程按照预设速率从流量仓库中读取镜像流量,并将读取得到的镜像流量写入预设的消息队列中。

其中,预设控制进程,用于控制压测速度,可以理解为:控制从流量仓库中读取镜像流量的速率。具体的,假设压测需求是每秒产生最高1000个请求,但需要分10次递增,即将预设的压测时间周期分10个阶段,从每秒读取100个镜像流量开始,每次可递增100个镜像流量,当前流量仓库中有100万个镜像流量(即100万个请求数据),故触发预设控制进程按照每秒读取100个镜像流量的速率从流量仓库中读取镜像流量,并将读取得到的镜像流量写入预设的消息队列中。

需要说明的是,预设控制进程是采用ratelimit令牌桶的方式,控制从流量仓库中读取镜像流量的速率。此外,本申请实施例所述的消息队列,包括但不限于为kafka队列。

s106:将y个流量拷贝进程作为消息队列的消费者,触发y个流量拷贝进程并行从消息队列中读取x个镜像流量,并将读取得到的镜像流量发送至测试环境中。

其中,x和y均为正整数,每个流量拷贝进程从消息队列中读取的镜像流量的数量可以是相同,x的具体取值可由技术人员根据实际的压测需求进行设置,此外,y的具体取值也可以由技术人员根据实际的压测需求进行设置。y个流量拷贝进程并行将读取得到的镜像流量发送至测试环境中,则测试环境将会得到x×y个镜像流量。

需要说明的是,上述s105提及的“触发预设控制进程按照预设速率从流量仓库中读取镜像流量,并将读取得到的镜像流量写入预设的消息队列中”,以及s106提及的“将y个流量拷贝进程作为消息队列的消费者,触发y个流量拷贝进程并行从消息队列中读取x个镜像流量,并将读取得到的镜像流量发送至测试环境中”,两个过程为相互独立的,具体的,可以将预设控制进程作为生产者,将流量拷贝进程作为消费者,构建生产者消费者模式(生产者消费者模式的具体实现原理,为本领域技术人员所熟悉的公知常识,这里不再赘述)。

需要强调的是,由于流量拷贝进程的触发数量可控、且每个流量拷贝进程所读取的镜像流量的数量可控,因此,利用本实施例所述方法,不仅能够实现精准的流量控制,并且通过调整流量拷贝进程的触发数量,还能够实现对测试环境的阶梯式压测。

可选的,预先触发一个流量拷贝进程从消息队列中读取x个镜像流量,并将读取得到的镜像流量发送至测试环境中,而后按照预设时间间隔,调整流量拷贝进程的触发数量,使得流量拷贝进程的触发数量由一个逐渐增加至y个。

s107:检测测试环境的负载能力。

其中,检测测试环境的负载能力的具体实现方式,为本领域技术人员所熟悉的公知常识,这里不再赘述。

在本申请实施例中,对生产环境镜像产生的流量(即镜像流量),其接口分布比例、入参、请求header等各类指标与生产环境完全一致,用这种数据进行压测,更贴合生产环境实际情况,结果准确性更高。通过镜像的方式,将生产环境流量复制到测试环境使用,不会对生产环境的实际请求产生任何影响。除此之外,通过调整流量拷贝进程的触发数量,实现对测试环境的阶梯式压测,来评估测试环境的系统性能,其所得到的评估结果更贴近真实的生产环境。

可选的,为了便于调整压测的参数(例如、镜像流量的初始化数量、镜像流量的放大倍数、压测所耗费的时间),还可以使用开源的kubernetes工具,将上述s105和s106进行容器化处理,从而满足压测的自动化测试需求。

可选的,为了避免镜像流量对测试环境的线上数据造成影响,还可以预先部署多层代理服务,控制代理服务对镜像流量中所包含的目标流量进行过滤,目标流量包括会对测试环境的线上数据造成影响的请求数据。

综上所述,对预设端口内的http协议的请求数据进行镜像,得到镜像流量,实现通过镜像的方式将生产环境流量复制到测试环境使用,不会对生产环境的实际请求产生任何影响。此外,通过调整流量拷贝进程的触发数量,实现对测试环境的阶梯式压测,来评估测试环境的系统性能,其所得到的评估结果更贴近真实的生产环境。可见,利用本实施例所述的方案,能够显著提高压测结果的准确性,保证压测结果与生产环境相符合。

需要说明的是,上述实施例提及的s101,为本申请所述基于镜像流量的压测方法的一种可选的具体实现方式。此外,上述实施例提及的s104,也为本申请所述基于镜像流量的压测方法的一种可选的具体实现方式。为此,上述实施例提及的流程,可以概括为图2所示的方法。

如图2所示,为本申请实施例提供的另一种基于镜像流量的压测方法的示意图,包括如下步骤:

s201:在接收到测试指令的情况下,对预设端口内的http协议的请求数据进行镜像,得到镜像流量。

s202:将镜像流量写入预设的流量仓库中。

s203:触发预设控制进程按照预设速率从流量仓库中读取镜像流量,并将读取得到的镜像流量写入预设的消息队列中。

s204:将y个预先部署的流量拷贝进程作为消息队列的消费者,触发y个流量拷贝进程并行从消息队列中读取x个镜像流量,并将读取得到的镜像流量发送至测试环境中。

其中,y和x均为正整数。

综上所述,对预设端口内的http协议的请求数据进行镜像,得到镜像流量,实现通过镜像的方式将生产环境流量复制到测试环境使用,不会对生产环境的实际请求产生任何影响。此外,通过调整流量拷贝进程的触发数量,实现对测试环境的阶梯式压测,来评估测试环境的系统性能,其所得到的评估结果更贴近真实的生产环境。可见,利用本实施例所述的方案,能够显著提高压测结果的准确性,保证压测结果与生产环境相符合。

与上述本申请实施例提供的基于镜像流量的压测方法相对应,本申请实施例还提供了一种基于镜像流量的压测装置。

如图3所示,为本申请实施例提供的一种基于镜像流量的压测装置的架构示意图,包括:

镜像单元100,用于在接收到测试指令的情况下,对预设端口内的http协议的请求数据进行镜像,得到镜像流量。

写入单元200,用于将镜像流量写入预设的流量仓库中。

检测单元300,用于实时检测流量仓库中镜像流量的存放时间。

其中,检测单元300还用于在检测到存放时间大于预设时长的情况下,将镜像流量从流量仓库中剔除。

第一触发单元400,用于触发预设控制进程按照预设速率从流量仓库中读取镜像流量,并将读取得到的镜像流量写入预设的消息队列中。

第二触发单元500,用于将y个预先部署的流量拷贝进程作为消息队列的消费者,触发y个流量拷贝进程并行从消息队列中读取x个镜像流量,并将读取得到的镜像流量发送至测试环境中,其中,y和x均为正整数。

其中,第二触发单元500具体用于:预先触发一个流量拷贝进程从消息队列中读取x个镜像流量,并将读取得到的镜像流量发送至测试环境中;按照预设时间间隔,调整流量拷贝进程的触发数量,使得流量拷贝进程的触发数量由一个逐渐增加至y个。

过滤单元600,用于预先部署多层代理服务。

其中,过滤单元600还用于控制代理服务对镜像流量中所包含的目标流量进行过滤,其中,目标流量包括会对测试环境的线上数据造成影响的请求数据。

综上所述,对预设端口内的http协议的请求数据进行镜像,得到镜像流量,实现通过镜像的方式将生产环境流量复制到测试环境使用,不会对生产环境的实际请求产生任何影响。此外,通过调整流量拷贝进程的触发数量,实现对测试环境的阶梯式压测,来评估测试环境的系统性能,其所得到的评估结果更贴近真实的生产环境。可见,利用本实施例所述的方案,能够显著提高压测结果的准确性,保证压测结果与生产环境相符合。

本申请还提供了一种计算机可读存储介质,计算机可读存储介质包括存储的程序,其中,程序执行上述本申请提供的基于镜像流量的压测方法。

本申请还提供了一种基于镜像流量的压测设备,包括:处理器、存储器和总线。处理器与存储器通过总线连接,存储器用于存储程序,处理器用于运行程序,其中,程序运行时执行上述本申请提供的基于镜像流量的压测方法,包括如下步骤:

在接收到测试指令的情况下,对预设端口内的http协议的请求数据进行镜像,得到镜像流量;

将所述镜像流量写入预设的流量仓库中;

触发预设控制进程按照预设速率从所述流量仓库中读取所述镜像流量,并将读取得到的所述镜像流量写入预设的消息队列中;

将y个预先部署的流量拷贝进程作为所述消息队列的消费者,触发y个所述流量拷贝进程并行从所述消息队列中读取x个所述镜像流量,并将读取得到的所述镜像流量发送至测试环境中;其中,y和x均为正整数。

可选的,还包括:

实时检测所述流量仓库中所述镜像流量的存放时间;

在检测到所述存放时间大于预设时长的情况下,将所述镜像流量从所述流量仓库中剔除。

可选的,所述触发y个所述流量拷贝进程并行从所述消息队列中读取x个所述镜像流量,并将读取得到的所述镜像流量发送至测试环境中,包括:

预先触发一个所述流量拷贝进程从所述消息队列中读取x个所述镜像流量,并将读取得到的所述镜像流量发送至测试环境中;

按照预设时间间隔,调整所述流量拷贝进程的触发数量,使得所述流量拷贝进程的触发数量由一个逐渐增加至y个。

可选的,还包括:

预先部署多层代理服务;

控制所述代理服务对所述镜像流量中所包含的目标流量进行过滤;其中,所述目标流量包括会对所述测试环境的线上数据造成影响的请求数据。

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

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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