CN115914049A - 一种测试方法、装置、***、电子设备和可读存储介质 - Google Patents
一种测试方法、装置、***、电子设备和可读存储介质 Download PDFInfo
- Publication number
- CN115914049A CN115914049A CN202211292550.6A CN202211292550A CN115914049A CN 115914049 A CN115914049 A CN 115914049A CN 202211292550 A CN202211292550 A CN 202211292550A CN 115914049 A CN115914049 A CN 115914049A
- Authority
- CN
- China
- Prior art keywords
- data
- tested
- request message
- request
- attribute information
- 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.)
- Pending
Links
Images
Landscapes
- Computer And Data Communications (AREA)
Abstract
本申请公开了一种测试方法、装置、***、电子设备和可读存储介质,该方法包括:对网络接口进行监控,其中,所述网络接口为待测试对象进行网络通信的接口;通过监控获取所述待测试对象通过所述网络接口发送的请求消息;根据所述请求消息中携带的属性信息,在预先保存的对应关系中,查找与所述请求消息对应的数据;将查找到的所述数据返回给所述待测试对象。通过本申请解决了现有技术中等待所有功能单元的代码均完成之后才进行网络请求相关测试的方式会降低开发效率的问题,能够在需要进行网络请求测试时,将预先保存的与请求消息对应的数据发送给待测试对象,从而能够及时对待测试对象进行测试,提高了开发效率。
Description
技术领域
本申请涉及到网络技术领域,具体而言,涉及一种测试方法、装置、***、电子设备和可读存储介质。
背景技术
在进行软件开发的过程中,会将软件分为不同的功能单元(或称为功能模块)来进行开发。在开发的过程中为了保证各个功能单元正常运行,在开发完成之后需要对该功能单元进行单元测试。
在实际的单元测试过程中,一个功能单元可能需要通过网络交互来从其他功能单元获取数据之后才能完成测试,如果其他功能单元还未开发完成或者因为其他情况无法向该待测试的功能单元提供数据,那么对该功能单元的测试就无法完成。另外,在单元测试过程中,考虑到代码安全等因素,因此也不建议代码在真实的网络环境中进行测试。
在现有技术中,如果一个功能单元涉及到网络交互时,一般会等到与其进行网络交互的其他功能单元开发完成之后,进行联合测试。这种测试方法虽然能够提供真实的测试环境,但是如果此时发现代码出现问题,则需要进行在多个功能单元中进行查找,定位问题难度加大。另外,对于功能单元的测试还需要等待其他功能单元的开发完成之后才进行,这期间会浪费一些时间。因此,现有技术中等待所有功能单元的代码均完成之后才进行网络请求相关测试的方式会降低开发效率。
发明内容
本申请实施例提供了一种测试方法、装置、***、电子设备和可读存储介质,以至少解决现有技术中等待所有功能单元的代码均完成之后才进行网络请求相关测试的方式会降低开发效率的问题。
根据本申请的一个方面,提供了一种测试方法,包括:对网络接口进行监控,其中,所述网络接口为待测试对象进行网络通信的接口;通过监控获取所述待测试对象通过所述网络接口发送的请求消息,其中,所述请求消息用于请求数据;根据所述请求消息中携带的属性信息,在预先保存的对应关系中,查找与所述请求消息对应的数据,其中,所述对应关系保存有数据与该数据对应的一种或多种属性信息;将查找到的所述数据返回给所述待测试对象。
根据本申请的另一个方面,还提供了一种测试装置,包括:监控模块,用于对网络接口进行监控,其中,所述网络接口为待测试对象进行网络通信的接口;获取模块,用于通过监控获取所述待测试对象通过所述网络接口发送的请求消息,其中,所述请求消息用于请求数据;查找模块,用于根据所述请求消息中携带的属性信息在预先保存的对应关系中,查找与所述请求消息对应的数据,其中,所述对应关系保存有数据与该数据对应的一种或多种属性信息;发送模块,用于将查找到的所述数据返回给所述待测试对象。
根据本申请的另一个方面,还提供了一种测试***,其中,包括:拦截模块和待测试对象,所述拦截模块用于执行上述的方法。
根据本申请的另一个方面,还提供了一种电子设备,包括存储器和处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现上述的方法步骤。
根据本申请的另一个方面,还提供了一种可读存储介质,其上存储有计算机指令,其中,该计算机指令被处理器执行时实现上述的方法步骤。
在本申请实施例中,采用了对网络接口进行监控,其中,所述网络接口为待测试对象进行网络通信的接口;通过监控获取所述待测试对象通过所述网络接口发送的请求消息,其中,所述请求消息用于请求数据;根据所述请求消息中携带的属性信息,在预先保存的对应关系中,查找与所述请求消息对应的数据,其中,所述对应关系保存有数据与该数据对应的一种或多种属性信息;将查找到的所述数据返回给所述待测试对象。通过本申请解决了现有技术中等待所有功能单元的代码均完成之后才进行网络请求相关测试的方式会降低开发效率的问题,能够在需要进行网络请求测试时,将预先保存的与请求消息对应的数据发送给待测试对象,从而能够及时对待测试对象进行测试,提高了开发效率。
附图说明
构成本申请的一部分的附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的测试方法的流程图;以及,
图2是根据本申请实施例的对待测试对象返回数据的交互示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机***中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在以下实施方式中涉及到与网络相关的测试,下面首先对以下实施方式中使用的技术术语进行说明。
单元测试:单元测试(Unit Testing)是指对软件中的可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java语言里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的被测功能模块。开发人员可以根据实际的需要来来规定一个单元中所包括的内容,其可以只包括一个函数或一个类,或者也可以是由多个函数或多个类组成的一个功能模块。单元测试是将待测试的部分(可以称为单元或模块)是在软件开发过程与程序的其他部分相隔离的情况下进行的测试。单元测试重点是验证该单元或模块的运行是否与预期相符。
功能测试:功能测试就是对产品的各功能进行验证,对照该产品的功能进行逐项测试,检查产品是否达到预期的要求。功能测试可以是对一个完整产品进行的测试,也可以是对产品的一部分进行的测试,例如,如果对某个单元或模块进行功能验证,则可以称为是功能测试。单元测试和功能测试的不同在于,单元测试是从测试对象角度定义的,而功能测试是从测试目的角度定义的,因此,在单元测试中也可以进行功能测试。
HTTP协议:HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等)。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息***。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0和HTTP/2.0。以下实施方式以HTTP协议中的请求消息为例进行说明,但是并不限于此,其他网络协议也同样适用。
网络接口:无论是完整的软件产品还是功能单元,均与网络进行交互时均需要通过网卡等硬件设备来进行,这些硬件设备提供了网络的物理连接,这些硬件设备与网络进行交互的接口被称为网络接口,该网络接口可以指硬件设备上的物理接口,也可以是指从软件层面定义的逻辑接口。
网络请求:网络提供了一种连接方式,通过这种连接方式,即使不再同一台物理设备上两方也可以进行数据的交互。一般情况下会将发送网络请求的一方称为客户端,将接收到网络请求提供数据的一方称为服务端。需要说明的是,客户端可以是一个软件产品或者也可以是软件产品中的功能单元,例如,客户端可以是运行在移动终端上的应用,或者也可以通过浏览器显示的页面,在以下实施方式中将能够发送网络请求(或称为请求消息)的一方称为客户端,将能够响应请求消息提供数据的一方称为服务端或服务器。客户端一般会提前得到服务端的网络地址信息(例如网络地址和/或提供服务的端口号等),然后根据得到的网络地址信息发送请求消息以从服务端获取数据。
虚拟服务器:与虚拟服务器对应的是真实服务器,真实服务器就是根据真正与客户端进行交互的服务器,其在接收到客户端发送的请求消息之后,对请求消息进行处理之后向客户端返回数据。虚拟服务器是对真实服务器的模拟,其并不像真实服务器那样对请求消息进行处理,而是直接模拟真实服务器向客户端返回数据,因此将这种模拟真实服务器的服务器称为虚拟服务器。
现有技术中在一个功能单元需要从服务端获取数据时,一般会等到作为服务端的功能单元开发完成之后一起进行联合测试,这种测试方式需要等待其他功能单元的开发完成,并且在测试时还不容易定位是作为客户端的功能单元出现了问题,还是作为服务端的功能单元出现了问题,因此会降低开发效率。
为了解决这个问题,一般会提供一个虚拟服务器来解决这个问题,该虚拟服务器用于在接收到功能单元的请求消息之后,模拟对该请求消息的处理过程,并向该功能单元返回数据。这种方式虽然解决了功能单元的数据获取问题,但是,由于虚拟服务器具有自己的网络地址,在测试的过程中,需要将待测试的功能单元中代码涉及到向网络请求数据的部分都修改为虚拟服务器的地址,在测试完成之后,将该功能单元上线时再将虚拟服务器的网络地址修改会真实使用的地址。因此,使用这种虚拟服务器来进行测试时,需要对功能单元的代码进行修改,这种修改会对代码造成入侵,这种入侵性可能会导致代码在使用虚拟服务器进行测试的时候正常工作,但是在真实环境中工作出现异常。因此需要一种不需要对功能单元的代码进行修改的测试方案。
在以下实施方式中提供了一种测试方法,图1是根据本申请实施例的测试方法的流程图,如图1所示,下面对图1中所涉及到的步骤进行说明。
步骤S102,对网络接口进行监控,其中,所述网络接口为待测试对象进行网络通信的接口。
在该步骤中,待测试对象可以是完整的软件产品,或者也可以是软件中的功能单元,在在进行单元测试或功能测试的时候均可以使用以下实施方式中的步骤。在需要对待测试对象进行测试的情况下,可以获取待测试对象所运行的设备上的网络接口,然后对该网络接口进行监控即可。或者也可以获取待测试对象用于发送消息的网络接口的地址信息,然后对通过该地址信息发送出去的消息进行监控。
步骤S104,通过监控获取所述待测试对象通过所述网络接口发送的请求消息,其中,所述请求消息用于请求数据。
通过对网络接口的监控可以获取到通过该网络接口发送的所有请求消息,如果该网络接口只有待测试对象在使用,则可以将拦截到的请求消息继续执行下面的步骤。如果该网络接口不仅有该待测对象在使用,则可以根据待测试对象发送请求消息时所使用的网络地址信息将待测对象发送的请求消息从拦截到的请求消息中过滤出来。例如,待测试对象在发送请求消息时会使用100.100.100.100作为源地址,则可以从拦截的请求消息中过滤源地址为100.100.100.100的请求消息继续执行下面的步骤。需要说明的是,拦截到的请求消息也可以是来自多个待测试对象,对于多个待测试对象发送的请求消息的区分也可以根据每个待测对象所使用的网络地址和/或端口号来进行区分。
在上述两个步骤中,待测试对象在进行测试时,不再需要修改代码中的提供数据的服务端的地址,而是直接使用该真实地址发送请求消息即可,由于网络接口进行监控,无论待测试对象向哪个服务端的地址来请求数据,该请求消息均能够被拦截。因此通过上述两个步骤避免了在测试时将代码中的真实服务器的地址修改为虚拟服务器地址,然后在测试完毕之后再将虚拟服务器地址修改为真实服务器地址的步骤,避免了修改造成的对代码的入侵,减少了代码因为测试所产生的隐患。
步骤S106,根据所述请求消息中携带的属性信息,在预先保存的对应关系中,查找与所述请求消息对应的数据,其中,所述对应关系保存有数据与该数据对应的一种或多种属性信息;
在该步骤中,请求消息可以携带有各种属性信息,请求消息都能够携带的属性信息与请求消息所采用的协议有关系,不同的协议中能够包括的属性信息是不同的。待测试对象发送的请求消息可以采用现有的协议,或者也可以采用专用协议,这个专用协议是指为了特定的需求而专门开发的协议。无论是采用现有协议还是专用协议,只要接收到该请求消息的接收方能够对请求消息所采用的协议进行解析即可,通过对该协议的解析就可以获取到该请求消息中携带的属性信息。
在预先保存的属性信息与数据的对应关系中,不同的属性信息可以对应不同的数据,例如,属性信息A对应与数据A,属性信息B和属性信息C对应于数据B、属性信息A和属性信息C对应于数据C等。需要说明的是,不同的属性信息可能会有不同的取值,请求地址是属性信息的一种,在请求地址为地址一时对应数据A1,请求地址为地址二时对应数据A2等等。因此,该步骤中所提到的数据与一种或多种属性信息,一方面是指不同类型的属性信息的组合可以对应不同的数据,另一方面是指同一属性信息如果其属性信息的值不同其也可以对应不同的数据。这些数据和属性信息的对应关系均是预先保存好的,在监控到待测试对象发送的请求消息之后,直接从预先保存的数据中找到与请求消息对应的数据即可。
步骤S108,将查找到的所述数据返回给所述待测试对象。
在该步骤中,查找到的数据可以是数据本身,该数据不是完整的消息,此时,可以根据请求消息中的协议格式,将查找到的数据构造成该协议格式的响应消息,即将查找到的数据携带在与请求消息对应的响应消息中,发送给待测试对象。或者,在步骤S106中所保存的数据可以直接是构造完成的响应消息,在查找到数据之后,由于该数据已经是构造好的响应消息,则直接将查找到的数据发送给待测试对象即可。
在上述步骤中,通过监控网络接口的方式获取所有待测试对象向外发送的请求消息,这种获取方式不再需要修改待测试对象中的代码,开发人员按照真实环境编写完代码之后,直接进行测试即可,从而避免了因为测试修改代码对代码所带来的未知风险,并且也需要等待作为服务端的功能单元开发完成再进行测试,只要提前进行作为服务端的功能单元能够提供的数据和请求消息的属性信息关联保存即可。因此,通过上述步骤解决了现有技术中等待所有功能单元的代码均完成之后才进行网络请求相关测试的方式会降低开发效率的问题,能够在需要进行网络请求测试时,将预先保存的与请求消息对应的数据发送给待测试对象,从而能够及时对待测试对象进行测试,提高了开发效率。
在图1示出的步骤中,是通过属性信息来进行数据匹配的,不同协议格式的请求消息中能够携带的属性是不同的,考虑到请求消息也是网络消息的一种,无论什么协议格式的请求消息,其至少能携带如下属性信息中的至少之一:请求地址、请求方式、请求参数、数据要求,其中,所述请求地址为所述请求消息发往的目的地址,所述请求方式用于指示与接收所述请求消息的一方进行数据交互的方式,所述数据要求用于指示所述待测试对象对接收的数据的要求,所述请求参数用于获取与该请求参数对应的响应数据。下面对这几种属性信息分别进行举例说明。
请求地址:请求地址是对请求消息进行处理并返回数据的服务端的地址,即该请求消息发送的目的地址,在网络请求中为了能够使消息达到对应的服务端,均需要在消息中携带目的端的网络(IP)地址,或者也可以携带该服务端的域名,在有些协议中的还会携带该服务端的端口号,在以下实施方式中将域名、IP地址和/或端口号统称为网络地址。例如,服务端在80端口提供超文本传输协议(Hyper Text Transfer Protocol,简称为HTTP)服务,该服务端的域名为www.testing-only.com,则在请求消息中会携带HTTP://www.testing-only.com:80作为目的地址,或者该服务端的IP地址是100.100.100.100,则在该请求消息中会携带HTTP://100.100.100.100:80作为目的地址。
请求方式:请求方式是待测试对象向提供数据的服务端指示的数据交互方式,该交互方式有可能是待测试对象单纯从服务端获取指定数据,也有可能是待测试对象在请求消息中还需要向待测试对象传递数据等等。在不同的协议中会存在不同的请求方式,仍然以HTTP协议为例,其提供了如下几种请求方式:
get:请求指定页面信息,并返回实体主体,其中,实体主机就是使用HTTP协议打包的该页面信息。
head:类似于get请求,只不过返回的数据中不包括实体主体,只包括HTTP协议中的头部信息。
post:向服务端提交数据,并请求对提交的数据进行处理(例如提交表单或上传文件),该提交的数据包含在请求消息中,post请求可能会导致在服务端尽力新的资源或者修改已有资源。
put:从客户端向服务端传送的数据取代指定的文档的内容。
delete:请求服务器删除指定的页面。
options:允许客户端查看服务器的性能。
trace:回显服务器收到的请求,主要用于测试或诊断。
在接收到请求消息之后,可以获取所述请求消息中携带的请求方式,根据所述请求方式对所述请求消息中要求进行处理的数据进行处理后,返回处理结果。请求方式如上述至少之一,当然随着技术的发展可能还会增加其他请求方式,无论请求方式如何,只要按照请求方式指示的方式进行处理并返回结果即可。
数据要求:数据要求可以用于指示待测试对象能够接收的数据的类型等要求,这种数据要求可以是明示的,如可以明确指示服务端提供文本格式的数据而不要提供其他格式的数据;这种数据要求也可以是暗示的,如向服务端指示待测试对象所支持的协议类型等。以HTTP协议为例,在HTTP协议中,数据要求部分体现在数据头中。HTTP协议的数据头可以包括如下内容:
用户代理(User-Agent):向服务端提供待测试对象支持的浏览器类型及版本、操作***及版本、浏览器内核等信息的标识。
接收信息(Accept):代表待测试对象希望接受的数据类型。比如:Accept:text/xml,表示待测试对象希望接受的数据类型是可扩展标记语言(Extensible MarkupLanguage,简称为xml)类型。
编码类型(Accept-Encoding):声明待测试对象的浏览器支持的编码类型。
语言类型(Accept-Language):表示待测试对象的浏览器所支持的语言类型。
传输编码(Transfer-Encoding):告知服务端端为了保证消息的可靠传输,对请求消息采用了什么编码方式。
可以获取请求消息中携带的数据要求,并向待测试对象返回与数据要求相符合的数据。需要说明的是,数据要求并限于上述介绍的几种,也可以包括上述要求之外的其他要求,在此不再一一列举。
请求参数:在请求消息中携带不同的参数,这些参数可以被服务端接收并查找与该请求参数对应的数据。这些参数是传递给服务端的参数。例如,在HTTP协议中可以通过如下方式来传递参数:http://www.testing-only.com?key1=value1&key2=value2,其中,key1和key2就是参数的名称,value1和value2就是参数key1和key2的值。
在属性信息有多种类型的情况下,在与预先保存对应关系进行匹配的时候,可能会匹配到多条数据,例如,一个请求消息中携带了http://www.testing-only.com的请求地址以及所接收的语言类型为CN(中文),在预先保存的对应关系中有多条数据:第一条数据对应的属性信息为http://www.testing-only.com;第二条数据对应的属性信息为语言类型为CN;第三条数据对应的属性信息为了http://www.testing-only.com以及语言类型为CN(中文)。在这种情况下,第一条数据和第二条数据仅涵盖了请求消息中的部分属性信息,而第三条数据涵盖了最多的属性信息,则此时向待测试对象返回第三条数据。如果请求消息中携带了http://www.testing-only.com的请求地址、所接收的语言类型为CN(中文)以及编码类型为统一码转换格式(Unicode Transformation Format,简称为UTF)-8(8表示8个比特)。此时在预先保存的三条数据对应的属性信息均无法涵盖该请求消息中携带的所有属性信息,在这种情况下第三条数据涵盖了两类属性信息,为涵盖属性信息最多的数据,因此,可以向待测试对象返回第三条数据。如果预先保存了第四条数据,并且该第四条数据对应的属性信息为http://www.testing-only.com、语言类型为CN以及编码类型为UTF-8,则返回涵盖请求消息中属性信息最多的第四条数据。即在该可选实施方式中,根据所述请求消息中携带的属性信息在所述对应关系中查找与所述请求消息对应的数据可以包括如下步骤:在所述对应关系中查找涵盖所述请求消息中携带的属性信息最多的一条对应关系;将查找到的一条对应关系中的数据作为所述请求消息对应的数据。通过该可选实施方式,一方面可以将涵盖属性信息最多的数据发送给待测试对象,做到与请求消息最大程度的匹配;另一方面也可以避免预先保存的数据没有与请求消息中的属性信息完全匹配时无法向待测试消息返回数据的情况。
在实际测试中还存在另外一种情况下,待测试对象发送的请求消息中仅携带了http://www.testing-only.com的请求地址。在这种情况下与请求消息中携带的属性信息相匹配的数据有四条数据,此时可以将与请求消息中携带的属性信息完全一致的数据返回给待测试对象,即返回给待测试对象的为第一数据。或者,也可以为这四条数据设置优先级,例如,第一条数据的优先级为1、第二条数据的优先级为2、第三条数据的优先级为3、第四条数据的优先级为4,在预先保存的对应关系中存在多条数据均能够完全涵盖请求消息中携带的属性信息的情况下,选择所述多条数据中优先级最高的数据返回给所述待测试对象,在这个例子中,第四条数据的优先级为最高,此时将第四条数据返回给所述待测试对象。如果多条数据中有优先级相同的数据,例如第三条数据和第四条数据的优先级均为3,在这种情况下,可以从第三条数据和第四条数据中随机选择一条数据即可,或者也可以选择保存时间比较新的数据,例如第三条数据的保存时间是2天前,第四条数据的保存时间为1天前,此时将第四条数据返回给待测试对象。
在属性信息中请求地址和请求参数具有自己的特点,下面对此分别进行说明。在请求地址中可能会包括二级域名,例如请求消息携带的请求地址为http://web1.testing-only.com/,如果预先保存的数据中有一条数据对应的属性信息为http://web1.testing-only.com/,则向待测试对象返回该数据即可。假设预先保存的数据中仅有对应属性信息为http://www.testing-only.com的数据,在这种情况下,其实web1.testing-only.com是www.testing-only.com的二级域名,二者均属于同一网站,返回属性信息为http://www.testing-only.com的数据也可以满足测试要求。此时可以使用正则表达式来进行查询,例如,可以在保存的数据中查询与属性信息中包括testing-only.com的数据,用正则表达式表示为:\<testing-only\>,其中\<\>就表示查找包括该符号内的字符的属性信息。通过使用正则表达式可以查找到上述四条数据。在该例子中使用了\<testing-only\>,正则表达式中的其他符号也可以在查询中使用。下面对常用的几个正则表达式的匹配符号进行介绍。
x|y:匹配x或y。例如,“z|food”能匹配“z”或“food”。“[z|f]ood”则匹配“zood”或“food”。
[xyz]:匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。
[a-z]:字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。
注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表示字符的范围;如果出字符组的开头,则只能表示连字符本身.
\b:匹配一个单词的边界,也就是指单词和空格间的位置(即正则表达式的“匹配”有两种概念,一种是匹配字符,一种是匹配位置,这里的\b就是匹配位置的)。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”;“\b1_”可以匹配“1_23”中的“1_”,但不能匹配“21_3”中的“1_”。
\d:匹配一个数字字符。等价于[0-9]。
\D:匹配一个非数字字符。等价于[^0-9]。
正在表达式还有其他用于进行匹配运算的符号,在此不再一一赘述。
在使用正则表达式的时候需要使用各种匹配运算的符号,使用起来相对复杂,作为另一种可选的方式也可以使用模糊查询,在模糊查询中使用*符号来代替不需要进行匹配的字符即可,例如,可以在保存的数据对应的属性信息中查找符合http://*.testing-only.com的数据,,这样就可以匹配到属性信息为http://www.testing-only.com的数据。无论使用正则表达式来进行匹配还是使用模糊查询,其本质都是匹配部分字符,即在该可选实施方式中,根据所述请求消息中携带的属性信息查找与所述请求消息对应的数据可以包括如下步骤:获取所述请求消息中携带的请求地址和/或请求参数;查找与所述请求地址和/或请求参数完全匹配的数据,或者,查找与所述请求地址和/或所述请求参数中的部分字符匹配的数据。在实施时可以首先使用请求地址和/或请求参数中的所有字符进行查找对应的数据,如果查找不到再使用请求地址和/或请求参数中的查找能够匹配到该部分字符的数据。通过该可选实施方式可以避免无法向待测试对象返回数据。
在上述实施方式中,可以根据请求消息中携带的属性信息查找对应的数据,然后将查找到数据返回给待测试对象。由于待测试对象可能需要不同的返回数据用于测试,因此,返回给所述待测试对象的数据包括以下至少之一:字符串、图片、音频、视频。
例如,在对使用Flutter编写的代码进行测试时,待测试代码会涉及到图片的获取,此时可以根据请求消息将图片返回给待测试代码。Flutter是一种用户界面(UI)工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动、Web、桌面和嵌入式平台。Flutter组件采用响应式框架构建,中心思想是用组件(widget))构建UI。组件描述了在给定其当前配置和状态时他们显示的样子。当组件状态改变,组件会重构它的描述(description),Flutter会对比之前的描述,以确定底层渲染树从当前状态转换到下一个状态所需要的最小更改。在使用Flutter构建的用户界面中会使用的图片,图片可以从本地加载也可以从网络加载。在Flutter中使用如下命令从网络加载图片:Image.network("http://www.testing-only.com/picture/test.jpg"),其中,Image.network是用于获取图片的命令,http://www.testing-only.com/picture/test.jpg是图片所在的地址。在使用Flutter编写的待测试代码在运行时,会通过网络接口将Image.network命令作为请求消息发送处理,在截获到该请求消息之后,就可以根据该请求消息中的命令名称确定需要返回图片,因此,也可以不考虑Image.network命令后携带的图片的地址,直接从保存的图片中选择一张图片返回给待测试代码即可。如果接收到的是多个Image.network命令,则可以选择多张不同的图片返回给待测试代码。通过该例子可以对使用Flutter的代码进行测试,在Flutter工具包中提供了单元测试环境,但是在Flutter提供的单元测试环境中是无法从网络得到图片的,在将上述实施方式中引入到Flutter的测试之后,就可以针对从网络加载图片的代码进行测试了。在该例子中返回的是图片,基于同样的原理也可以向待测试的代码返回字符串、音频文件或者视频文件等,在此不再一一赘述。
在上述实施方式中,与属性信息对应的数据均是预先保存下来的。这些数据可以是开发人员根据经验提前配置好的,开发人员可以根据需要进行测试的待测试对象所能发送的所有请求消息中携带的属性信息来配置对应于各种属性信息组合的数据。除了这种配置方式之外,在另一个可选的实施方式中,还可以采用自动配置的方式。待测试对象需要通过网络发送请求消息来获取数据,也就是说,如果所有的代码均开发完成的话,至少会有一个功能单元作为服务端与待测试对象进行配合,向该待测试对象提供数据。在测试阶段,预先保存的数据可以由该功能单元提供,这是因为该功能单元知道其能够处理的请求消息以及处理之后返回的数据是什么,即使该功能单元还未开发完成,该功能单元也可以提供数据和该数据所对应的属性信息。即在该可选实施方式中,在获取所述待测试对象通过所述网络接口发送的请求消息之前,所述方法还可以包括如下步骤:接收功能单元提供的属性信息以及与该属性信息对应的数据,其中,所述功能单元为向所述待测试对象提供数据的服务端,所述待测试对象在测试完成之后被使用时通过请求消息从所述服务端获取数据;保存所述功能单元发送的属性信息和与该属性信息对应的数据。通过该可选实施方式,由与待测试对象相配合的功能单元提供与各种属性信息对应的数据,这样可以确保预先保存的数据更加符合待测试对象的需要。
在由功能单元提供各种数据之后,功能单元还可以通知待测试对象可以进行测试了。在这种情况下,功能单元在提供属性信息和与该属性信息对应的数据之后,向待测试对象发送测试命令,待测试对象接收到测试命令之后得知可以进行测试了,于是发送请求消息,该请求消息被拦截后,根据请求消息中的属性信息查找数据并返回给待测试对象。即在该可选实施方式中,所述请求消息是所述待测试对象接收到测试命令之后发送的;所述测试命令是在保存所述功能单元发送的属性信息和与该属性信息对应的数据之后所述功能单元发送的。通过该可选实施方式,功能单元在提供数据之后还可以通过待测试对象开始测试,实现了测试的自动化进行。
功能单元除了提供数据之外,也希望了解使用这些数据进行测试时,测试效果如何。因此,在一个可选实施方式中,将查找到的所述数据返回给所述待测试对象之后,所述方法还可以包括如下步骤:在所述待测试对象使用所述数据进行测试之后,向提供所述数据的功能单元发送测试结果。通过该可选实施方式提供数据的功能单元可以获取测试结果,还可以根据测试结果选择是否提供新的数据,或者是否对提供的数据进行修改等。
通过上述说明可知,在一个可选实施方式中还可以提供一种测试***,该测试***可以包括拦截模块和待测试对象,拦截模块用于实行上述方法步骤。可选地,该***还可以包括上述的功能单元。下面结合图2对该***间各个模块的交互进行说明。
图2是根据本申请实施例的对待测试对象返回数据的交互示意图,在图2中将执行上述实施方式中步骤的执行方称为***(或者称为拦截模块),这是主要考虑到能够拦截到待测试对象发送的请求消息。如图2所示,功能单元(该功能单元可以是单元代码)提供数据注册,将需要模拟的请求消息和返回数据进行注册,通过注册可以将请求消息中的各种属性信息与数据进行对应,例如,请求消息为httpMock.open('http://exmaple.com')(请求消息用于打开http://exmaple.com,http://exmaple.com为该请求的属性信息),该请求消息返回的数据为“这是模拟的返回数据”,则可以将该请求消息注册为httpMock.open('http://exmaple.com').reply('这是模拟的返回数据'),这里的Mock为模拟的意思,reply为响应的意思。又例如,还可以注册httpMock.open('http://test.exmaple.com').reply('这是模拟二级域名的返回数据')。在数据被注册保存之后。***开始对全局网络请求进行拦截(由于能够拦截通过网络接口发送的所有请求消息,因此称为拦截全局网络请求)。在待测试对象发起请求消息之后,被***到之后,***会调用对该请求消息进行解析的函数,通过该请求消息的解析获取到请求相关参数如请求地址、请求方式(请求方式可以包括在请求头中)、数据要求(数据要求也可以包括在请求头中)、请求参数等。通过获取到的请求地址、请求方式、数据要求和请求参数中的至少之一去匹配注册过的模拟数据(该数据并不是服务端真实反馈的数据因此称为模拟数据)。当请求关闭时,将匹配到的模拟数据返回给待测试代码。在图2示出的流程中,通过全局拦截网络请求,适配所有网络请求库,另外返回的数据也可以是图片从而可以兼容Flutter的网络图片组件,在进行请求消息的属性信息匹配时,对于请求地址可通过正则匹配,对于请求参数可通过模糊匹配(在上文中已经进行说明在此不再赘述),从而能够尽量避免无法向待测试对象返回数据,使用更加方便。
通过上述实施方式解决了现有技术中等待所有功能单元的代码均完成之后才进行网络请求相关测试的方式会降低开发效率的问题,能够在需要进行网络请求测试时,将预先保存的与请求消息对应的数据发送给待测试对象,从而能够及时对待测试对象进行测试,提高了开发效率。
在本实施例中,提供一种电子装置,包括存储器和处理器,存储器中存储有计算机程序,处理器被设置为运行计算机程序以执行以上实施例中的方法。
上述程序可以运行在处理器中,或者也可以存储在存储器中(或称为计算机可读介质),计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
这些计算机程序也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤,对应与不同的步骤可以通过不同的模块来实现。
该本实施例中就提供了这样的一种装置。该装置被称为是一种测试装置,包括:监控模块,用于对网络接口进行监控,其中,所述网络接口为待测试对象进行网络通信的接口;获取模块,用于通过监控获取所述待测试对象通过所述网络接口发送的请求消息,其中,所述请求消息用于请求数据;查找模块,用于根据所述请求消息中携带的属性信息,在预先保存的对应关系中,查找与所述请求消息对应的数据,其中,所述对应关系保存有数据与该数据对应的一种或多种属性信息;发送模块,用于将查找到的所述数据返回给所述待测试对象。
该***或者装置用于实现上述的实施例中的方法的功能,该***或者装置中的每个模块与方法中的每个步骤相对应,已经在方法中进行过说明的,在此不再赘述。
可选地,所述请求消息中携带的属性信息包括以下至少之一:请求地址、请求方式、请求参数、数据要求,其中,所述请求地址为所述请求消息发往的目的地址,所述请求方式用于指示与接收所述请求消息的一方进行数据交互的方式,所述数据要求用于指示所述待测试对象对接收的数据的要求,所述请求参数用于获取与该请求参数对应的响应数据。
可选地,所述查找模块,用于在所述对应关系中查找涵盖所述请求消息中携带的属性信息最多的一条对应关系;将查找到的一条对应关系中的数据作为所述请求消息对应的数据。
可选地,所述查找模块,用于获取所述请求消息中携带的请求地址和/或请求参数;查找与所述请求地址和/或请求参数完全匹配的数据,或者,查找与所述请求地址和/或所述请求参数中的部分字符匹配的数据。
可选地,所述查找模块,用于获取所述请求消息中携带的数据要求,查找与所述数据要求相符合的数据;和/或,获取所述请求消息中携带的请求方式,根据所述请求方式对所述请求消息中要求进行处理的数据进行处理后,返回处理结果。
可选地,还包括:保存模块,用于接收功能单元提供的属性信息以及与所述属性信息对应的数据,其中,所述功能单元为向所述待测试对象提供数据的服务端,所述待测试对象在测试完成之后被使用时通过请求消息从所述功能单元获取数据;保存所述功能单元发送的属性信息和与该属性信息对应的数据。
可选地,所述请求消息是所述待测试对象接收到测试命令之后发送的;所述测试命令是在保存所述功能单元发送的属性信息和与该属性信息对应的数据之后,所述功能单元发送的。
可选地,还包括:提供模块,用于在所述待测试对象使用所述数据进行测试之后,向提供所述数据的功能单元发送测试结果。
可选地,返回给所述待测试对象的数据包括以下至少之一:字符串、图片、音频、视频。
通过上述实施方式,拦截了全局网络请求,对待测试对象的请求消息进行获取与匹配,返回指定的数据,以达到单元测试时对网络请求的数据模拟更加智能便利且不用侵入原有代码的目的,解决了现有技术中等待所有功能单元的代码均完成之后才进行网络请求相关测试的方式会降低开发效率的问题,能够在需要进行网络请求测试时,将预先保存的与请求消息对应的数据发送给待测试对象,从而能够及时对待测试对象进行测试,提高了开发效率。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (14)
1.一种测试方法,包括:
对网络接口进行监控,其中,所述网络接口为待测试对象进行网络通信的接口;
通过监控获取所述待测试对象通过所述网络接口发送的请求消息,其中,所述请求消息用于请求数据;
根据所述请求消息中携带的属性信息,在预先保存的对应关系中,查找与所述请求消息对应的数据,其中,所述对应关系保存有数据与该数据对应的一种或多种属性信息;
将查找到的所述数据返回给所述待测试对象。
2.根据权利要求1所述的方法,其中,根据所述请求消息中携带的属性信息,在所述对应关系中,查找与所述请求消息对应的数据包括:
在所述对应关系中查找涵盖所述请求消息中携带的属性信息最多的一条对应关系;
将查找到的所述一条对应关系中的数据作为所述请求消息对应的数据。
3.根据权利要求1所述的方法,其中,所述请求消息中携带的属性信息包括以下至少之一:
请求地址、请求方式、请求参数、数据要求,其中,所述请求地址为所述请求消息发往的目的地址,所述请求方式用于指示与接收所述请求消息的一方进行数据交互的方式,所述数据要求用于指示所述待测试对象对接收的数据的要求,所述请求参数用于获取与所述请求参数对应的响应数据。
4.根据权利要求3所述的方法,其中,根据所述请求消息中携带的属性信息,在所述对应关系中,查找与所述请求消息对应的数据包括:
获取所述请求消息中携带的请求地址和/或请求参数;查找与所述请求地址和/或请求参数完全匹配的数据,或者,查找与所述请求地址和/或所述请求参数中的部分字符匹配的数据;
和/或,
获取所述请求消息中携带的数据要求,查找与所述数据要求相符合的数据;
和/或,
获取所述请求消息中携带的请求方式,根据所述请求方式对所述请求消息中要求进行处理的数据进行处理后,返回处理结果。
5.根据权利要求1至4中任一项所述的方法,其中,在获取所述待测试对象通过所述网络接口发送的请求消息之前,所述方法还包括:
接收功能单元提供的属性信息以及与所述属性信息对应的数据,其中,所述功能单元为向所述待测试对象提供数据的服务端,所述待测试对象在测试完成之后被使用时通过请求消息从所述功能单元获取数据;
保存所述功能单元发送的属性信息和与该属性信息对应的数据。
6.根据权利要求5所述的方法,其中,所述请求消息是所述待测试对象接收到测试命令之后发送的;所述测试命令是在保存所述功能单元发送的属性信息和与该属性信息对应的数据之后,所述功能单元发送的。
7.根据权利要求5所述的方法,其中,将查找到的所述数据返回给所述待测试对象之后,所述方法还包括:
在所述待测试对象使用所述数据进行测试之后,向提供所述数据的功能单元发送测试结果。
8.根据权利要求1至4中任一项所述的方法,其中,返回给所述待测试对象的数据包括以下至少之一:字符串、图片、音频、视频。
9.一种测试装置,包括:
监控模块,用于对网络接口进行监控,其中,所述网络接口为待测试对象进行网络通信的接口;
获取模块,用于通过监控获取所述待测试对象通过所述网络接口发送的请求消息,其中,所述请求消息用于请求数据;
查找模块,用于根据所述请求消息中携带的属性信息在预先保存的对应关系中,查找与所述请求消息对应的数据,其中,所述对应关系保存有数据与该数据对应的一种或多种属性信息;
发送模块,用于将查找到的所述数据返回给所述待测试对象。
10.一种测试***,其中,包括:拦截模块和待测试对象,
所述拦截模块用于执行权利要求1至8中任一项所述的方法。
11.根据权利要求10所述的测试***,其中,还包括:
功能单元,用于向所述拦截模块提供的属性信息以及与所述属性信息对应的数据,其中,所述功能单元为向所述待测试对象提供数据的服务端,所述待测试对象在测试完成之后被使用时通过请求消息从所述服务端获取数据。
12.根据权利要求11所述的测试***,其中,所述功能单元还用于发送测试命令,其中,所述测试命令用于指示所述待测试对象在接收到所述测试命令之后发送所述请求消息;和/或,所述功能单元还用于接收在所述待测试对象使用所述数据进行测试之后,得到的测试结果。
13.一种电子设备,包括存储器和处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现权利要求1至8任一项所述的方法步骤。
14.一种可读存储介质,其上存储有计算机指令,其中,该计算机指令被处理器执行时实现权利要求1至8任一项所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211292550.6A CN115914049A (zh) | 2022-10-21 | 2022-10-21 | 一种测试方法、装置、***、电子设备和可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211292550.6A CN115914049A (zh) | 2022-10-21 | 2022-10-21 | 一种测试方法、装置、***、电子设备和可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115914049A true CN115914049A (zh) | 2023-04-04 |
Family
ID=86475323
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211292550.6A Pending CN115914049A (zh) | 2022-10-21 | 2022-10-21 | 一种测试方法、装置、***、电子设备和可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115914049A (zh) |
-
2022
- 2022-10-21 CN CN202211292550.6A patent/CN115914049A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10949335B2 (en) | Designer defined mocking service behavior | |
CN107203555B (zh) | 页面加载处理方法及装置 | |
CN109800258B (zh) | 数据文件部署方法、装置、计算机设备及存储介质 | |
US10963370B2 (en) | Default mock implementations at a server | |
CN106484611B (zh) | 基于自动化协议适配的模糊测试方法和装置 | |
CN107133180A (zh) | 动态页面的测试方法、测试装置及存储介质 | |
US10686821B2 (en) | Analysis of mobile applications | |
US10754717B2 (en) | Fast and accurate identification of message-based API calls in application binaries | |
US20150161390A1 (en) | Fast and accurate identification of message-based api calls in application binaries | |
EP1576487A1 (en) | Web server hit multiplier and redirector | |
CN112311786B (zh) | 一种服务请求处理方法、装置、存储介质及计算设备 | |
US20200401502A1 (en) | Detecting Hard-Coded Strings In Source Code | |
CN106776318A (zh) | 一种测试脚本录制方法及*** | |
CN104834588A (zh) | 检测常驻式跨站脚本漏洞的方法和装置 | |
CN112866348A (zh) | 数据库访问方法、装置、计算机设备和存储介质 | |
US11768759B2 (en) | Method and system for automated testing of web service APIs | |
CN112860507B (zh) | 分布式链路跟踪***采样率的控制方法和装置 | |
CN112699034B (zh) | 虚拟登录用户构建方法、装置、设备及存储介质 | |
CN112379965B (zh) | 沙盒文件映射***、客户端装置、映射端装置、沙盒文件映射方法以及电子设备 | |
CN111563260B (zh) | 一种面向安卓应用程序的Web注入代码执行漏洞检测方法及*** | |
US11768889B1 (en) | Evaluating configuration files for uniform resource indicator discovery | |
CN115914049A (zh) | 一种测试方法、装置、***、电子设备和可读存储介质 | |
CN110515905B (zh) | 一种路由的配置的方法、装置以及服务器 | |
CN109831496B (zh) | 一种终端数据的调试方法 | |
CN116627851B (zh) | 接口测试方法以及装置 |
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 |