CN111782482B - 接口压力测试方法及相关设备 - Google Patents
接口压力测试方法及相关设备 Download PDFInfo
- Publication number
- CN111782482B CN111782482B CN202010688738.7A CN202010688738A CN111782482B CN 111782482 B CN111782482 B CN 111782482B CN 202010688738 A CN202010688738 A CN 202010688738A CN 111782482 B CN111782482 B CN 111782482B
- Authority
- CN
- China
- Prior art keywords
- interface
- state
- coroutine
- executed
- coroutines
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3051—Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3452—Performance evaluation by statistical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
Abstract
本发明涉及测试技术领域,提供一种接口压力测试方法及相关设备。所述接口压力测试方法测试目标接口的调用响应时间;通过线程依次运行第一待执行状态的协程,使第一待执行状态的协程根据对应的接口调用任务向目标接口发送接口调用请求后,将第一待执行状态的协程的状态更新为阻塞状态;在线程等待调用响应时间后,监控阻塞状态的协程是否接收到目标接口的响应信息;当阻塞状态的协程接收到目标接口的响应信息时,将阻塞状态的协程的状态更新为待执行状态,得到第二待执行状态的协程;通过线程依次运行第二待执行状态的协程,使第二待执行状态的协程根据对应的接口调用任务输出调用结果。本发明提升接口压力测试的效率。
Description
技术领域
本发明涉及测试技术领域,具体涉及一种接口压力测试方法、装置、计算机设备及计算机可读存储介质。
背景技术
通常,通过在单位时间内以指定并发数向目标接口发送接口请求的方式,实现接口压力测试。
接口压力测试对请求并发数有较高要求。而实现高并发时,会因计算机资源被占用导致接口压力测试的效率低。如何提升接口压力测试的效率成为待解决的问题。
发明内容
鉴于以上内容,有必要提出一种接口压力测试方法、装置、计算机设备及计算机可读存储介质,其可以对接口进行压力测试,提升接口压力测试的效率。
本申请的第一方面提供一种接口压力测试方法,所述接口压力测试方法包括:
获取目标接口的接口调用任务和接口调用任务的预设数量;
测试所述目标接口的调用响应时间;
创建所述预设数量的协程,每个协程处理一个对应的接口调用任务,存储每个协程的状态为待执行状态,得到第一待执行状态的协程;
通过线程依次运行所述第一待执行状态的协程,使所述第一待执行状态的协程根据对应的接口调用任务向所述目标接口发送接口调用请求后,将所述第一待执行状态的协程的状态更新为阻塞状态;
在所述线程等待所述调用响应时间后,监控阻塞状态的协程是否接收到所述目标接口的响应信息;
当所述阻塞状态的协程接收到所述目标接口的响应信息时,将所述阻塞状态的协程的状态更新为待执行状态,得到第二待执行状态的协程;
通过线程依次运行所述第二待执行状态的协程,使所述第二待执行状态的协程根据对应的接口调用任务输出调用结果。
另一种可能的实现方式中,所述测试所述目标接口的调用响应时间包括:
向所述目标接口发送多个接口预调用请求;
接收所述目标接口响应于所述多个接口预调用请求返回的预响应信息;
根据各个接口预调用请求的发送时间和各个预响应信息的接收时间计算各个接口预调用请求的响应时间;
计算各个接口预调用请求的响应时间的均值,得到所述目标接口的调用响应时间。
另一种可能的实现方式中,所述创建所述预设数量的协程包括:
根据所述目标接口的URL地址和接口调用任务创建协程方法;
根据所述预设数量和预设状态将所述协程方法转化为所述预设数量的协程对象。
另一种可能的实现方式中,所述通过线程依次运行所述第一待执行状态的协程包括:
通过所述线程创建事件循环;
将所述第一待执行状态的协程注册至所述事件循环中,使所述第一待执行状态的协程被所述事件循环调用。
另一种可能的实现方式中,所述接口压力测试方法还包括:
在所述线程等待所述调用响应时间时,获取待处理任务,通过所述线程处理所述待处理任务。
另一种可能的实现方式中,所述通过线程依次运行所述第二待执行状态的协程包括:
通过基于多进程的线程依次运行所述第二待执行状态的协程。
另一种可能的实现方式中,所述接口压力测试方法还包括:
根据各个协程的接口调用任务和对应的调用结果生成压力测试报告。
本申请的第二方面提供一种接口压力测试装置,所述接口压力测试装置包括:
获取模块,用于获取目标接口的接口调用任务和接口调用任务的预设数量;
测试模块,用于测试所述目标接口的调用响应时间;
创建模块,用于创建所述预设数量的协程,每个协程处理一个对应的接口调用任务,存储每个协程的状态为待执行状态,得到第一待执行状态的协程;
第一运行模块,用于通过线程依次运行所述第一待执行状态的协程,使所述第一待执行状态的协程根据对应的接口调用任务向所述目标接口发送接口调用请求后,将所述第一待执行状态的协程的状态更新为阻塞状态;
监控模块,用于在所述线程等待所述调用响应时间后,监控阻塞状态的协程是否接收到所述目标接口的响应信息;
更新模块,用于当所述阻塞状态的协程接收到所述目标接口的响应信息时,将所述阻塞状态的协程的状态更新为待执行状态,得到第二待执行状态的协程;
第二运行模块,用于通过线程依次运行所述第二待执行状态的协程,使所述第二待执行状态的协程根据对应的接口调用任务输出调用结果。
本申请的第三方面提供一种计算机设备,所述计算机设备包括处理器,所述处理器用于执行存储器中存储的计算机可读指令时实现所述接口压力测试方法。
本申请的第四方面提供一种计算机可读存储介质,其上存储有计算机可读指令,所述计算机可读指令被处理器执行时实现所述接口压力测试方法。
本发明在所述线程等待所述调用响应时间后,监控阻塞状态的协程是否接收到所述目标接口的响应信息;当所述阻塞状态的协程接收到所述目标接口的响应信息,将所述阻塞状态的协程的状态更新为待执行状态,得到第二待执行状态的协程。通过线程依次运行所述第二待执行状态的协程,使所述第二待执行状态的协程根据对应的接口调用任务输出调用结果。本发明采用协程处理任务,在等待所述调用响应时间时,计算资源可以被释放,增加压测过程中对计算资源的利用率,提升了压力测试的效率。
附图说明
图1是本发明实施例提供的接口压力测试方法的流程图。
图2是本发明实施例提供的接口压力测试装置的结构图。
图3是本发明实施例提供的计算机设备的示意图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施例对本发明进行详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。
优选地,本发明的接口压力测试方法应用在一个或者多个计算机设备中。所述计算机设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(Application Specific IntegratedCircuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
所述计算机设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述计算机设备可以与用户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互。
实施例一
图1是本发明实施例一提供的接口压力测试方法的流程图。所述接口压力测试方法应用于计算机设备,用于对接口进行压力测试,提升接口压力测试的效率。
如图1所示,所述接口压力测试方法包括:
101,获取目标接口的接口调用任务和接口调用任务的预设数量。
例如,可以获取对接口A的接口调用任务。对接口A的接口调用任务的预设数量为100,即在单位时间内执行100次接口调用任务。
接口调用任务包括向所述目标接口的URL(Uniform Resource Locator,统一资源定位符)地址发送接口调用请求,并输出调用结果。
102,测试所述目标接口的调用响应时间。
通过向所述目标接口发送接口预调用请求的方式,测试所述目标接口的调用响应时间。即测试从发出接口调用请求到接收所述目标接口所需要的时间。实际测试过程中,可以同时发送多个接口预调用请求,节约测试时间,且使测试的调用响应时间更稳定和准确。
在一具体实施例中,所述测试所述目标接口的调用响应时间包括:
向所述目标接口发送多个接口预调用请求;
接收所述目标接口响应于所述多个接口预调用请求返回的预响应信息;
根据各个接口预调用请求的发送时间和各个预响应信息的接收时间计算各个接口预调用请求的响应时间;
计算各个接口预调用请求的响应时间的均值,得到所述目标接口的调用响应时间。
例如,在时间戳1590573420,向目标接口发送3个接口预调用请求;接收目标接口响应于3个接口预调用请求返回的三个预响应信息200、200、200(200表示调用成功),接收时间戳分别为1590573425、1590573422、1590573422;根据3个接口预调用请求的发送时间和3个预响应信息的接收时间计算3个接口预调用请求的响应时间分别为5秒、2秒、2秒;计算3个接口预调用请求的响应时间的均值为3秒,得到所述目标接口的调用响应时间,表示在请求调用所述目标接口时,所述目标接口通常在3秒返回调用结果。
103,创建所述预设数量的协程,每个协程处理一个对应的接口调用任务,存储每个协程的状态为待执行状态,得到第一待执行状态的协程。
创建5个协程,分别为协程A、协程B、协程C、协程D、协程E。5个协程分别处理5对应的接口调用任务,分别为任务a、任务b、任务c、任务d、任务e。可以通过数组存储每个协程的状态为待执行状态,用数字1表示待执行状态。
在一具体实施例中,所述创建所述预设数量的协程包括:
根据所述目标接口的URL地址和接口调用任务创建协程方法;
根据所述预设数量和预设状态将所述协程方法转化为所述预设数量的协程对象。
例如,根据所述目标接口的URL地址(如http://127.0.0.1:5000)和接口调用任务(如result=await get(url))创建协程方法(如async def request());根据所述预设数量(如5)和预设状态(如pending状态,即待执行状态)将所述协程方法转化为所述预设数量的协程对象。async关键字用来定义一个方法,这个方法在调用时不会立即被执行,而是返回一个协程对象。async定义的方法会变成一个无法直接执行的coroutine对象,将coroutine对象注册到事件循环中才可以执行。
可以通过“asyncio”中的“ensure_future()”方法,生成task对象。由多个task组成的tasks对应5个协程对象。
协程(Coroutine,又称微线程,纤程)是一种用户态的轻量级线程。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此协程能保留上一次调用时的状态,即所有局部状态的一个特定组合,每次过程重入时,就相当于进入上一次调用的状态。
104,通过线程依次运行所述第一待执行状态的协程,使所述第一待执行状态的协程根据对应的接口调用任务向所述目标接口发送接口调用请求后,将所述第一待执行状态的协程的状态更新为阻塞状态。
可以新建一个存储结构(如数据表、队列、json等)储存各个协程的状态值。如,协程的初始状态的状态值为00,协程的第一待执行状态的状态值为01,协程的阻塞状态的状态值为10。通过线程依次运行第一待执行状态的协程A、协程B(协程A的状态值为01,协程B的状态值为01),使协程A、协程B根据对应的接口调用任务向目标接口发送接口调用请求后,将协程A、协程B的状态值更新为10(即阻塞状态)。
在一具体实施例中,所述通过线程依次运行所述第一待执行状态的协程包括:
通过所述线程创建事件循环;
将所述第一待执行状态的协程注册至所述事件循环中,使所述第一待执行状态的协程被所述事件循环调用。
事件循环,相当于一个无限循环,将一些函数注册到这个事件循环上,当满足条件发生的时候,就会调用对应的处理方法。
例如,loop=asyncio.get_event_loop();loop.run_until_complete(asyncio.wait(tasks))。其中,loop为所述事件循环,run_until_complete(asyncio.wait(tasks))表示将所述第一待执行状态的协程注册至所述事件循环中。
所述线程可以执行处于待执行状态的协程,不能执行处于阻塞状态的协程(即处于阻塞状态的协程被挂起)。阻塞状态指协程未得到所需计算资源时被挂起的状态,即协程在等待某个操作完成期间,无法继续处理剩下的任务。
105,在所述线程等待所述调用响应时间后,监控阻塞状态的协程是否接收到所述目标接口的响应信息。
所述线程等待所述调用响应时间是为了减少不必要的运行资源消耗,因为所述目标接口通常在所述调用时间(如3秒)后响应。监控阻塞状态的协程是否接收到所述目标接口的响应信息,以在所述阻塞状态的协程接收到所述目标接口的响应信息时,将所述阻塞状态的协程的状态更新为待执行状态。
在一具体实施例中,所述接口压力测试方法还包括:
在所述线程等待所述调用响应时间时,获取待处理任务,通过所述线程处理所述待处理任务。
在所述线程等待所述调用响应时间时,所述线程存在空闲的计算资源,可以用于处理任务。
106,当所述阻塞状态的协程接收到所述目标接口的响应信息时,将所述阻塞状态的协程的状态更新为待执行状态,得到第二待执行状态的协程。
当所述阻塞状态的协程接收到所述目标接口的响应信息时,需要根据响应信息进行计算处理(并为计算处理分配计算资源)。将所述阻塞状态的协程的状态更新为待执行状态,便于识别需要分配计算资源的协程。
107,通过线程依次运行所述第二待执行状态的协程,使所述第二待执行状态的协程根据对应的接口调用任务输出调用结果。
通过协程的状态,确定是否运行协程。当协程处于第二执行状态时,为所述第二待执行状态的协程分配计算资源,使所述第二待执行状态的协程处理对应的接口调用任务(根据对应的接口调用任务输出调用结果)。
在一具体实施例中,所述通过线程依次运行所述第二待执行状态的协程包括:
通过基于多进程的线程依次运行所述第二待执行状态的协程。
进程为一个能够独立运行的程序单位,是线程的集合。而线程是进程中的实际运行单位,是操作系统进行运算调度的最小单位。即线程是进程中的一个最小运行单元。多进程就是指计算机同时执行多个进程。
实施例一的接口压力测试方法在所述线程等待所述调用响应时间后,监控阻塞状态的协程是否接收到所述目标接口的响应信息;当所述阻塞状态的协程接收到所述目标接口的响应信息,将所述阻塞状态的协程的状态更新为待执行状态,得到第二待执行状态的协程。通过线程依次运行所述第二待执行状态的协程,使所述第二待执行状态的协程根据对应的接口调用任务输出调用结果。实施例一采用协程处理任务,在等待所述调用响应时间时,计算资源可以被释放,增加压测过程中对计算资源的利用率,提升了压力测试的效率。
在另一实施例中,所述接口压力测试方法还包括:
根据各个协程的接口调用任务和对应的调用结果生成压力测试报告。
如各个协程对接口A的接口调用任务为在单位时间内执行100次接口调用任务。获取调用结果(如99次调用成功),得到压力测试报告中的成功调用率为99%。
实施例二
图2是本发明实施例二提供的接口压力测试装置的结构图。所述接口压力测试装置20应用于计算机设备。所述接口压力测试装置20用于对接口进行压力测试,提升接口压力测试的效率。
如图2所示,所述接口压力测试装置20可以包括获取模块201、测试模块202、创建模块203、第一运行模块204、监控模块205、更新模块206、第二运行模块207。
获取模块201,用于获取目标接口的接口调用任务和接口调用任务的预设数量。
例如,可以获取对接口A的接口调用任务。对接口A的接口调用任务的预设数量为100,即在单位时间内执行100次接口调用任务。
接口调用任务包括向所述目标接口的URL(Uniform Resource Locator,统一资源定位符)地址发送接口调用请求,并输出调用结果。
测试模块202,用于测试所述目标接口的调用响应时间。
通过向所述目标接口发送接口预调用请求的方式,测试所述目标接口的调用响应时间。即测试从发出接口调用请求到接收所述目标接口所需要的时间。实际测试过程中,可以同时发送多个接口预调用请求,节约测试时间,且使测试的调用响应时间更稳定和准确。
在一具体实施例中,所述测试所述目标接口的调用响应时间包括:
向所述目标接口发送多个接口预调用请求;
接收所述目标接口响应于所述多个接口预调用请求返回的预响应信息;
根据各个接口预调用请求的发送时间和各个预响应信息的接收时间计算各个接口预调用请求的响应时间;
计算各个接口预调用请求的响应时间的均值,得到所述目标接口的调用响应时间。
例如,在时间戳1590573420,向目标接口发送3个接口预调用请求;接收目标接口响应于3个接口预调用请求返回的三个预响应信息200、200、200(200表示调用成功),接收时间戳分别为1590573425、1590573422、1590573422;根据3个接口预调用请求的发送时间和3个预响应信息的接收时间计算3个接口预调用请求的响应时间分别为5秒、2秒、2秒;计算3个接口预调用请求的响应时间的均值为3秒,得到所述目标接口的调用响应时间,表示在请求调用所述目标接口时,所述目标接口通常在3秒返回调用结果。
创建模块203,用于创建所述预设数量的协程,每个协程处理一个对应的接口调用任务,存储每个协程的状态为待执行状态,得到第一待执行状态的协程。
创建5个协程,分别为协程A、协程B、协程C、协程D、协程E。5个协程分别处理5对应的接口调用任务,分别为任务a、任务b、任务c、任务d、任务e。可以通过数组存储每个协程的状态为待执行状态,用数字1表示待执行状态。
在一具体实施例中,所述创建所述预设数量的协程包括:
根据所述目标接口的URL地址和接口调用任务创建协程方法;
根据所述预设数量和预设状态将所述协程方法转化为所述预设数量的协程对象。
例如,根据所述目标接口的URL地址(如http://127.0.0.1:5000)和接口调用任务(如result=await get(url))创建协程方法(如async def request());根据所述预设数量(如5)和预设状态(如pending状态,即待执行状态)将所述协程方法转化为所述预设数量的协程对象。async关键字用来定义一个方法,这个方法在调用时不会立即被执行,而是返回一个协程对象。async定义的方法会变成一个无法直接执行的coroutine对象,将coroutine对象注册到事件循环中才可以执行。
可以通过“asyncio”中的“ensure_future()”方法,生成task对象。由多个task组成的tasks对应5个协程对象。
协程(Coroutine,又称微线程,纤程)是一种用户态的轻量级线程。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此协程能保留上一次调用时的状态,即所有局部状态的一个特定组合,每次过程重入时,就相当于进入上一次调用的状态。
第一运行模块204,用于通过线程依次运行所述第一待执行状态的协程,使所述第一待执行状态的协程根据对应的接口调用任务向所述目标接口发送接口调用请求后,将所述第一待执行状态的协程的状态更新为阻塞状态。
可以新建一个存储结构(如数据表、队列、json等)储存各个协程的状态值。如,协程的初始状态的状态值为00,协程的第一待执行状态的状态值为01,协程的阻塞状态的状态值为10。通过线程依次运行第一待执行状态的协程A、协程B(协程A的状态值为01,协程B的状态值为01),使协程A、协程B根据对应的接口调用任务向目标接口发送接口调用请求后,将协程A、协程B的状态值更新为10(即阻塞状态)。
在一具体实施例中,所述通过线程依次运行所述第一待执行状态的协程包括:
通过所述线程创建事件循环;
将所述第一待执行状态的协程注册至所述事件循环中,使所述第一待执行状态的协程被所述事件循环调用。
事件循环,相当于一个无限循环,将一些函数注册到这个事件循环上,当满足条件发生的时候,就会调用对应的处理方法。
例如,loop=asyncio.get_event_loop();loop.run_until_complete(asyncio.wait(tasks))。其中,loop为所述事件循环,run_until_complete(asyncio.wait(tasks))表示将所述第一待执行状态的协程注册至所述事件循环中。
所述线程可以执行处于待执行状态的协程,不能执行处于阻塞状态的协程(即处于阻塞状态的协程被挂起)。阻塞状态指协程未得到所需计算资源时被挂起的状态,即协程在等待某个操作完成期间,无法继续处理剩下的任务。
监控模块205,用于在所述线程等待所述调用响应时间后,监控阻塞状态的协程是否接收到所述目标接口的响应信息。
所述线程等待所述调用响应时间是为了减少不必要的运行资源消耗,因为所述目标接口通常在所述调用时间(如3秒)后响应。监控阻塞状态的协程是否接收到所述目标接口的响应信息,以在所述阻塞状态的协程接收到所述目标接口的响应信息时,将所述阻塞状态的协程的状态更新为待执行状态。
在一具体实施例中,所述接口压力测试装置还包括处理模块,用于在所述线程等待所述调用响应时间时,获取待处理任务,通过所述线程处理所述待处理任务。
在所述线程等待所述调用响应时间时,所述线程存在空闲的计算资源,可以用于处理任务。
更新模块206,用于当所述阻塞状态的协程接收到所述目标接口的响应信息时,将所述阻塞状态的协程的状态更新为待执行状态,得到第二待执行状态的协程。
当所述阻塞状态的协程接收到所述目标接口的响应信息时,需要根据响应信息进行计算处理(并为计算处理分配计算资源)。将所述阻塞状态的协程的状态更新为待执行状态,便于识别需要分配计算资源的协程。
第二运行模块207,用于通过线程依次运行所述第二待执行状态的协程,使所述第二待执行状态的协程根据对应的接口调用任务输出调用结果。
通过协程的状态,确定是否运行协程。当协程处于第二执行状态时,为所述第二待执行状态的协程分配计算资源,使所述第二待执行状态的协程处理对应的接口调用任务(根据对应的接口调用任务输出调用结果)。
在一具体实施例中,所述通过线程依次运行所述第二待执行状态的协程包括:
通过基于多进程的线程依次运行所述第二待执行状态的协程。
进程为一个能够独立运行的程序单位,是线程的集合。而线程是进程中的实际运行单位,是操作系统进行运算调度的最小单位。即线程是进程中的一个最小运行单元。多进程就是指计算机同时执行多个进程。
实施例二的接口压力测试装置20在所述线程等待所述调用响应时间后,监控阻塞状态的协程是否接收到所述目标接口的响应信息;当所述阻塞状态的协程接收到所述目标接口的响应信息,将所述阻塞状态的协程的状态更新为待执行状态,得到第二待执行状态的协程。通过线程依次运行所述第二待执行状态的协程,使所述第二待执行状态的协程根据对应的接口调用任务输出调用结果。实施例二采用协程处理任务,在等待所述调用响应时间时,计算资源可以被释放,增加压测过程中对计算资源的利用率,提升了压力测试的效率。
在另一实施例中,所述接口压力测试装置还包括生成模块,用于根据各个协程的接口调用任务和对应的调用结果生成压力测试报告。
如各个协程对接口A的接口调用任务为在单位时间内执行100次接口调用任务。获取调用结果(如99次调用成功),得到压力测试报告中的成功调用率为99%。
实施例三
本实施例提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机可读指令,该计算机可读指令被处理器执行时实现上述接口压力测试方法实施例中的步骤,例如图1所示的步骤101-107:
101,获取目标接口的接口调用任务和接口调用任务的预设数量;
102,测试所述目标接口的调用响应时间;
103,创建所述预设数量的协程,每个协程处理一个对应的接口调用任务,存储每个协程的状态为待执行状态,得到第一待执行状态的协程;
104,通过线程依次运行所述第一待执行状态的协程,使所述第一待执行状态的协程根据对应的接口调用任务向所述目标接口发送接口调用请求后,将所述第一待执行状态的协程的状态更新为阻塞状态;
105,在所述线程等待所述调用响应时间后,监控阻塞状态的协程是否接收到所述目标接口的响应信息;
106,当所述阻塞状态的协程接收到所述目标接口的响应信息时,将所述阻塞状态的协程的状态更新为待执行状态,得到第二待执行状态的协程;
107,通过线程依次运行所述第二待执行状态的协程,使所述第二待执行状态的协程根据对应的接口调用任务输出调用结果。
或者,该计算机可读指令被处理器执行时实现上述装置实施例中各模块的功能,例如图2中的模块201-207:
获取模块201,用于获取目标接口的接口调用任务和接口调用任务的预设数量;
测试模块202,用于测试所述目标接口的调用响应时间;
创建模块203,用于创建所述预设数量的协程,每个协程处理一个对应的接口调用任务,存储每个协程的状态为待执行状态,得到第一待执行状态的协程;
第一运行模块204,用于通过线程依次运行所述第一待执行状态的协程,使所述第一待执行状态的协程根据对应的接口调用任务向所述目标接口发送接口调用请求后,将所述第一待执行状态的协程的状态更新为阻塞状态;
监控模块205,用于在所述线程等待所述调用响应时间后,监控阻塞状态的协程是否接收到所述目标接口的响应信息;
更新模块206,用于当所述阻塞状态的协程接收到所述目标接口的响应信息时,将所述阻塞状态的协程的状态更新为待执行状态,得到第二待执行状态的协程;
第二运行模块207,用于通过线程依次运行所述第二待执行状态的协程,使所述第二待执行状态的协程根据对应的接口调用任务输出调用结果。
实施例四
图3为本发明实施例三提供的计算机设备的示意图。所述计算机设备30包括存储器301、处理器302以及存储在所述存储器301中并可在所述处理器302上运行的计算机可读指令303,例如接口压力测试程序。所述处理器302执行所述计算机可读指令303时实现上述接口压力测试方法实施例中的步骤,例如图1所示的101-107:
101,获取目标接口的接口调用任务和接口调用任务的预设数量;
102,测试所述目标接口的调用响应时间;
103,创建所述预设数量的协程,每个协程处理一个对应的接口调用任务,存储每个协程的状态为待执行状态,得到第一待执行状态的协程;
104,通过线程依次运行所述第一待执行状态的协程,使所述第一待执行状态的协程根据对应的接口调用任务向所述目标接口发送接口调用请求后,将所述第一待执行状态的协程的状态更新为阻塞状态;
105,在所述线程等待所述调用响应时间后,监控阻塞状态的协程是否接收到所述目标接口的响应信息;
106,当所述阻塞状态的协程接收到所述目标接口的响应信息时,将所述阻塞状态的协程的状态更新为待执行状态,得到第二待执行状态的协程;
107,通过线程依次运行所述第二待执行状态的协程,使所述第二待执行状态的协程根据对应的接口调用任务输出调用结果。
或者,该计算机可读指令被处理器执行时实现上述装置实施例中各模块的功能,例如图2中的模块201-207:
获取模块201,用于获取目标接口的接口调用任务和接口调用任务的预设数量;
测试模块202,用于测试所述目标接口的调用响应时间;
创建模块203,用于创建所述预设数量的协程,每个协程处理一个对应的接口调用任务,存储每个协程的状态为待执行状态,得到第一待执行状态的协程;
第一运行模块204,用于通过线程依次运行所述第一待执行状态的协程,使所述第一待执行状态的协程根据对应的接口调用任务向所述目标接口发送接口调用请求后,将所述第一待执行状态的协程的状态更新为阻塞状态;
监控模块205,用于在所述线程等待所述调用响应时间后,监控阻塞状态的协程是否接收到所述目标接口的响应信息;
更新模块206,用于当所述阻塞状态的协程接收到所述目标接口的响应信息时,将所述阻塞状态的协程的状态更新为待执行状态,得到第二待执行状态的协程;
第二运行模块207,用于通过线程依次运行所述第二待执行状态的协程,使所述第二待执行状态的协程根据对应的接口调用任务输出调用结果。
示例性的,所述计算机可读指令303可以被分割成一个或多个模块,所述一个或者多个模块被存储在所述存储器301中,并由所述处理器302执行,以完成本方法。所述一个或多个模块可以是能够完成特定功能的一系列计算机可读指令指令段,该指令段用于描述所述计算机可读指令303在所述计算机设备30中的执行过程。例如,所述计算机可读指令303可以被分割成图2中的获取模块201、测试模块202、创建模块203、第一运行模块204、监控模块205、更新模块206、第二运行模块207,各模块具体功能参见实施例二。
本领域技术人员可以理解,所述示意图3仅仅是计算机设备30的示例,并不构成对计算机设备30的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述计算机设备30还可以包括输入输出设备、网络接入设备、总线等。
所称处理器302可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器302也可以是任何常规的处理器等,所述处理器302是所述计算机设备30的控制中心,利用各种接口和线路连接整个计算机设备30的各个部分。
所述存储器301可用于存储所述计算机可读指令303,所述处理器302通过运行或执行存储在所述存储器301内的计算机可读指令或模块,以及调用存储在存储器301内的数据,实现所述计算机设备30的各种功能。所述存储器301可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据计算机设备30的使用所创建的数据等。此外,存储器301可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(SmartMedia Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。
所述计算机设备30集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机可读指令来指令相关的硬件来完成,所述的计算机可读指令可存储于一计算机可读存储介质中,该计算机可读指令在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机可读指令包括计算机可读指令代码,所述计算机可读指令代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机可读指令代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。
上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述接口压力测试方法的部分步骤。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附关联图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他模块或步骤,单数不排除复数。系统权利要求中陈述的多个模块或装置也可以由一个模块或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围。
Claims (9)
1.一种接口压力测试方法,其特征在于,所述接口压力测试方法包括:
获取目标接口的接口调用任务和接口调用任务的预设数量;
测试所述目标接口的调用响应时间,包括:向所述目标接口发送多个接口预调用请求;接收所述目标接口响应于所述多个接口预调用请求返回的预响应信息;根据各个接口预调用请求的发送时间和各个预响应信息的接收时间计算各个接口预调用请求的响应时间;计算各个接口预调用请求的响应时间的均值,得到所述目标接口的调用响应时间;
创建所述预设数量的协程,每个协程处理一个对应的接口调用任务,存储每个协程的状态为待执行状态,得到第一待执行状态的协程;
通过线程依次运行所述第一待执行状态的协程,使所述第一待执行状态的协程根据对应的接口调用任务向所述目标接口发送接口调用请求后,将所述第一待执行状态的协程的状态更新为阻塞状态;
在所述线程等待所述调用响应时间后,监控阻塞状态的协程是否接收到所述目标接口的响应信息;
当所述阻塞状态的协程接收到所述目标接口的响应信息时,将所述阻塞状态的协程的状态更新为待执行状态,得到第二待执行状态的协程;
通过线程依次运行所述第二待执行状态的协程,使所述第二待执行状态的协程根据对应的接口调用任务输出调用结果。
2.如权利要求1所述的接口压力测试方法,其特征在于,所述创建所述预设数量的协程包括:
根据所述目标接口的URL地址和接口调用任务创建协程方法;
根据所述预设数量和预设状态将所述协程方法转化为所述预设数量的协程对象。
3.如权利要求1所述的接口压力测试方法,其特征在于,所述通过线程依次运行所述第一待执行状态的协程包括:
通过所述线程创建事件循环;
将所述第一待执行状态的协程注册至所述事件循环中,使所述第一待执行状态的协程被所述事件循环调用。
4.如权利要求1所述的接口压力测试方法,其特征在于,所述接口压力测试方法还包括:
在所述线程等待所述调用响应时间时,获取待处理任务,通过所述线程处理所述待处理任务。
5.如权利要求1所述的接口压力测试方法,其特征在于,所述通过线程依次运行所述第二待执行状态的协程包括:
通过基于多进程的线程依次运行所述第二待执行状态的协程。
6.如权利要求1至5中任一项所述的接口压力测试方法,其特征在于,所述接口压力测试方法还包括:
根据各个协程的接口调用任务和对应的调用结果生成压力测试报告。
7.一种接口压力测试装置,其特征在于,所述接口压力测试装置包括:
获取模块,用于获取目标接口的接口调用任务和接口调用任务的预设数量;
测试模块,用于测试所述目标接口的调用响应时间,包括:向所述目标接口发送多个接口预调用请求;接收所述目标接口响应于所述多个接口预调用请求返回的预响应信息;根据各个接口预调用请求的发送时间和各个预响应信息的接收时间计算各个接口预调用请求的响应时间;计算各个接口预调用请求的响应时间的均值,得到所述目标接口的调用响应时间;
创建模块,用于创建所述预设数量的协程,每个协程处理一个对应的接口调用任务,存储每个协程的状态为待执行状态,得到第一待执行状态的协程;
第一运行模块,用于通过线程依次运行所述第一待执行状态的协程,使所述第一待执行状态的协程根据对应的接口调用任务向所述目标接口发送接口调用请求后,将所述第一待执行状态的协程的状态更新为阻塞状态;
监控模块,用于在所述线程等待所述调用响应时间后,监控阻塞状态的协程是否接收到所述目标接口的响应信息;
更新模块,用于当所述阻塞状态的协程接收到所述目标接口的响应信息时,将所述阻塞状态的协程的状态更新为待执行状态,得到第二待执行状态的协程;
第二运行模块,用于通过线程依次运行所述第二待执行状态的协程,使所述第二待执行状态的协程根据对应的接口调用任务输出调用结果。
8.一种计算机设备,其特征在于,所述计算机设备包括处理器,所述处理器用于执行存储器中存储的计算机可读指令以实现如权利要求1至6中任一项所述接口压力测试方法。
9.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机可读指令,其特征在于,所述计算机可读指令被处理器执行时实现如权利要求1至6中任一项所述接口压力测试方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010688738.7A CN111782482B (zh) | 2020-07-16 | 2020-07-16 | 接口压力测试方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010688738.7A CN111782482B (zh) | 2020-07-16 | 2020-07-16 | 接口压力测试方法及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111782482A CN111782482A (zh) | 2020-10-16 |
CN111782482B true CN111782482B (zh) | 2022-08-12 |
Family
ID=72763179
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010688738.7A Active CN111782482B (zh) | 2020-07-16 | 2020-07-16 | 接口压力测试方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111782482B (zh) |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104142858B (zh) * | 2013-11-29 | 2016-09-28 | 腾讯科技(深圳)有限公司 | 阻塞任务调度方法及装置 |
CN106021055A (zh) * | 2016-05-25 | 2016-10-12 | 乐视控股(北京)有限公司 | 一种混合接口性能测试方法和装置 |
CN109726102A (zh) * | 2018-05-14 | 2019-05-07 | 网联清算有限公司 | 流量压力测试方法和装置 |
CN109857626A (zh) * | 2019-01-28 | 2019-06-07 | 上海易点时空网络有限公司 | 压力测试方法及装置 |
CN111078323A (zh) * | 2019-10-12 | 2020-04-28 | 平安科技(深圳)有限公司 | 基于协程的数据处理方法、装置、计算机设备及存储介质 |
-
2020
- 2020-07-16 CN CN202010688738.7A patent/CN111782482B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN111782482A (zh) | 2020-10-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107766148B (zh) | 一种异构集群及任务处理方法和装置 | |
RU2427029C2 (ru) | Способ и устройство формирования очереди потоков | |
CN109840142B (zh) | 基于云监控的线程控制方法、装置、电子设备及存储介质 | |
US10552213B2 (en) | Thread pool and task queuing method and system | |
CN109117252B (zh) | 基于容器的任务处理的方法、系统及容器集群管理系统 | |
US9052972B2 (en) | Determining the processing order of a plurality of events | |
CN112527848B (zh) | 基于多数据源的报表数据查询方法、装置、系统及存储介质 | |
US20200285508A1 (en) | Method and Apparatus for Assigning Computing Task | |
CN110825731B (zh) | 数据存储方法、装置、电子设备及存储介质 | |
Chen et al. | GPU-accelerated high-throughput online stream data processing | |
EP2738675B1 (en) | System and method for efficient resource management of a signal flow programmed digital signal processor code | |
CN109240825A (zh) | 弹性任务调度方法、装置、设备及计算机可读存储介质 | |
CN112363913B (zh) | 一种并行测试任务调度寻优的方法、装置和计算设备 | |
CN110673959A (zh) | 用于处理任务的系统、方法和装置 | |
CN114637536A (zh) | 任务处理方法、计算协处理器、芯片及计算机设备 | |
US20130125131A1 (en) | Multi-core processor system, thread control method, and computer product | |
CN111124644A (zh) | 任务调度资源的确定方法、装置及系统 | |
CN112363914B (zh) | 一种并行测试资源配置寻优的方法、计算设备及存储介质 | |
CN114816777A (zh) | 命令处理装置、方法、电子设备以及计算机可读存储介质 | |
CN111782482B (zh) | 接口压力测试方法及相关设备 | |
CN110825502B (zh) | 神经网络处理器和用于神经网络处理器的任务调度方法 | |
CN116069500A (zh) | 一种模型训练任务处理方法、装置、电子设备及可读介质 | |
CN115344370A (zh) | 任务调度方法、装置、设备及存储介质 | |
US8584143B2 (en) | Collection access in a parallel environment | |
US20070043869A1 (en) | Job management system, job management method and job management program |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |