掌桥专利:专业的专利平台
掌桥专利
首页

区块链测试的方法、装置和电子设备

文献发布时间:2023-06-19 12:18:04


区块链测试的方法、装置和电子设备

技术领域

本发明涉及区块链技术领域,尤其是涉及一种区块链测试的方法、装置和电子设备。

背景技术

区块链技术是一种具有普适性的底层技术,在金融、文化、科技、政务等领域都有广泛的应用前景。随着区块链技术与应用的快速发展,越来越多的研发人员对底层区块链平台进行自主研发,但自主研发的区块链平台本身在开发过程中也会出现问题,需要通过版本升级来完善和改进区块链平台本身的功能,因而,在区块链平台迭代升级或者运行环境变更时,需要对自主研发的底层区块链平台进行测试,以发现和定位存在的问题。

相关技术中,在对自主研发的底层区块链平台进行测试时,通常采用手动测试和自动化测试两种方案,但是手动测试需要消耗大量的人力和时间,测试效率较低。另外,目前的自动化测试需要在区块链中加入内置的测试节点,导致对原本的区块链平台入侵性强,一旦测试节点出现问题,有可能影响到区块链上真实节点的正常工作。

发明内容

本发明的目的在于提供一种区块链测试的方法、装置和电子设备,以在避免对区块链的入侵的同时,减少区块链测试的人力和时间消耗,提高测试效率。

第一方面,本发明提供了一种区块链测试的方法,该方法应用于被测区块链的节点设备;该被测区块链与第一设备连接;该方法包括:响应于来自第一设备的合约调用指令,执行被测区块链上的智能合约,以测试被测区块链;其中,该智能合约用于:获取执行预设的测试用例集所需的测试数据,并执行测试用例集中的测试用例,得到每个测试用例的测试结果,通知第一设备查询每个测试用例的测试结果;然后接收来自第一设备的查询请求,以使第一设备获取每个测试用例的测试结果。

在可选的实施方式中,上述智能合约通过下述方式部署在被测区块链上:响应于来自第一设备的第一部署指令,将智能合约部署在被测区块链上。

在可选的实施方式中,上述响应于来自第一设备的第一部署指令,将智能合约部署在被测区块链上的步骤之后,上述方法还包括:响应于来自第一设备的第二部署指令,将测试用例集部署在被测区块链上,并将测试用例集的部署地址写入智能合约指定的数组中;其中,该测试用例集用于测试被测区块链的基本功能;该基本功能包括以下至少一种:通信功能、节点共识功能、数据存储功能和EVM执行功能。

在可选的实施方式中,上述获取执行预设的测试用例集所需的测试数据的步骤,包括:将执行测试用例集中的每个测试用例所需的数据,确定为测试数据;其中,该测试数据包括测试账户和智能合约调用参数组;从被测区块链中获取测试数据。

在可选的实施方式中,上述执行测试用例集中的测试用例,得到每个测试用例的测试结果的步骤,包括:调用测试用例集中的测试用例;采用串行或者并行的方式,基于测试数据执行测试用例,得到每个测试用例的测试结果。

在可选的实施方式中,上述执行测试用例集中的测试用例,得到每个测试用例的测试结果的步骤之后,该方法还包括:对测试用例集中的每个测试用例的测试结果进行汇总处理;和/或,对测试用例集中的每个测试用例的测试结果进行存储。

在可选的实施方式中,上述测试结果包括测试失败和测试成功;上述通知第一设备查询每个测试用例的测试结果的步骤之后,上述方法还包括:根据被测区块链的监控报警机制,将测试用例集中测试失败的测试用例的测试结果,通知指定设备。

第二方面,本发明提供了一种区块链测试的方法,该方法应用于第一设备;该第一设备与被测区块链连接;该方法包括:响应于监听到指定事件,向被测区块链的节点设备发送合约调用指令,以使节点设备执行被测区块链上的智能合约,测试被测区块链;其中,该智能合约用于:获取执行预设的测试用例集所需的测试数据,并执行测试用例集中的测试用例,得到每个测试用例的测试结果,通知第一设备查询每个测试用例的测试结果;响应节点设备发送的通知,向节点设备发送查询请求,以获取每个测试用例的测试结果。

在可选的实施方式中,上述指定事件包括被测区块链版本升级事件、区块链节点IP列表变更事件和用户自定义事件;上述响应于监听到指定事件,向被测区块链的节点设备发送合约调用指令的步骤,包括:监听被测区块链是否发生指定事件,如果被测区块链发生指定事件,向该被测区块链的节点设备发送合约调用指令。

第三方面,本发明提供了一种区块链测试的装置,该装置设置于被测区块链的节点设备;该被测区块链与第一设备连接;该装置包括:指令接收模块,用于响应于来自第一设备的合约调用指令,执行被测区块链上的智能合约,以测试该被测区块链;其中,该智能合约用于:获取执行预设的测试用例集所需的测试数据,并执行该测试用例集中的测试用例,得到每个测试用例的测试结果,通知第一设备查询每个测试用例的测试结果;结果返回模块,用于接收来自第一设备的查询请求,以使第一设备获取每个测试用例的测试结果。

第四方面,本发明提供了一种区块链测试的装置,该装置设置于第一设备;该第一设备与被测区块链连接;该装置包括:指令发送模块,用于响应于监听到指定事件,向被测区块链的节点设备发送合约调用指令,以使节点设备执行被测区块链上的智能合约,测试被测区块链;其中,该智能合约用于:获取执行预设的测试用例集所需的测试数据,并执行测试用例集中的测试用例,得到每个测试用例的测试结果,通知第一设备查询每个测试用例的测试结果;结果获取模块,用于响应节点设备发送的通知,向节点设备发送查询请求,以获取每个测试用例的测试结果。

第五方面,本发明提供了一种电子设备,该电子设备包括处理器和存储器,该存储器存储有能够被处理器执行的机器可执行指令,该处理器执行机器可执行指令以实现前述实施方式任一项所述的区块链测试的方法。

第六方面,本发明提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令在被处理器调用和执行时,该计算机可执行指令促使处理器实现前述实施方式任一项所述的区块链测试的方法。

本发明实施例带来了以下有益效果:

本发明提供的一种区块链测试的方法、装置和电子设备,首先被测区块链的节点设备响应于来自第一设备的合约调用指令,执行被测区块链上的智能合约,以测试被测区块链;该智能合约用于:获取执行预设的测试用例集所需的测试数据,并执行测试用例集中的测试用例,得到每个测试用例的测试结果,通知第一设备查询每个测试用例的测试结果;然后节点设备接收来自第一设备的查询请求,以使第一设备获取每个测试用例的测试结果。该方式通过预先在被测区块链上部署的智能合约,对被测区块链进行自动测试,该方式无需在区块链上单独部署测试节点,避免了区块链引入功能性的节点带来的侵入问题,提高了区块链运行的稳定性;同时,该方式可自动化完成区块链的测试,提高了区块链测试的效率。

本发明的其他特征和优点将在随后的说明书中阐述,或者,部分特征和优点可以从说明书推知或毫无疑义地确定,或者通过实施本发明的上述技术即可得知。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施方式,并配合所附附图,作详细说明如下。

附图说明

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

图1为本发明实施例提供的一种区块链测试的方法的流程图;

图2为本发明实施例提供的另一种区块链测试的方法的流程图;

图3为本发明实施例提供的另一种区块链测试的方法的流程图;

图4为本发明实施例提供的一种区块链测试的装置的结构示意图;

图5为本发明实施例提供的另一种区块链测试的装置的结构示意图;

图6为本发明实施例提供的一种电子设备的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。

因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

区块链技术是一种具有普适性的底层技术,在金融、文化、科技、政务等领域都有广泛的应用场景。按照目前的区块链技术的发展脉络,区块链技术经历了以比特币为典型代表的数字加密货币体系的区块链1.0时代,处于以以太坊为典型代表的区块链2.0时代,并向着实现可编程社会的区块链3.0时代发展。

不同于1.0时代的比特币体系,以太坊提供了图灵完备的脚本语言,支持开发者在该区块链平台上创建和发布任意去中心化的应用程序。随着区块链技术与应用的快速发展,业内出现了越来越多的自主研发的底层区块链平台,它们类似于以太坊平台,能够支持智能合约脚本的运行,同时对以太坊原有的功能做某些方面的拓展以满足具体业务需求。自主研发的区块链平台本身在开发过程中也会出现问题,需要通过版本升级来完善和改进区块链平台本身的功能,而且在区块链平台迭代升级或者运行环境变更等情况出现时,需要对自主研发的底层区块链平台进行测试,以发现和定位区块链存在的问题。

对于自主研发的底层区块链平台的测试,目前大多采用手动测试,但是该手动测试方式需要消耗大量的人力和时间,测试效率较低。基于此,相关技术中提供了一种自动化测试方案,该自动化测试需要在区块链中加入内置了测试用例的测试节点,通过该测试节点实现对区块链的自动测试;但是该方式需要依赖测试节点,且加区块链平台中加入新的测试节点对原本的区块链平台入侵性强,一旦测试节点出现问题,有可能影响区块链上真实节点的正常工作。

基于上述问题,本发明实施例提供了一种区块链测试的方法、装置和电子设备,该技术可以应用于公链、联盟链、私有链或者自主研发的区块链等各种区块链的功能测试场景中。

为便于对本实施例进行理解,首先对本发明实施例所公开的一种区块链测试的方法进行详细介绍,该方法应用于被测区块链的节点设备;该被测区块链可以是公链、联盟链、私链或者自主研发的区块链等,通常被测区块链中包含有多个节点设备,本方法可以应用于被测区块链上的任意一个节点设备,也即是本发明不会改变区块链的结构,也不会引入新的节点设备;该被测区块链与第一设备连接,也即是该第一设备可以与被测区块链中的任意一个节点设备或者多个节点设备进行通信;如图1所示,该方法包括如下具体步骤:

步骤S102,响应于来自第一设备的合约调用指令,执行被测区块链上的智能合约,以测试被测区块链;其中,该智能合约用于:获取执行预设的测试用例集所需的测试数据,并执行测试用例集中的测试用例,得到每个测试用例的测试结果,通知第一设备查询每个测试用例的测试结果。

上述第一设备可以是能够与被测区块链上的节点设备进行通信的设备,该第一设备通常是运行在被测区块链之外的设备,该设备可以是手机、平板电脑、笔记本电脑或者计算机等。在具体实现时,上述第一设备可以预先将用于测试区块链的智能合约部署在被测区块链上,以使被测区块链能够通过该智能合约进行测试。

在具体实现时,测试人员可以通过第一设备触发合约调用指令,也可以在第一设备监听到指定事件后自动触发合约调用指令,该第一合约调用指令触发后,第一设备会将该合约调用指令发送至被测区块链中的任意节点设备上,以使该节点设备执行被测区块链上部署的智能合约,对被测区块链进行测试。其中,该指定事件可以是被测区块链自身版本的升级、被测区块链中有节点设备的加入或退出,或其他类型的用户自定义事件。

上述智能合约在执行的过程中,首先获取执行测试用例集中的每个测试用例所需要的测试数据,也可以理解为实现被测区块链测试开始前的数据准备工作,然后基于获取到的测试数据执行测试用例集中的测试用例,得到每个测试用例的测试结果(也可以称为执行结果),当每个测试用例的测试结果都存储在节点设备上后,会发送一个事件,以通知第一设备查询每个测试用例的测试结果。具体地,上述测试结果中通常包含有执行时间、测试失败和测试成功等信息,通常如果该执行结果为测试失败,该测试结果中还包括有失败原因,该失败原因用于指示区块链中出现问题的位置或者原因等。

上述测试用例集需要预先部署在被测区块链中,以便在执行智能合约的过程中通过该测试用例集对被测区块链进行测试。具体地,该测试用例集中的每个测试用例可以测试区块链的不同功能,也即是该测试用例集为包含有许多用于测试区块链功能的测试用例的集合。例如,第一测试用例可以测试区块链的通信功能,第二测试用例可以测试区块链的通信功能,第三测试用例可以测试区块链的数据存储功能或者节点共识功能等。

在具体实现时,上述测试用例集可以是由测试人员预先编写好的,也可以是平时针对某个功能、某个迭代测试时累积下来的各种测试用例的集合,在此不做具体限定。本发明中的测试用例集中的测试用例是在被测区块链之外进行编写和维护的,将该测试用例集部署在被测区块链上后,被测区块链上的测试用例集不会被修改,若想要修改测试用例集,需要第一设备将修改后的测试用例集重新部署在被测区块链上。

步骤S104,接收来自第一设备的查询请求,以使该第一设备获取每个测试用例的测试结果。

当第一设备接收到节点设备发送的通知事件后,会向该节点设备发送查询请求,以查询该节点设备上每个测试用例的测试结果,从而第一设备也获取到了每个测试用例的测试结果。操作该第一设备的测试人员可以根据每个测试用例的测试结果,及时发现和快速定位区块链中存在的问题;同时,该测试结果也能够帮助区块链开发和运维人员及时发现区块链变更带来的问题。

本发明实施例提供的一种区块链测试的方法,首先被测区块链的节点设备接收到来自第一设备的合约调用指令后,执行被测区块链上的智能合约,以测试被测区块链;该智能合约用于:获取执行预设的测试用例集所需的测试数据,并执行测试用例集中的测试用例,得到每个测试用例的测试结果,通知第一设备查询每个测试用例的测试结果;然后节点设备接收来自第一设备的查询请求,以使第一设备获取每个测试用例的测试结果。该方式通过预先在被测区块链上部署的智能合约,对被测区块链进行自动测试,该方式无需在区块链上单独部署测试节点,避免了区块链引入功能性的节点带来的侵入问题,提高了区块链运行的稳定性;同时,该方式可自动化完成区块链测试的,提高了区块链测试的效率。

本发明实施例还提供了另一种区块链测试的方法,该方法在上述方法实施例的基础上实现;该方法重点描述获取执行预设的测试用例集所需的测试数据,并执行测试用例集中的测试用例,得到每个测试用例的测试结果的具体过程(具体通过下述步骤S204-S206实现),如图2所示,该方法包括如下具体步骤:

步骤S202,响应于来自第一设备的合约调用指令,执行被测区块链上的智能合约。

在执行步骤S202之前,需要将上述智能合约和预设的测试用例集部署在被测区块链上,以使被测区块链中的任意节点设备均可执行该智能合约,基于测试用例集完成对被测区块链测试的。

具体地,上述智能合约可以通过下述方式部署在被测区块链上:响应于来自第一设备的第一部署指令,将智能合约部署在被测区块链上。在将上述智能合约部署在被测区块链上之后,节点设备还可以响应来自第一设备的第二部署指令,将测试用例集部署在被测区块链上,并将该测试用例集的部署地址写入智能合约指定的数组中,以使上述智能合约可以调用测试用例集中的测试用例。其中,智能合约指定的数组是在智能合约部署完成后确定的,该数组主要用于存储测试用例集的部署地址,最终会将这个数组记录在区块链上。

在具体实现时,上述第一部署指令和第二部署指令可以是用户在第一设备上触发的;也可以是用户在第一设备上触发开始指令后,由软件自动发送的第一部署指令和第二部署指令。被测区块链上的节点设备接收到第一部署指令后,可以将第一部署指令携带的智能合约部署在被测区块链上(也即是被测区块链上的每个节点设备均部署好该智能合约),以使被测区块链上的每个节点设备都可以执行该智能合约;被测区块链上的节点设备接收到第二部署指令后,可以将第二部署指令携带的测试用例集部署在被测区块链上,以使被测区块链在执行智能合约时,该智能合约可以执行测试用例集上的测试用例,并通过测试用例测试被测区块链的功能。

具体地,上述测试用例集通常用于测试被测区块链的基本功能;该基本功能包括以下至少一种:通信功能、节点共识功能、数据存储功能和EVM(Environment VirtualMachine,以太坊虚拟机)执行功能等。上述通信功能通常是指被测区块链上节点设备之间进行通信的功能;上述节点共识功能通常是指共识机制实现的功能,其中共识机制是区块链中各分散节点设备对事务状态的验证、记录、修改等行为的有效性达成快速共识的基础,为了确保信息的准确性和有效性,区块与区块之间通过共识机制判断数据有效性。上述数据存储功能通常是指被测区块链上的节点设备存储数据的功能;上述EVM执行功能通常是指执行各种智能合约编译后的字节码的功能,该EVM的作用通常包括:节点设备的功能引擎;执行以太坊交易事务;部署、执行、调用智能合约、转账等等。

在一些实施例中,上述第一设备中运行有SDK(Software Development Kit,软件开发工具包),该SDK主要负责智能合约和测试用例集的部署。当SDK启动工作时,首先将上述智能合约部署在被测区块链上,然后再将测试用例集部署在被测区块链上,部署完成后,SDK会自动将测试用例集的部署地址(也可以称为合约地址)写入上述智能合约中维护的测试用例地址数组(相当于上述智能合约指定的数组)中。

步骤S204,通过上述智能合约将执行测试用例集中的每个测试用例所需的数据,确定为测试数据,并从被测区块链中获取测试数据。

上述测试数据通常包括但不限于:测试账户、智能合约调用参数组等。具体地,不同的测试用例所测试的区块链的基本功能不同,所需的测试数据也不同,因而,智能合约需要提前知道每个测试用例所需的测试数据,以便在执行智能合约时,根据所需的测试数据从被测区块链中去获取,从而完成测试前的数据准备工作。在一些实施例中,可以在部署测试用例集时,将测试用例集中每个测试用例所需的测试数据的名称或者数据类型也部署在被测区块链中,以便智能合约提前知道测试用例集中的每个测试用例所需的测试数据。

上述通过智能合约从被测区块链中获取测试数据的过程,相当于通过智能合约实现测试开始前的数据准备工作,也即是为后续被测区块链的功能测试提供数据,为测试用例的执行做好数据准备。

步骤S206,通过上述智能合约调用测试用例集中的测试用例,并采用串行或者并行的方式,基于测试数据执行测试用例,得到每个测试用例的测试结果。

在具体实现时,当测试用例集中的每个测试用例所需的测试数据获取完成后,将通过智能合约调用测试用例集中的测试用例,可以调用测试用例集中的所有测试用例,也可以调用测试用例集中的某些指定的测试用例;然后针对每个测试用例,将该测试用例所需的测试数据代入测试用例中执行该测试用例,得到该测试用例的测试结果。在具体实现时,可以采用串行或者并行的方式,调用测试用例集中的测试用例进行执行,具体采用的方式可以根据实际需要确定,通常采用串行方式时,测试用例集中的测试用例依次执行,采用并行的方式时,测试用例集中的测试用例可以同时执行。

上述测试用例集中的测试用例执行的过程,也可以理解为通过测试用例集中的测试用例对被测区块链的通信功能、节点共识功能、数据存储功能、EVM执行功能等进行测试的过程。每个测试用例的测试结果用于指示该测试用例对应的区块链功能是否存在问题,当测试结果指示执行失败时,表示该测试用例对应的区块链功能存在问题,需要进行调整或者改进;当测试结果指示执行成功时,表示该测试用例对应的区块链功能不存在问题,无需调整。

在具体实现时,在基于测试数据执行测试用例,得到每个测试用例的测试结果的过程中,还可以对测试用例集中的每个测试用例的测试结果进行汇总处理;和/或,对测试用例集中的每个测试用例的测试结果进行存储。也即是,可以仅对测试用例集中的每个测试用例的测试结果进行汇总处理,也可以仅对测试用例集中的每个测试用例的测试结果进行存储,还可以既对测试用例集中的每个测试用例进行汇总处理,又进行存储处理。

具体地,在基于测试数据执行测试用例,得到每个测试用例的测试结果的过程中,节点设备需要记录每个测试用例对应的测试结果,然后得到测试用例集中每个测试用例对应的测试结果后,可以对每个测试用例的测试结果进行汇总,得到一个总的测试结果,以便节点设备将总的测试结果一次性发送给第一设备。在得到测试用例集中的每个测试用例对应的测试结果后,可以将测试结果存储在区块链上;也可以每得到一个测试用例对应的测试结果,便将该测试用例的测试结果存入区块链中。

步骤S208,通过上述智能合约通知第一设备查询每个测试用例的测试结果。

步骤S210,接收来自第一设备的查询请求,以使该第一设备获取每个测试用例的测试结果。

在具体实现时,可以在得到测试用例集中每个测试用例的测试结果后,汇总的测试结果,并向第一设备发送测试结果查询的通知事件。第一设备接收到该通知事件后,会向节点设备发送查询请求,以获取节点设备中汇总的测试结果。测试人员查看到测试结果后会重点关注执行失败或者异常的测试结果,以便针对执行出现问题的位置,及时调整被测区块链中实现某些功能的代码。

在一些实施例中,还可以根据被测区块链的监控报警机制,将测试用例集中测试失败的测试用例的测试结果,通知指定设备。其中,测试失败的测试用例可以是执行失败或者执行异常的测试用例。具体地,可以通过监控报警机制中保存的电话、短信或者邮箱等方式通知指定设备,以便指定设备对应的相关人员关注该测试结果,并针对该测试结果采取相应的措施,其中,该相关人员可以是测试人员、开发人员或者运维人员等。

上述区块链测试的方法,首先被测区块链中的节点设备接收到来自第一设备的合约调用指令后,会执行被测区块链上的智能合约;并通过该智能合约将执行测试用例集中的每个测试用例所需的数据,确定为测试数据,并从被测区块链中获取测试数据;然后通过该智能合约调用测试用例集中的测试用例,并采用串行或者并行的方式,基于测试数据执行测试用例,得到每个测试用例的测试结果;再通过智能合约通知第一设备查询每个测试用例的测试结果,以使该第一设备基于查询请求获取到每个测试用例的测试结果。该方式通过完全自动化的测试方式,节约了大量的人力和时间成本,并能在第一时间发现被测区块链潜在的问题。此外,通过智能合约的形式来实现区块链自动测试的方案,可以避免为区块链引入特殊功能节点时,因测试带来的负面影响,提高了区块链的稳定性。

针对于上述测试方法,本发明实施例还提供了另一种区块链测试的方法,该方法应用于第一设备;该第一设备与被测区块链连接;如图3所示,该方法包括如下具体步骤:

步骤S302,响应于监听到指定事件,向被测区块链的节点设备发送合约调用指令,以使节点设备执行被测区块链上的智能合约,测试被测区块链;其中,该智能合约用于:获取执行预设的测试用例集所需的测试数据,并执行测试用例集中的测试用例,得到每个测试用例的测试结,通知第一设备查询每个测试用例的测试结果。

在具体实现时,上述第一设备通常是在被测区块链之外的、任意可以与区块链中的节点设备进行通信的设备。在对被测区块链进行测试之前,该第一设备需要预先将用于测试区块链的智能合约和测试用例集部署在被测区块链上。例如,第一设备上运行有SDK,该SDK开始工作时,可以向被测区块链上的任意节点设备发送第一部署指令和第二部署指令,以使该节点设备将智能合约和测试用例集部署在被测区块链中的各个节点设备上,部署完成后,SDK会自动将测试用例集的部署地址写入上述智能合约中维护的测试用例地址数组(相当于上述指定数组)中。

上述第一设备可以监听指定事件,该指定事件可以是被测区块链版本升级事件、区块链节点IP(Internet Protocol Address,互联网协议地址)列表变更事件和用户自定义事件等。其中,上述区块链节点IP列表变更事件可以理解为被测区块链上的有节点设备加入或者退出等;上述用户自定义事件可以根据用户需求进行自定义,在此不做具体限定。

在一些实施例中,上述第一设备还用于实时监听被测区块链是否发生上述指定事件,如果被测区块链发生指定事件,向被测区块链的节点设备发送合约调用指令。具体地,当智能合约和测试用例集部署在被测区块链上后,第一设备中的SDK可以自动监听被测区块链上是否发生指定事件,如果SDK监听到被测区块链发生了指定事件,向被测区块链的节点设备发送合约调用指令,以使该节点设备执行被测区块链上的智能合约测试被测区块链,也即是通过智能合约获取执行测试用例集所需的测试数据,并根据测试数据执行测试用例集中的测试用例,得到每个测试用例的测试结果,当每个测试用例的测试结果都存储在节点设备上后,会发送一个事件,以通知第一设备查询每个测试用例的测试结果。

步骤S304,响应节点设备发送的通知,向节点设备发送查询请求,以获取每个测试用例的测试结果。

上述第一设备主要用于部署用于测试的智能合约和测试用例集,以及在部署完成后,自动监听被测区块链是否发生指定事件,如果监听到发送指定事件,自动向被测区块链上的节点设备发送合约调用指令,以使节点设备智能合约完成对被测区块链的功能测试。该第一设备还用于主动获取节点设备中的每个测试用例的测试结果,以帮助区块链开发和运维人员及时发现区块链变更带来的问题。

上述区块链测试的方法,首先第一设备响应于监听到指定事件,向被测区块链的节点设备发送合约调用指令,以使节点设备执行被测区块链上的智能合约,测试被测区块链;该智能合约用于:获取执行预设的测试用例集所需的测试数据,并执行测试用例集中的测试用例,得到每个测试用例的测试结果,通知第一设备查询每个测试用例的测试结果;然后第一设备响应节点设备发送的通知,向节点设备发送查询请求,以获取每个测试用例的测试结果。该方式通过预先在被测区块链上部署的智能合约,对被测区块链进行自动测试,该方式无需在区块链上单独部署测试节点,避免了区块链引入功能性的节点带来的侵入问题,提高了区块链运行的稳定性;同时,该方式可自动化完成区块链的测试,提高了区块链测试的效率。

针对于上述图1和图2所示的区块链测试的方法,本发明实施例提供了一种区块链测试的装置,该装置设置于被测区块链的节点设备;该被测区块链与第一设备连接;如图4所示,该装置包括:

指令接收模块40,用于响应于来自第一设备的合约调用指令,执行被测区块链上的智能合约,以测试被测区块链;其中,该智能合约用于:获取执行预设的测试用例集所需的测试数据,并执行测试用例集中的测试用例,得到每个测试用例的测试结果,通知第一设备查询每个测试用例的测试结果。

结果返回模块41,用于接收来自第一设备的查询请求,以使第一设备获取每个测试用例的测试结果。

上述区块链测试的装置,首先被测区块链的节点设备接收到第一设备发送的合约调用指令后,执行被测区块链上的智能合约,以测试被测区块链;该智能合约用于:获取执行预设的测试用例集所需的测试数据,并执行测试用例集中的测试用例,得到每个测试用例的测试结果,通知第一设备查询每个测试用例的测试结果;然后节点设备接收来自第一设备的查询请求,以使第一设备获取每个测试用例的测试结果。该方式通过预先在被测区块链上部署的智能合约,对被测区块链进行自动测试,该方式无需在区块链上单独部署测试节点,避免了区块链引入功能性的节点带来的侵入问题,提高了区块链运行的稳定性;同时,该方式可自动化完成区块链的测试,提高了区块链测试的效率。

进一步地,上述装置还包括第一部署模块,用于:响应于来自第一设备的第一部署指令,将智能合约部署在被测区块链上。

具体地,上述装置还包括第二部署模块,用于:在将智能合约的部署地址写入被测区块链的指定数组中之后,响应于来自第一设备的第二部署指令,将测试用例集部署在被测区块链上,并将测试用例集的部署地址写入智能合约指定的数组中;其中,该测试用例集用于测试被测区块链的基本功能;该基本功能包括以下至少一种:通信功能、节点共识功能、数据存储功能和EVM执行功能。

进一步地,上述指令接收模块40,还用于:将执行测试用例集中的每个测试用例所需的数据,确定为测试数据;其中,该测试数据包括测试账户和智能合约调用参数组;从该被测区块链中获取测试数据。

在具体实现时,上述指令接收模块40,还用于:调用测试用例集中的测试用例;采用串行或者并行的方式,基于测试数据执行测试用例,得到每个测试用例的测试结果。

进一步地,上述装置还包括结果处理模块,用于:对测试用例集中的每个测试用例的测试结果进行汇总处理;和/或,对测试用例集中的每个测试用例的测试结果进行存储。

在具体实现时,上述测试结果包括测试失败和测试成功;上述装置还包括结果发送模块,用于:在通知第一设备查询每个测试用例的测试结果之后,根据被测区块链的监控报警机制,将测试用例集中测试失败的测试用例的测试结果,通知指定设备。

本发明实施例所提供的区块链测试的装置,其实现原理及产生的技术效果和前述区块链测试的方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。

针对于上述图3所示的区块链测试的方法,本发明实施例还提供了另一种区块链测试的装置,该装置设置于第一设备;该第一设备与被测区块链连接;如图5所示,该装置包括:

指令发送模块50,用于响应于监听到指定事件,向被测区块链的节点设备发送合约调用指令,以使节点设备执行被测区块链上的智能合约,测试被测区块链;其中,该智能合约用于:获取执行预设的测试用例集所需的测试数据,并执行测试用例集中的测试用例,得到每个测试用例的测试结果,通知第一设备查询每个测试用例的测试结果。

结果获取模块51,用于响应节点设备发送的通知,向节点设备发送查询请求,以获取每个测试用例的测试结果。

上述区块链测试的装置,首先第一设备响应于监听到指定事件,向被测区块链的节点设备发送合约调用指令,以使节点设备执行被测区块链上的智能合约,测试被测区块链;该智能合约用于:获取执行预设的测试用例集所需的测试数据,并执行测试用例集中的测试用例,得到每个测试用例的测试结果,通知第一设备查询每个测试用例的测试结果;然后第一设备响应节点设备发送的通知,向节点设备发送查询请求,以获取每个测试用例的测试结果。该方式通过预先在被测区块链上部署的智能合约,对被测区块链进行自动测试,该方式无需在区块链上单独部署测试节点,避免了区块链引入功能性的节点带来的侵入问题,提高了区块链运行的稳定性;同时,该方式可自动化完成区块链的测试,提高了区块链测试的效率。

具体地,上述指定事件包括被测区块链版本升级事件、区块链节点IP列表变更事件和用户自定义事件;上述指令发送模块50,用于:监听被测区块链是否发生指定事件,如果被测区块链发生指定事件,向被测区块链的节点设备发送合约调用指令。

本发明实施例所提供的区块链测试的装置,其实现原理及产生的技术效果和前述区块链测试的方法实施例相同,为简要描述,区块链测试的装置实施例部分未提及之处,可参考前述区块链测试的方法实施例中相应内容。

本发明实施例还提供了一种电子设备,参见图6所示,该电子设备包括处理器101和存储器100,该存储器100存储有能够被处理器101执行的机器可执行指令,该处理器执行机器可执行指令以实现上述区块链测试的方法,也可以理解为上述电子设备可以是第一设备,也可以是被测区块链中节点设备。

进一步地,图5所示的电子设备还包括总线102和通信接口103,处理器101、通信接口103和存储器100通过总线102连接。

其中,存储器100可能包含高速随机存取存储器(RAM,Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口103(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线102可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。

处理器101可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器101中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器101可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DigitalSignal Processor,简称DSP)、专用集成电路(Application Specific IntegratedCircuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器100,处理器101读取存储器100中的信息,结合其硬件完成前述实施例的方法的步骤。

本发明实施例还提供一种机器可读存储介质,该机器可读存储介质存储有机器可执行指令,该机器可执行指令在被处理器调用和执行时,该机器可执行指令促使处理器实现上述区块链测试的方法,具体实现可参见方法实施例,在此不再赘述。

本发明实施例所提供的区块链测试方法、装置和电子设备的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。

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

最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

相关技术
  • 区块链网络的测试方法、装置、介质及电子设备
  • 区块链网络测试方法、装置、介质及电子设备
技术分类

06120113240780