一种模拟线上压力测试的方法和装置与流程

文档序号:11199109
一种模拟线上压力测试的方法和装置与流程

本申请涉及信息技术领域,特别是涉及一种模拟线上压力测试的方法和一种模拟线上压力测试的装置。



背景技术:

压力测试是指对被测系统不断施加压力的测试,是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统所能提供的最大服务级别的测试。例如,测试一个Web站点在大量的访问请求下,系统的响应何时会退化或失败。通常,压力测试都是通过模拟线上压力来进行的。

压力测试工具的原理是:客户端通过多线程或多进程模拟虚拟用户访问,对服务器端施加压力,然后在过程中监控和收集性能数据。目前,一般采用压力器来实现。压力器的压力产生模块可以根据脚本内容产生实际的负载,也就是根据用户的设置,进行自我复制来生成多个客户端向服务器发送请求。

传统的模拟线上压力的方法是由压力器的压力产生模块创建多个线程,在测试中,每个线程都按照极限压力来进行测试。极限压力的意思是,每个线程在发起一次访问请求后,又立即发起一次新的访问请求,或者只是通过简单的暂停一段时间来减少压力的产生。但是,传统的方法存在如下缺陷:

1)通过压力器创建多个线程,从而产生的压力的次数和频率无法和线上真实压力的次数和频率一致,使得压力测试不能获得理想的结果。

2)通过压力器产生的压力,受软硬件环境影响较大,不同类型或者不同型号的压力器产生的压力差异较大。

3)压力器创建的多个线程相互之间是独立的,每个独立的线程之间没有任何关联,无法按照测试的实际需求去统一地对压力的大小进行控制。



技术实现要素:

鉴于上述问题,提出了本申请实施例以便提供一种克服上述问题或者至 少部分地解决上述问题的一种模拟线上压力测试的方法和相应的一种模拟线上压力测试的装置。

为了解决上述问题,本申请公开了一种模拟线上压力测试的方法,包括:

获得单位时间内产生的请求总次数;

将所述单位时间划分为多个时间片;

根据所述请求总次数,分别确定与所述多个时间片对应的请求次数,并按照所述请求次数执行相应时间片的请求。

可选地,所述根据所述请求总次数,分别确定与所述多个时间片对应的请求次数,并按照所述请求次数执行相应时间片的请求的步骤包括:

遍历所述多个时间片;

采用所述请求总次数确定与所述多个时间片对应的请求次数。

在执行当前时间片时,将所述请求次数添加到任务队列;

调用预设的测试线程,从所述任务队列中读取当前请求次数后,发起相应次数的请求。

可选地,所述调用预设的测试线程,从所述任务队列中读取当前请求次数后,发起相应次数的请求的步骤包括:

调用预设的测试线程,判断所述任务队列中的当前请求次数是否为零;

若否,则采用所述预设的测试线程,从所述任务队列中读取当前请求次数后,发起相应的请求,并对所述当前请求次数递减;

若是,则返回所述判断所述任务队列中的当前请求次数是否为零的子步骤。

可选地,所述获得单位时间内产生的请求总次数的步骤包括:

从设备的访问日志中抽样提取单位时间内产生的请求总次数。

可选地,所述将所述单位时间划分为多个时间片的步骤包括:

将所述单位时间平均划分为多个时间片。

为了解决上述问题,本申请还公开了一种模拟线上压力测试的装置,包 括:

获得模块,用于获得单位时间内产生的请求总次数;

划分模块,用于将所述单位时间划分为多个时间片;

执行模块,用于根据所述请求总次数,分别确定与所述多个时间片对应的请求次数,并按照所述请求次数执行相应时间片的请求。

可选地,所述执行模块包括:

遍历子模块,用于遍历所述多个时间片;

确定子模块,用于采用所述请求总次数确定与所述多个时间片对应的请求次数。

添加子模块,用于在执行当前时间片时,将所述请求次数添加到任务队列;

执行子模块,用于调用预设的测试线程,从所述任务队列中读取当前请求次数后,发起相应次数的请求。

可选地,所述执行子模块包括:

判断单元,用于调用预设的测试线程,判断所述任务队列中的当前请求次数是否为零;

执行单元,用于在判断所述任务队列中的当前请求次数不为零时,采用所述预设的测试线程,从所述任务队列中读取当前请求次数后,发起相应的请求,并对所述当前请求次数递减;

返回单元,用于在判断所述任务队列中的当前请求次数为零时,返回所述判断单元。

可选地,所述获得模块包括:

获得子模块,用于从设备的访问日志中抽样提取单位时间内产生的请求总次数。

可选地,所述划分模块包括:

划分子模块,用于将所述单位时间平均划分为多个时间片。

与背景技术相比,本申请实施例包括以下优点:

本申请实施例,通过将单位时间划分为多个时间片,并根据在所述单位时间内获得的请求总次数,分别确定出与每个时间片对应的请求次数,并按照所述请求次数执行相应时间片的请求,能够保证在模拟线上压力测试时产生的请求次数线上真实的请求次数保持一致;同时,采用根据请求总次数确定每个时间片的请求次数的方式,也使得在模拟线上压力测试时产生的压力是可控的。

其次,由于本申请实施例中的任务队列被设计为int类型的值,对内存的消耗极低,不会因为请求次数的增多而增大对内存的要求,而且,通过在发起相应的访问请求时,仅仅是对任务队列中的当前请求次数递减,进一步使得对测试线程的调度高效和简便。

附图说明

图1是本申请的一种模拟线上压力测试的方法实施例一的步骤流程图;

图2是本申请的一种模拟线上压力测试的方法实施例二的步骤流程图;

图3是本申请的一种模拟线上压力测试的装置实施例的结构框图。

具体实施方式

为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。

参照图1,示出了本申请的一种模拟线上压力测试的方法实施例一的步骤流程图,具体可以包括如下步骤:

步骤101,获得单位时间内产生的请求总次数;

在本申请实施例中,为了尽可能地保证压力测试中产生的压力与线上真实的压力相一致,可以通过抽样获得单位时间内系统所接收到的压力的大小情况,即单位时间内产生的请求总次数,从而获得在模拟线上压力测试时,每个时间段应该产生的请求总次数。

单位时间可以是根据抽样的需要所设定的一段时间,例如,可以是1s,5s,10s或者60s等等。本领域技术人员可以根据系统在线上被请求的实际 情况设定单位时间的长短,本申请对此不作具体限定。

在本申请的一种优选实施例中,所述获得单位时间内产生的请求总次数的步骤可以包括如下子步骤:

子步骤1011,从设备的访问日志中抽样提取单位时间内产生的请求总次数。

通常,设备的访问日志可以实时地记录下系统所接收到的请求,在具体实现中,可以通过抽样提取设备访问日志中的信息,获得单位时间内产生的请求总次数,例如,系统在1s内所接收到的请求总次数为10000次。

步骤102,将所述单位时间划分为多个时间片;

在本申请实施例中,为了更准确地对模拟线上压力测试时产生的压力进行控制,可以将单位时间划分为更小的时间片。

在具体实现中,可以将所述单位时间平均划分为多个时间片,例如,将单位时间1s平均划分为100个长度为10ms的时间片,或者将单位时间1s平均划分为1000个长度为1ms的时间片。本领域技术人员可以根据抽样所选择的单位时间的具体长度,确定每个时间片的长度,本申请对此不作具体限定。

步骤103,根据所述请求总次数,分别确定与所述多个时间片对应的请求次数,并按照所述请求次数执行相应时间片的请求。

在本申请实施例中,在确定与所述多个时间片对应的请求次数时,可以按照平均分配的方式,即将在步骤101中获得的请求总次数,平均分配给每个时间片。例如,对于系统在1s内所接收到的请求总次数为10000次,若按照步骤102中的方式,将单位时间1s平均划分成了100个长度为10ms的时间片,则可以确定每个时间片被分配的请求次数为10000/100=100次。

当然,本领域技术人员还可以按照随机分配的方式,确定出与所述多个时间对应的请求次数,本申请对此不作具体限定。但需要注意的是,无论按照何种方式确定每个时间片的请求次数,都应该保证多个时间片的请求次数之和与单位时间获得的请求总次数相同。

进而,在模拟线上压力测试时,可以调用测试线程,按照所述请求次数 执行相应时间片的请求。

在具体实现中,在对每个单位时间重放压力的时,测试线程可以按照当前时间片的请求次数,对系统发起相应次数请求。

在本申请的一种优选实施例中,所述根据所述请求总次数,分别确定与所述多个时间片对应的请求次数,并按照所述请求次数执行相应时间片的请求的步骤具体可以包括如下子步骤:

子步骤1031,遍历所述多个时间片;

子步骤1032,采用所述请求总次数确定与所述多个时间片对应的请求次数。

子步骤1033,在执行当前时间片时,将所述请求次数添加到任务队列;

子步骤1034,调用预设的测试线程,从所述任务队列中读取当前请求次数后,发起相应次数的请求。

在具体实现中,可以遍历所述多个时间片,按照时间片的先后顺序,分别确定出每个时间片对应的请求次数,然后在执行当前时间片时,将当前时间片对应的请求次数添加到任务队列,调用预设的测试线程,从所述任务队列中读取当前请求次数后,发起相应次数的请求。

在具体实现中,可以在执行时间片1时,将时间片1对应的请求次数添加到任务队列,例如10次,然后调用测试线程,从任务队列中读取当前请求次数10次,并对系统发起10次访问请求;然后按照时间先后顺序,执行时间片2,将时间片2对应的请求次数添加到任务队列,例如8次,调用测试线程,从任务队列中读取当前请求次数8次,并对系统发起8次访问请求;当全部时间片均被执行完后,结束所述测试。

在本申请实施例中,通过将单位时间划分为多个时间片,并根据在所述单位时间内获得的请求总次数,分别确定出与每个时间片对应的请求次数,并按照所述请求次数执行相应时间片的请求,能够保证在模拟线上压力测试时产生的请求次数线上真实的请求次数保持一致;同时,采用根据请求总次数确定每个时间片的请求次数的方式,也使得在模拟线上压力测试时产生的压力是可控。

参照图2,示出了本申请的一种模拟线上压力测试的方法实施例二的步骤流程图,具体可以包括如下步骤:

步骤201,从设备的访问日志中抽样提取单位时间内产生的请求总次数;

在本申请实施例中,为了尽可能地保证压力测试中产生的压力与线上真实的压力相一致,可以首先通过抽样获得单位时间内系统所接收到的压力的大小情况,即单位时间内产生的请求总次数,从而获得在模拟线上压力测试时,每个时间段应该产生的请求总次数。

通常,设备的访问日志可以实时地记录下系统所接收到的请求。因此,可以通过抽样提取设备访问日志中的信息,获得单位时间内产生的请求总次数,例如,通过抽样,获得系统在单位时间1s内所接收到的请求总次数为10000次。

步骤202,将所述单位时间平均划分为多个时间片;

在具体实现中,为了更准确地对模拟线上压力测试时产生的压力进行控制,可以将单位时间平均划分为更小的时间片。例如,将单位时间1s平均划分为100个长度为10ms的时间片,或者将单位时间1s平均划分为1000个长度为1ms的时间片。

步骤203,采用所述请求总次数确定与所述多个时间片对应的请求次数;

在本申请实施例中,在确定出与所述多个时间片对应的请求次数后,可以按照平均分配的方式,将获得的请求总次数,平均分配给每个时间片。例如,对于系统在单位时间1s内所接收到的请求总次数为10000次,若每个时间片的长度为10ms,则单位时间1s可以被平均划分成100个时间片,进而可以确定每个时间片被分配的请求次数为10000/100=100次。

步骤204,在执行当前时间片时,将所述请求次数添加到任务队列;

在本申请实施例中,可以按照多个时间片的时间先后顺序,首先在执行时间片1时,将时间片1对应的请求次数,例如10次,添加到任务队列。

在具体实现中,为了保证模拟线上压力测试的高效执行,可以把任务对列设计成一个int类型的值,只记录在当前时间片有多少次的请求需要被发 起。

步骤205,调用预设的测试线程,判断所述任务队列中的当前请求次数是否为零;

通常,预设的测试线程可以有多个,多个测试线程共同组成一个线程池,当在模拟线上压力测试时,由线程池中的多个测试线程分别执行。

在本申请实施例中,在调用预设的测试线程后,可以由所述测试线程从所述任务队列中读取当前请求次数后,发起相应次数的请求。

在具体实现中,可以调用预设的测试线程,从所述任务队列中读取出当前请求次数,判断所述当前请求次数是否为零,若否,则执行步骤206。

步骤206,采用所述预设的测试线程,从所述任务队列中读取当前请求次数后,发起相应的请求,并对所述当前请求次数递减。

在具体实现中,当测试线程判断任务队列中的当前请求次数不为零时,可以发起一次访问请求,并对所述当前请求次数递减。例如,若在开始执行时间片1时,测试线程判断任务队列中的当前请求次数为10次,则可以对系统发起一次访问请求,然后对任务队列中的当前请求次数递减一次,即,在所述测试线程发起一次访问请求后,所述任务对列中的当前请求次数记录为9次。

在本申请实施例中,测试线程在发起一次访问请求后,可以返回继续对任务队列中的当前请求次数进行判断,直到当前请求次数为零,则停止所述测试或继续等待在下一个时间片时,执行相应应的请求次数。例如,若测试线程在执行时间片1,对系统发起10次访问请求后,使得任务队列中所记录的当前请求次数为零,则需要在下一个时间片即时间片2所对应的时间段才能发起相应的访问请求。

在本申请实施例中,由于任务队列被设计为int类型的值,对内存的消耗极低,不会因为请求次数的增多而增大对内存的要求,而且,通过在发起相应的访问请求时,仅仅是对任务队列中的当前请求次数递减,进一步使得对测试线程的调度高效和简便。

需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请实施例所必须的。

参照图3,示出了本申请的一种模拟线上压力测试的装置实施例的结构框图,具体可以包括如下模块:

获得模块301,用于获得单位时间内产生的请求总次数;

划分模块302,用于将所述单位时间划分为多个时间片;

执行模块303,用于根据所述请求总次数,分别确定与所述多个时间片对应的请求次数,并按照所述请求次数执行相应时间片的请求。

在本申请实施例中,所述执行模块303具体可以包括如下子模块:

遍历子模块3031,用于遍历所述多个时间片;

确定子模块3032,用于采用所述请求总次数确定与所述多个时间片对应的请求次数。

添加子模块3033,用于在执行当前时间片时,将所述请求次数添加到任务队列;

执行子模块3034,用于调用预设的测试线程,从所述任务队列中读取当前请求次数后,发起相应次数的请求。

在本申请实施例中,所述执行子模块3034具体可以包括如下单元:

判断单元341,用于调用预设的测试线程,判断所述任务队列中的当前请求次数是否为零;

执行单元342,用于在判断所述任务队列中的当前请求次数不为零时,采用所述预设的测试线程,从所述任务队列中读取当前请求次数后,发起相应的请求,并对所述当前请求次数递减;

返回单元343,用于在判断所述任务队列中的当前请求次数为零时,返回所述判断单元。

在本申请实施例中,所述获得模块301具体可以包括如下子模块:

获得子模块3011,用于从设备的访问日志中抽样提取单位时间内产生的请求总次数。

在本申请实施例中,所述划分模块302具体可以包括如下子模块:

划分子模块3021,用于将所述单位时间平均划分为多个时间片。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

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

本领域内的技术人员应明白,本申请实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

在一个典型的配置中,所述计算机设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内 存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非持续性的电脑可读媒体(transitory media),如调制的数据信号和载波。

本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求 或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。

以上对本申请所提供的一种模拟线上压力测试的方法和一种模拟线上压力测试的装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

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