发明内容
本说明书实施例旨在提供一种更有效的自动测试方案,以解决现有技术中的不足。
为实现上述目的,本说明书一个方面提供一种自动测试方法,包括:
获取与第一待测试对象对应的第一测试配置文件,其中,所述第一测试配置文件中包括顺序排列的至少一个测试用例,每个测试用例中包括对预制的多个功能模块中的一个功能模块的调用、和对该功能模块的输入数据和输出数据的配置,其中,每个功能模块与测试中的一个操作对应;以及
针对所述第一待测试对象,依照所述至少一个测试用例的排列顺序,基于各个测试用例中对相应功能模块的输入数据和输出数据的配置,顺序调用各个测试用例中的功能模块,从而获取与该第一测试配置文件对应的测试结果。
在一个实施例中,所述第一待测试对象为区块链中的第一节点。
在一个实施例中,每个所述功能模块分别对应于以下操作中的一项:创建账户、转账、发送交易、验证交易、查询消息、查询账户余额、数值比较、创建智能合约、调用智能合约、执行智能合约、生成区块、发送区块、存储区块。
在一个实施例中,所述方法在测试服务器中执行,所述方法还包括,在获取与第一待测试对象对应的第一测试配置文件之后,获取第一节点的连接配置信息,并基于所述连接配置信息连接所述第一节点。
在一个实施例中,所述多个功能模块中包括第一功能模块,所述第一功能模块包括的操作包括:指示所述第一节点进行区块链中的预定操作,从所述第一节点接收所述预定操作的执行结果并输出。
在一个实施例中,所述方法还包括,在获取与第一待测试对象对应的第一测试配置文件之后,将该第一测试配置文件转换为程序可读的形式。
在一个实施例中,所述方法还包括,在获取与该第一测试配置文件对应的测试结果之后,基于所述测试结果,进行结果统计。
在一个实施例中,在所述顺序排列的至少一个测试用例中,对于其中连续排列的两个测试用例,将前面的测试用例的输出数据配置为后面的测试用例的输入数据。
本说明书另一方面提供一种自动测试装置,包括:
获取单元,配置为,获取与第一待测试对象对应的第一测试配置文件,其中,所述第一测试配置文件中包括顺序排列的至少一个测试用例,每个测试用例中包括对预制的多个功能模块中的一个功能模块的调用、和对该功能模块的输入数据和输出数据的配置,其中,每个功能模块与测试中的一个操作对应;以及
调用单元,配置为,针对所述第一待测试对象,依照所述至少一个测试用例的排列顺序,基于各个测试用例中对相应功能模块的输入数据和输出数据的配置,顺序调用各个测试用例中的功能模块,从而获取与该第一测试配置文件对应的测试结果。
在一个实施例中,所述第一待测试对象为区块链中的第一节点,其中,所述装置部署在测试服务器中,所述装置还包括,连接单元,配置为,在获取与第一待测试对象对应的第一测试配置文件之后,获取第一节点的连接配置信息,并基于所述连接配置信息连接所述第一节点。
在一个实施例中,所述装置还包括,接口单元,配置为,在获取与第一待测试对象对应的第一测试配置文件之后,将该第一测试配置文件转换为程序可读的形式。
在一个实施例中,所述装置还包括,统计单元,配置为,在获取与该第一测试配置文件对应的测试结果之后,基于所述测试结果,进行结果统计。
本说明书另一方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述任一项方法。
本说明书另一方面提供一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述任一项方法。
通过根据本说明书实施例的自动测试方案,实现了可配置的、插件化的数据驱动的自动测试框架,测试人员在书写测试用例时只需要配置对应的测试文件,而不需要熟悉具体的开发语言,降低了测试用例编写成本,提高了测试效率。
具体实施方式
下面将结合附图描述本说明书实施例。
图1示出根据本说明书实施例的自动测试框架100的示意图。如图1所示,框架100包括输入模块11、调用模块12、功能模块13和输出模块14。所述测试框架100例如可以部署在测试服务器,该测试服务器例如通过连接区块链中各个节点而通过各个节点测试区块链中的相应服务。例如,在将要对区块链中的第一节点进行测试时,首先通过输入模块11获取第一节点的连接配置信息及与该节点对应的测试配置文件。例如,可通过输入模块11以输入命令行的形式输入第一节点的连接配置信息和与第一节点对应的测试配置文件的文件路径,从而可通过文件路径获取该测试配置文件,并通过第一节点的连接配置信息与所述第一节点建立连接。其中,所述测试配置文件中包括对至少一个功能模块13的调用。所述输入模块11中还可以包括接口模块(未示出),用于对测试配置文件的数据形式进行转换。调用模块12由框架100在获取各个测试配置文件之后基于各个测试配置文件生成,一个调用模块与一个测试配置文件相对应,此处仅示出一个调用模块用于示意示出。在调用模块12中,基于测试配置文件执行对所述至少一个(图中示意示出3个)功能模块13的调用,并获取测试结果,其中每个功能模块对应于测试中的一个具体功能操作。然后,调用模块12将测试结果发送给输出模块14以用于对该测试结果的统计、生成报告、配置日志等处理。上述只是示例性地说明,而不用于限定本说明书实施例的范围。例如,在上述所述测试框架部署在非节点的测试服务器的情况中,在输入模块11,可获取顺序排列的多个(节点连接配置信息、与该节点对应的至少一个测试配置文件)信息组,从而可通过多个调用模块12顺序执行对多个节点的测试,其中在执行对每个节点的测试之前,通过与该节点对应的连接配置信息连接该节点;所述测试框架也可以部署在待测试节点本地,从而不需要连接节点的步骤;另外,所述测试框架不限于用于测试区块链***,而是可以用于测试其它软件、软件***等。
下面详细描述上述通过自动测试框架的测试过程。
图2示出根据本说明书实施例的一种自动测试方法流程图,包括:
在步骤S202,获取与第一待测试对象对应的第一测试配置文件,其中,所述第一测试配置文件中包括顺序排列的至少一个测试用例,每个测试用例中包括对预制的多个功能模块中的一个功能模块的调用、和对该功能模块的输入数据和输出数据的配置,其中,每个功能模块与测试中的一个操作对应;
在步骤S204,针对所述第一待测试对象,依照所述至少一个测试用例的排列顺序,基于各个测试用例中对相应功能模块的输入数据和输出数据的配置,顺序调用各个测试用例中的功能模块,从而获取与该第一测试配置文件对应的测试结果。
该方法针对特定的待测试对象执行,所述待测试对象例如为区块链中的任一节点,例如第一节点。如图1中所示,所述自动测试框架中包括预制的多个功能模块,每个功能模块与测试中的一个操作相对应。该实施例不限于用于测试区块链***。当该自动测试框架应用的***不同时,其中包括的预制功能模块也相应地不同,即,所述功能模块与在测试待测试***时可能需要用到的各项操作相对应。例如,在自动测试框架用于区块链***的测试时,所述功能模块对应的功能操作包括:创建账户、转账、发送交易、验证交易、查询消息、查询账户余额、数值比较、创建智能合约、调用智能合约、执行智能合约、生成区块、发送区块、存储区块等。
在一个实施例中,该方法可在第一节点本地执行。在一个实施例中,该方法在测试服务器执行,测试服务器通过连接第一节点而进行针对第一节点的测试。可以理解,根据本说明书实施例,对于部署在测试服务器中的自动测试框架,可一次性输入多组信息,每组信息包括与一个节点对应的连接配置信息和至少一个测试配置文件,从而可自动先后与多个节点连接,并针对多个节点进行图2所示方法以对其分别进行至少一种测试。下面对该方法的每个步骤进行具体说明。
首先,在步骤S202,获取与第一待测试对象对应的第一测试配置文件,其中,所述第一测试配置文件中包括顺序排列的至少一个测试用例,每个测试用例中包括对预制的多个功能模块中的一个功能模块的调用、和对该功能模块的输入数据和输出数据的配置,其中,每个功能模块与测试中的一个操作对应。
如上文所述,自动测试框架可通过获取测试文件路径而读取相应的测试配置文件。所述第一测试配置文件对应于对第一待测试对象(例如第一节点)的一项测试,该测试配置文件中包括顺序排列的至少一个测试用例,该顺序排列的至少一个测试用例即对应于该项测试中顺序执行的至少一步操作,每步所述操作是通过调用图1中所示的一个功能模块实施的,因此,在每个测试用例中包括对一个功能模块的调用、以及对该功能模块的输入数据和输出数据的配置。如上文所述,在所述自动测试框架应用于测试区块链的情况中,所述功能模块分别对应于以下任一操作:创建账户、转账、发送交易、验证交易、查询消息、查询账户余额、数值比较、创建智能合约、调用智能合约、执行智能合约、生成区块、发送区块、存储区块。
在所述自动测试框架部署在测试服务器上的情况中,所述方法还包括,在获取与第一节点对应的第一测试配置文件之后,获取第一节点的连接配置信息,并基于所述连接配置信息连接所述第一节点。所述连接配置信息例如包括第一节点的IP地址和端口、第一节点的密钥信息等。测试服务器可通过IP地址和端口号对第一节点进行连接,并通过第一节点提供的密钥信息与第一节点进行加密通信等。
在上述测试服务器的情况下,当所述功能模块对应的第一操作需要通过区块链中节点执行时,从而该功能模块包括的全部操作包括:指示服务器连接上的节点(即第一节点)执行所述第一操作,从第一节点接收第一操作的执行结果,以及输出执行结果,从而实现远程操控测试服务器连接的节点完成测试。
所述测试配置文件可通过各种配置文件格式实现,例如Json文件、XML文件等,只要该配置文件包括上述各项内容且可被程序解析即可。下面示出了Json文件形式的测试配置文件中包括的一个测试用例。
其中,“Test-N-001”为该测试用例的编号,该测试用例对应于“账户查询”操作,其中“type”表示对功能模块“QueryAccount(查询账户功能模块)”的调用,其中的“input”表示对该功能模块“QueryAccount”的输入数据的配置,即输入为账户地址“c60a9d48…”,其中的“output”表示对该功能模块的输出数据的配置,即将查询账户的结果赋值给参数“{abcde}”等等。相应地,该测试配置文件中还可以包括排列在测试用例“Test-N-001”之后的测试用例“Test-N-002”,该测试用例“Tes t-N-002”例如可调用对应于数值比较的功能模块(Asserter(断言功能模块)),以测试用例“Test-N-001”的输出(即实际账户余额)与期望账户余额作为输入,并对其进行比较,并以比较结果作为输出。从而通过测试用例“Test-N-001”和测试用例“Test-N-002”可完成对第一节点的查询账户余额服务的测试。
在步骤S204,针对所述第一待测试对象,依照所述至少一个测试用例的排列顺序,基于各个测试用例中对相应功能模块的输入数据和输出数据的配置,顺序调用各个测试用例中的功能模块,从而获取与该第一测试配置文件对应的测试结果。
例如对于上述区块链中的第一节点,当使用上述包括两个测试用例(Test-N-001和Test-N-002)的测试配置文件对第一节点进行测试的情况中,按照测试用例的排列顺序,针对第一节点执行相应的调用,也就是说,先对Test-N-001中的查询账户功能模块进行调用,从而使得第一节点使用区块链中查询账户的服务,然后对Test-N-002中的断言功能模块进行调用,以确定第一节点查询到的账户余额是否与预期相符。在调用每个功能模块之前,可进行测试用例的前置处理,例如基于配置文件(例如上述Json)文件进行对象构造,对输入数据进行类型转换等。在每次获得调用功能模块的输出值之后,可进行测试用例的后置处理,如对输出数据进行格式化,即将输出数据封装成特定格式。在顺序执行了该测试配置文件中的各个测试用例之后,最后获取该测试配置文件对应的对第一节点的查询余额测试的测试结果,从而可对测试区块链的查询账户余额服务是否正常进行测试。
在获取所述测试结果之后,可基于所述测试结果,进行结果统计。
该测试结果仅仅为对第一待测试对象(例如第一节点)的一个测试的测试结果,例如,在通过部署在测试服务器中的自动测试框架对区块链的各项功能、性能进行测试的情况中,测试框架可能会对区块链中的至少一个节点进行测试,对于每个节点进行至少一项测试,因此,所述对测试结果的统计可以是在对单个节点的测试结果的统计中增加该测试结果,也可以是在对区块链中多个节点的测试结果的统计中增加该测试结果。
图3示意示出了在对区块链进行测试中多次执行图2所示方法的循环图。如图3中所示,在测试框架获取至少一个节点的连接配置信息、以及与各个节点对应的至少一个测试文件路径之后,测试框架进行针对至少一个节点的最外层循环,针对每个节点的各个测试配置文件的中间层循环,以及针对每个测试配置文件中各个测试用例的最内层循环。具体是,在步骤S302,测试框架首先获取各个节点的连接配置信息、以及与每个节点对应的至少一个文件路径,其中每个文件路径与针对该节点的一个测试配置文件相对应。在步骤S304,开始执行相对于各个节点的循环,对于其中的一个节点,基于该节点的连接配置信息连接该节点,并基于相应的至少一个文件路径获取与该节点对应的至少一个测试配置文件。在步骤S306,开始执行中间层循环,并在中间层循环之下执行最内层循环,即,对于各个测试配置文件中的一个测试配置文件,在最内层循环中基于该测试配置文件的各个测试用例进行对各个功能模块的顺序调用。图中的“是”表示循环结束,“否”表示循环未结束。当最内层循环结束时,执行步骤S308,即,对于该循环针对的节点,进行针对该节点的结果统计。在步骤S308之后,确定中间层循环是否结束,也就是说,确定对于该节点的各个测试配置文件是否都执行了步骤S306的内层循环,在中间层循环未结束的情况中,回到步骤S306,继续进行对下一个测试配置文件中各个测试用例的功能模块调用,在中间层循环结束的情况中,可在步骤S310进行针对区块链的结果统计,即在针对区块链的统计中增加针对该节点的统计。之后,确定最外层循环是否结束,即,确定是否对与各个节点连接信息对应的各个节点是否进行过上述步骤,在未结束的情况中,回到步骤S304,重新执行上述步骤,在结束的情况中,该自动测试过程结束。
在图3所示进行节点级的结果统计以及进行区块链级的结果统计之后,还基于所述统计生成测试报告,并且/或者基于所述统计进行测试日志的配置管理,例如调整各级别测试日志是否可见的参数等等。
图4示出根据本说明书实施例的自动测试框架的执行流程图。所述流程图对应于在区块链中对节点进行多项测试的实例,可以理解,该流程图只是示意性的,并不用于限制本说明书实施例的范围。具体是,在步骤S401,框架执行主体生成框架实例,框架执行主体也即框架的主程序。在步骤S402,测试人员可通过命令行输入列如各个测试配置文件的文件路径,从而框架可基于该文件路径获取各个测试配置文件,在通过部署在测试服务器(其不是区块链中任一节点)的框架对各个节点进行测试的情况中,在该步骤中,框架还可以获取由测试人员通过命令行输入的各个节点的连接配置信息,如IP地址、端口号等,并且所述各个测试配置文件分别与各个节点相对应,其中,一个节点可对应于至少一个测试配置文件,即对一个节点进行至少一项测试。在步骤S403,该框架实例加载并注册已有的预制好的多个功能模块。在步骤S404,框架执行主体将获取的测试配置文件发送给接口模块,以对该测试配置文件进行数据转换处理,以将其转换为程序可读数据。在步骤S405,接口模块将经转换的测试配置文件发送给执行主体。
从步骤S406-S412为循环1,该循环1的次数对应于测试配置文件的数目。其中,当该实例对多个节点进行测试的情况中,该循环1包括图3中的外层循环和中间层循环,其中,对于不同的节点,还包括连接节点的步骤(图中未示出)。从步骤S407-步骤S410为循环2,该循环2的次数对应于一个测试配置文件中包括的测试用例的个数。具体是,在步骤S406,执行主体对于多个测试配置文件中的一个测试配置文件,基于该测试配置文件创建对应的调用模块,以用于执行后续的调用步骤。在步骤S407,对于上述测试配置文件中的一个测试用例,调用模块执行调用前置处理。在步骤S408,调用模块基于该测试用例中的对待调用的功能模块的配置,调用相应的功能模块,在调用的过程中,将该测试用例中配置的输入数据输入相应的功能模块。在步骤S409,功能模块基于上述输入数据输出执行结果,并基于测试用例中对输入数据的配置对该执行结果进行处理,并返回调用结果。在步骤S410,调用模块对调用结果进行调用后置处理。
在步骤S411,在对上述测试配置文件包括的多个测试用例的循环2结束之后,对于对应的节点进行节点级别的结果统计。在步骤S412,调用模块将获取的节点级的结果统计发送给执行主体。在步骤S413,在对各个测试配置文件的循环1结束之后,在该循环1包括对多个节点的循环的情况中,进行区块链级别的结果统计。其中,执行主体中进行步骤S411和步骤S413的部分对应于图1中输出模块的一部分。
图5示出根据本说明书实施例的一种自动测试装置500,包括:
获取单元51,配置为,获取与第一待测试对象对应的第一测试配置文件,其中,所述第一测试配置文件中包括顺序排列的至少一个测试用例,每个测试用例中包括对预制的多个功能模块中的一个功能模块的调用、和对该功能模块的输入数据和输出数据的配置,其中,每个功能模块与测试中的一个操作对应;以及
调用单元52,配置为,针对所述第一待测试对象,依照所述至少一个测试用例的排列顺序,基于各个测试用例中对相应功能模块的输入数据和输出数据的配置,顺序调用各个测试用例中的功能模块,从而获取与该第一测试配置文件对应的测试结果。
在一个实施例中,所述第一待测试对象为区块链中的第一节点,其中,所述装置部署在测试服务器中,所述装置还包括,连接单元53,配置为,在获取与第一待测试对象对应的第一测试配置文件之后,获取第一节点的连接配置信息,并基于所述连接配置信息连接所述第一节点。
在一个实施例中,所述装置还包括,接口单元54,配置为,在获取与第一待测试对象对应的第一测试配置文件之后,将该第一测试配置文件转换为程序可读的形式。
在一个实施例中,所述装置还包括,统计单元55,配置为,在获取与该第一测试配置文件对应的测试结果之后,基于所述测试结果,进行结果统计。
本说明书另一方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述任一项方法。
本说明书另一方面提供一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述任一项方法。
通过根据本说明书实施例的自动测试方案,实现了可配置的、插件化的数据驱动的自动测试框架,测试人员在书写测试用例时只需要配置对应的测试文件,而不需要熟悉具体的开发语言,降低了测试用例编写成本,提高了测试效率。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于***实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本领域普通技术人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执轨道,取决于技术方案的特定应用和设计约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执轨道的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。