首页> 中国专利> 测试被部署在区块链节点上的智能合约的方法及装置

测试被部署在区块链节点上的智能合约的方法及装置

摘要

本公开实施例提供了测试被部署在区块链节点上的智能合约的方法、装置、电子设备及存储介质,应用于区块链技术领域或其他领域。该方法包括:根据案例调度策略,从多个测试案例中调度目标测试案例,其中,目标测试案例包括预设匹配关系、合约地址、与合约地址相关联的合约执行参数和变量名;根据预设匹配关系,将目标测试案例中的变量名转换为与变量名对应的变量地址;根据合约地址确定待测试智能合约;根据合约执行参数初始化待测试智能合约,得到初始化后的待测试智能合约;执行初始化后的待测试智能合约,得到合约执行结果,其中,合约执行结果包括与变量地址相关联的变量信息。

著录项

  • 公开/公告号CN112785439A

    专利类型发明专利

  • 公开/公告日2021-05-11

    原文格式PDF

  • 申请/专利权人 中国工商银行股份有限公司;

    申请/专利号CN202110299650.0

  • 发明设计人 陈金娣;黄肇敏;邹晓梦;王志远;

    申请日2021-03-19

  • 分类号G06Q40/04(20120101);G06F11/36(20060101);H04L29/08(20060101);

  • 代理机构11021 中科专利商标代理有限责任公司;

  • 代理人吴梦圆

  • 地址 100140 北京市西城区复兴门内大街55号

  • 入库时间 2023-06-19 10:57:17

说明书

技术领域

本公开实施例涉及区块链、计算机等技术领域,更具体地,涉及一种测试被部署在区块链节点上的智能合约的方法、装置、电子设备、计算机可读存储介质及计算机程序产品。

背景技术

随着区块链技术的快速发展,出现了越来越多的基于区块链的去中心化应用(Decentralized Application,DAPP),其可以理解为是运行在区块链节点上的智能合约代码以及外围代码的集合。基于区块链的去中心化应用可以通过部署在区块链节点上的智能合约实现。由此,需要通过运行智能合约来实现相应的功能。

智能合约是一种旨在以信息化方式传播、验证或执行合同的计算机协议,其允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。在区块链系统中,智能合约表现为可执行代码,即是可以在区块链节点上自动执行的脚本,其可以对编程语言中表示的任何规则集进行编码。由于智能合约是存储于去中心化的区块中的,因此,智能合约的修改是比较困难的,并且,如果智能合约本身的执行效率存在问题或智能合约本身存在问题,则可能导致较长时间占用区块链系统的资源,进而影响了区块链系统的性能。由此,需要尽量保证智能合约的质量,而为了确保智能合约的质量,对智能合约进行测试是必不可少的环节。

在实现本公开构思的过程中,发明人发现相关技术中至少存在如下问题,采用相关技术对智能合约进行测试的测试效率不高。

发明内容

有鉴于此,本公开实施例提供了一种测试被部署在区块链节点上的智能合约的方法、装置、电子设备、计算机可读存储介质及计算机程序产品。

本公开实施例的一个方面提供了一种测试被部署在区块链节点上的智能合约的方法,上述方法包括:根据案例调度策略,从多个测试案例中调度目标测试案例,其中,上述目标测试案例包括预设匹配关系、合约地址、与上述合约地址相关联的合约执行参数和变量名;根据上述预设匹配关系,将上述目标测试案例中的变量名转换为与上述变量名对应的变量地址;根据上述合约地址确定待测试智能合约;根据上述合约执行参数初始化上述待测试智能合约,得到初始化后的待测试智能合约;以及,执行上述初始化后的待测试智能合约,得到合约执行结果,其中,上述合约执行结果包括与上述变量地址相关联的变量信息。

本公开实施例的另一个方面提供了一种测试被部署在区块链节点上的智能合约的装置,上述装置包括:调度模块,用于根据案例调度策略,从多个测试案例中调度目标测试案例,其中,上述目标测试案例包括预设匹配关系、合约地址、与上述合约地址相关联的合约执行参数和变量名;转换模块,用于根据上述预设匹配关系,将上述目标测试案例中的变量名转换为与上述变量名对应的变量地址;第一确定模块,用于根据上述合约地址确定待测试智能合约;第一获得模块,用于根据上述合约执行参数初始化上述待测试智能合约,得到初始化后的待测试智能合约;以及,执行模块,用于执行上述初始化后的待测试智能合约,得到合约执行结果,其中,上述合约执行结果包括与上述变量地址相关联的变量信息。

本公开实施例的另一个方面提供了一种电子设备,包括:一个或多个处理器;存储器,用于存储一个或多个程序,其中,当上述一个或多个程序被上述一个或多个处理器执行时,使得上述一个或多个处理器实现如上所述的方法。

本公开实施例的另一个方面提供了一种计算机可读存储介质,存储有计算机可执行指令,上述指令在被执行时用于实现如上所述的方法。

本公开实施例的另一个方面提供了一种计算机程序产品,上述计算机程序产品包括计算机可执行指令,上述指令在被执行时用于实现如上所述的方法。

根据本公开的实施例,通过根据案例调度策略,从多个测试案例中调度目标测试案例,目标测试案例包括预设匹配关系、合约地址、与合约地址相关联的合约执行参数和变量名,根据预设匹配关系,将目标测试案例中的变量名转换为与变量名对应的变量地址,根据合约地址确定待测试智能合约,根据合约执行参数初始化待测试智能合约,得到初始化后的待测试智能合约,执行初始化后的待测试智能合约,得到合约执行结果。由于是采用与待测试智能合约对应的目标测试案例的方式对其进行的测试,使得调用目标测试案例即可以完成针对待测试智能合约的测试,实现了将针对待测试智能合约的测试与针对各个业务逻辑的测试解耦,因此,简化了测试待测试智能合约的测试步骤,进而提高了测试待测试智能合约的测试效率,因而,至少部分地克服了采用相关技术对智能合约进行测试的测试效率不高的技术问题。

附图说明

通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚,在附图中:

图1示意性示出了根据本公开实施例的可以应用测试被部署在区块链节点上的智能合约的方法的示例性系统架构;

图2示意性示出了根据本公开实施例的一种测试被部署在区块链节点上的智能合约的方法的流程图;

图3示意性示出了根据本公开实施例的一种显示案例调度策略的示意图;

图4示意性示出了根据本公开实施例的另一种测试被部署在区块链节点上的智能合约的方法的流程图;

图5示意性示出了根据本公开实施例的一种测试被部署在区块链节点上的智能合约的方法的示意图;

图6示意性示出了根据本公开的实施例的一种测试被部署在区块链节点上的智能合约的装置的框图;以及

图7示意性示出了根据本公开实施例的适于实现测试被部署在区块链节点上的智能合约的方法的电子设备的框图。

具体实施方式

以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。

在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。

在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。

在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。在使用类似于“A、B或C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B或C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。

在实现本公开构思的过程中,发明人发现区块链网络具有其独有的特点,例如,调用智能合约需要通过发起交易来完成,而交易需要等待矿工挖矿,一旦区块和交易被矿工确认就无法修改。上述使得基于区块链的去中心化应用本身具有复杂性。

在相关技术中,由于去中心化应用本身的复杂性,因此,通常采用对去中心化应用涉及的各个业务逻辑进行测试的方式来同时完成针对智能合约的测试,其中,涉及各个业务逻辑可以包括前端事件、后端逻辑和深度的系统控制逻辑,即针对智能合约的测试是与针对各个业务逻辑的测试耦合在一起的,换句话说,针对智能合约的测试需要依赖针对各个业务逻辑的测试。

在实现本公开构思的过程中,发明人发现由于在相关技术中针对智能合约的测试是与针对各个业务逻辑的测试耦合在一起的,即如果要完成针对智能合约的测试,便需要连同完成针对各个业务逻辑的测试,因此,使得针对智能合约的测试的测试步骤繁琐,进而导致针对智能合约的测试的测试效率不高。

为了解决上述问题,发明人提出一种单独测试智能合约的测试方案,即采用为每个智能合约设置对应的测试案例的方式,将针对智能合约的测试与针对各个业务逻辑的测试解耦,以实现单独针对智能合约的测试。

具体地,本公开的实施例提供了一种测试被部署在区块链节点上的智能合约的方法、装置以及能够应用该方法的电子设备,本公开实施例的测试被部署在区块链节点上的智能合约的方法、装置、电子设备、计算机可读存储介质及计算机程序产品可以应用于区块链领域,也可以用于除区块链领域之外的任意领域,本公开实施例对此不作限定。该方法包括调度过程、转换过程、确定过程、获得过程和执行过程。在调度过程中,根据案例调度策略,从多个测试案例中调度目标测试案例,目标测试案例包括预设匹配关系、合约地址、与所述合约地址相关联的合约执行参数和变量名。在转换过程,根据预设匹配关系,将目标测试案例中的变量名转换为与变量名对应的变量地址。在确定过程,根据合约地址确定待测试智能合约。在获得过程,根据合约执行参数初始化待测试智能合约,得到初始化后的待测试智能合约。在执行过程,执行初始化后的待测试智能合约,得到合约执行结果,合约执行结果包括与变量地址相关联的变量信息。

图1示意性示出了根据本公开实施例的可以应用测试被部署在区块链节点上的智能合约的方法的示例性系统架构100。需要注意的是,图1所示仅为可以应用本公开实施例的系统架构的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。

如图1所示,根据该实施例的系统架构100可以包括终端设备101、102、103,网络104、服务器105和区块链网络106,区块链网络106包括区块链节点1061、1062、1063、1064、1065、1066。网络104用以在终端设备101、102、103和服务器105之间,以及,服务器105与区块链网络106之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线和/或无线通信链路等。

用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如银行类应用、购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端和/或社交平台软件等(仅为示例)。

区块链节点1061、1062、1063、1064、1065、1066上可以部署有对应的智能合约。

终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等。

服务器105可以是提供各种服务的服务器,例如,对区块链节点1061、1062、1063、1064、1065、1066上部署的智能合约提供测试的服务器(仅为示例)。对用户利用终端设备101、102、103所生成的测试案例提供测试的后台管理服务器(仅为示例)。

需要说明的是,本公开实施例所提供的测试方法一般可以由服务器105执行。相应地,本公开实施例所提供的测试装置一般可以设置于服务器105中。本公开实施例所提供的测试方法也可以由不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群执行。相应地,本公开实施例所提供的测试装置也可以设置于不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群中。或者,本公开实施例所提供的测试方法也可以由终端设备101、102、或103执行,或者也可以由不同于终端设备101、102、或103的其他终端设备执行。相应地,本公开实施例所提供的测试装置也可以设置于终端设备101、102、或103中,或设置于不同于终端设备101、102、或103的其他终端设备中。

应该理解,图1中的终端设备、网络、服务器和区块链节点的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络、服务器和区块链节点。

图2示意性示出了根据本公开实施例的一种测试被部署在区块链节点上的智能合约的方法的流程图。

如图2所示,该方法包括操作S210~S250。

在操作S210,根据案例调度策略,从多个测试案例中调度目标测试案例,其中,目标测试案例包括预设匹配关系、合约地址、与合约地址相关联的合约执行参数和变量名。

根据本公开的实施例,案例调度策略可以是根据测试时间、测试次数、测试方式和各个测试案例之间的依赖关系中的至少一种生成的用于进行案例调度的策略。在获得案例调度策略后,可以根据案例调度策略从多个测试案例中确定目标测试案例,其中,目标测试案例的数量可以包括一个或多个。目标测试案例可以包括内部参数信息和外部参数信息,其中,外部参数信息可以包括预设匹配关系、合约地址和与合约地址相关联的合约执行参数。内部参数信息可以包括待测试智能合约的变量。待测试智能合约的变量可以包括变量名。

根据本公开的实施例,预设匹配关系可以表征变量的变量名与变量地址之间的匹配关系。合约地址可以表征用于测试的智能合约的地址,即待测试智能合约的地址。基于上述,待测试智能合约的变量名即是与合约地址相关联的变量名。与合约地址相关联的合约执行参数可以表征在对与合约地址对应的待测试智能合约进行测试时,用于初始化待测试智能合约的参数。与合约地址相关联的合约执行参数所包括的内容可以根据待测试智能合约所要实现的功能进行确定,在此不作限定。示例性的,如待测试智能合约用于实现转账功能,则与合约地址相关联的合约执行参数可以包括转账金额。如待测试智能合约包括用于实现签名认证功能,则与合约地址相关联的合约执行参数可以包括签名数据。与合约地址相关联的变量名可以表征与合约地址对应的待测试智能合约所涉及的变量的变量名。

根据本公开的实施例,案例调度策略可以周期性执行。如果目标测试案例的数量包括多个且各个目标测试案例是依次调度的,则可以在调度每个目标测试案例时,确定是否存在与该目标测试案例相同的目标测试案例,在确定不存在与该目标测试案例相同的目标测试案例的情况下,调度该目标测试案例。如果目标测试案例的数量包括多个且各个目标测试案例是并行调度的,则可以在调度得到多个目标测试案例后,确定多个目标测试案例中是否存在相同的目标测试案例,在确定存在相同的目标测试案例的情况下,保留相同的目标测试案例中的一个目标测试案例。

在操作S220,根据预设匹配关系,将目标测试案例中的变量名转换为与变量名对应的变量地址。

在操作S230,根据合约地址确定待测试智能合约。

根据本公开的实施例,可以根据目标测试案例中包括的合约地址,确定与合约地址对应的待测试智能合约,可以根据目标测试案例中包括的预设匹配关系,将目标测试案例中的变量名转换为与变量名对应的变量地址,以便后续待测试智能合约的执行。

在操作S240,根据合约执行参数初始化待测试智能合约,得到初始化后的待测试智能合约。

根据本公开的实施例,由于合约执行参数包括用于初始化待测试智能合约的参数,因此,可以根据合约执行参数初始化待测试智能合约,得到初始化后的待测试智能合约。

在操作S250,执行初始化后的待测试智能合约,得到合约执行结果,其中,合约执行结果包括与变量地址相关联的变量信息。

根据本公开的实施例,合约执行结果可以包括与变量地址相关联的变量信息,与变量地址相关联的变量信息可以表征待测试智能合约被执行后,发生变化的变量的信息,其中,变量是与变量地址对应的变量。合约执行结果还可以包括用于表征合约执行成功或合约执行失败的信息、执行所消耗的时间信息、待测试智能合约的入参信息、待测试智能合约的出参信息和预设匹配关系中的至少一种。合约执行结果可以以JSON(JavaScriptObject Notation,JS对象简谱)格式进行存储。

根据本公开的实施例,上述操作S220~操作S250即是目标测试案例的执行过程。

根据本公开实施例的技术方案,通过根据案例调度策略,从多个测试案例中调度目标测试案例,目标测试案例包括预设匹配关系、合约地址、与合约地址相关联的合约执行参数和变量名,根据预设匹配关系,将目标测试案例中的变量名转换为与变量名对应的变量地址,根据合约地址确定待测试智能合约,根据合约执行参数初始化待测试智能合约,得到初始化后的待测试智能合约,执行初始化后的待测试智能合约,得到合约执行结果。由于是采用与待测试智能合约对应的目标测试案例的方式对其进行的测试,使得调用目标测试案例即可以完成针对待测试智能合约的测试,实现了将针对待测试智能合约的测试与针对各个业务逻辑的测试解耦,因此,简化了测试待测试智能合约的测试步骤,进而提高了测试待测试智能合约的测试效率,因而,至少部分地克服了采用相关技术对智能合约进行测试的测试效率不高的技术问题。

根据本公开的实施例,上述测试被部署在区块链节点上的智能合约的方法还可以包括如下操作。

针对多个待测试智能合约中的每个待测试智能合约,确定针对待测试智能合约的内部参数信息,其中,内部参数信息包括与待测试智能合约相关联的变量,变量包括变量名。确定针对待测试智能合约的外部参数信息,其中,外部参数信息包括预设匹配关系、合约执行参数、待测试智能合约的合约地址和合约执行结果确定策略。根据待测试智能合约的内部参数信息和外部参数信息,生成针对待测试智能合约的测试案例。

根据本公开的实施例,待测试智能合约的外部参数信息所包括的合约执行结果确定策略可以表征确定合约执行成功或合约执行失败的策略。示例性的,如当待测试智能合约是针对资源转移数量时,合约执行结果确定策略可以为在针对转出资源的账户,当转移前的资源数量等于转移后的资源数量加上资源转移数量且针对接收资源的账户,当转移前的资源数量等于转移后的资源数量减去资源转移数量的情况下,确定合约执行成功。

根据本公开的实施例,每个待测试智能合约可以通过如下方式获取,确定待测试智能合约的合约类型,根据合约类型,确定与合约类型对应的待测试智能合约。针对多个待测试智能合约中的每个待测试智能合约,确定针对待测试智能合约的内部参数信息,可以包括确定与待测试智能合约对应的抽象语法树,根据抽象语法树,获取待测试智能合约的内部参数信息。

根据本公开的实施例,由于测试案例是根据待测试智能合约的内部参数信息和外部参数信息生成的,因此,测试案例可以包括内部参数信息和外部参数信息,测试案例的内部参数信息与对应的待测试智能合约的内部参数信息对应,测试案例的外部参数信息与对应的待测试智能合约的外部参数信息对应。

根据本公开的实施例,与待测试智能合约对应的测试案例可以以XML(ExtensibleMarkup Language,可扩展标记语言)格式进行存储。

根据本公开的实施例,如果本公开实施例所提供的技术方案是由服务器执行的,则测试案例的生成过程除了可以由服务器实现外,还可以是服务器接收来自终端设备发送的测试案例,即测试案例的生成过程是由终端设备完成的,也即每个测试案例是终端设备根据待测试智能合约的内部参数信息和外部参数信息生成的。

根据本公开的实施例,上述测试被部署在区块链节点上的智能合约的方法还可以包括如下操作。

针对多个测试案例中的每个测试案例,确定测试案例的案例执行信息,其中,案例执行信息包括测试案例标识、测试时间、测试次数和测试方式中的至少一种。根据业务逻辑,确定各个测试案例之间的依赖关系。根据各个测试案例的案例执行信息和各个测试案例之间的依赖关系,生成案例调度策略。

根据本公开的实施例,在实现本公开构思的过程中,发明人还发现采用相关技术对智能合约进行测试的测试灵活性不高,进一步发现导致测试灵活性不高的主要原因在于,难以根据实际业务需求对各个测试案例进行统一调度,并设置各个测试案例之间的执行顺序。

为了解决上述问题,本公开实施例提供一种根据各个测试案例之间的依赖关系和各个测试案例的案例执行信息生成的案例调度策略的方案。

根据本公开的实施例,测试案例标识用于表征测试案例。测试时间可以包括每次测试的开始时间、指定测试日期和各次测试时间的时间间隔中的至少一种。指定测试日期可以为每日、每周、每月、每周的某日或每月的某几日。测试方式可以包括人工测试方式或自动测试方式。

根据本公开的实施例,根据各个测试案例之间的依赖关系,可以确定各个测试案例之间的执行顺序。以两个测试案例之间具有依赖关系为例说明各个测试案例之间具有依赖关系,两个测试案例之间具有依赖关系可以指两个测试中的一个测试案例是否能够执行依赖另一个测试案例的执行结果。其中,可以将被依赖的测试案例称为前项测试案例。如果两个测试案例之间具有依赖关系,则这两个测试案例的执行顺序为串行执行,即需要先执行前项测试案例。如果两个测试案例之间不具有依赖关系,则在不考虑这两个测试案例与其他测试案例的依赖关系的情况下,这两个测试案例的执行顺序可以为并行执行。

示例性的,如针对购物场景,多个用户同时下单,针对每个用户的订单合约的目标测试案例与付款合约的目标测试案例之间是串行关系,不同用户的目标测试案例之间是并行关系。

根据本公开的实施例,根据业务逻辑,确定各个测试案例之间的依赖关系,可以包括根据业务逻辑,生成针对各个测试案例的执行顺序的调度图。根据调度图,确定各个测试案例之间的依赖关系。

根据本公开的实施例,由于案例调度策略是根据各个测试案例的案例执行信息和各个测试案例之间的依赖关系生成的,因此,可以根据案例调度策略确定需要执行的目标测试案例和在包括多个目标测试案例的情况下,确定各个目标测试案例的执行顺序,实现了对多个目标测试案例的统一调度和设置各个目标测试案例的执行顺序,由此,提高了测试灵活性。在涉及多个业务系统之间的联合测试时,采用案例调度策略实现针对多个测试案例的统一调度,节省了时间,提高了测试效率。

根据本公开的实施例,目标测试案例包括多个。根据案例调度策略,从多个测试案例中调度目标测试案例,可以包括如下操作。

根据案例调度策略,从多个测试案例中调度多个目标测试案例和各个目标测试案例之间的依赖关系。

上述测试方法还可以包括如下操作。

根据各个目标测试案例之间的依赖关系,确定每个目标测试案例的执行顺序。

根据预设匹配关系,将目标测试案例中的变量名转换为与变量名对应的变量地址,可以包括如下操作。

针对多个目标测试案例中的每个目标测试案例,在确定目标测试案例的执行顺序到达的情况下,根据与目标测试案例对应的预设匹配关系,将目标测试案例中的变量名转换为与变量名对应的变量地址。

根据本公开的实施例,在目标测试案例包括多个的情况下,针对多个目标测试案例中的每个目标测试案例,在确定目标测试案例的执行顺序到达的情况下,执行目标测试案例。

根据本公开的实施例,在确定目标测试案例的执行顺序到达的情况下,根据与目标测试案例对应的预设匹配关系,将目标测试案例中的变量名转换为与变量名对应的变量地址,可以包括如下操作。

在确定存在目标测试案例的前项测试案例的情况下,确定前项测试案例是否执行成功。在确定前项测试案例执行成功的情况下,确定目标测试案例的执行顺序到达。在确定目标测试案例的执行顺序到达的情况下,根据与目标测试案例对应的预设匹配关系,将目标测试案例中的变量名转换为与变量名对应的变量地址。

根据本公开的实施例,针对每个目标测试案例,由于可能存在与该目标测试案例具有依赖关系的目标测试案例,即可能存在该目标测试案例所依赖的目标测试案例,因此,在确定是否执行该目标测试案例时,需要确定是否存在该目标测试案例所依赖的目标测试案例,其中,可以将被依赖的目标测试案例称为前项测试案例。在确定存在该目标测试案例的前项测试案例的情况下,确定前项测试案例是否执行成功。如果前项测试案例执行成功,则可以在该目标测试案例的执行顺序到达的情况下,执行该目标测试案例。如果前项测试案例执行失败,则需要继续等待直至确定前项测试案例执行成功,在该目标测试案例的执行顺序到达的情况下,执行该目标测试案例。

根据本公开的实施例,上述测试被部署在区块链节点上的智能合约的方法还可以包括如下操作。

根据预设匹配关系,将合约执行结果中的变量地址转换为与变量地址对应的变量名,得到针对待测试智能合约的测试日志。

根据本公开的实施例,在实现本公开构思的过程中,发明人还发现采用相关技术生成的针对待测试智能合约的测试日志的可读性较差,并进一步发现导致测试日志的可读性较差的主要原因在于,测试日志中的变量是以变量地址表征的,而变量地址的可读性较差,不易于理解,由此,使得生成的测试日志的可读性较差。

为了解决上述问题,本公开实施例提出一种在得到针对待测试智能合约的合约执行结果后,根据变量名与变量地址之间的预设匹配关系,将合约执行结果中的变量的变量地址转换为与该变量地址对应的变量名,由此生成针对待测试智能合约的测试日志的方案。

根据本公开的实施例,由于测试日志中涉及的变量是以变量名来表征的,因此,提高了测试日志的可读性。

根据本公开的实施例,上述测试被部署在区块链节点上的智能合约的方法还可以包括如下操作。

获取结果查询请求,其中,结果查询请求包括查询条件。响应于结果查询请求,得到与查询条件对应的合约执行结果。显示与查询条件对应的合约执行结果。

根据本公开的实施例,查询条件可以包括与案例执行信息相关的内容,例如,查询条件可以包括测试时间。为了便于用户可以直观看到与查询条件对应的合约执行结果,可以在获得与查询条件对应的合约执行结果后,显示与查询条件对应的合约执行结果。

根据本公开的实施例,上述测试被部署在区块链节点上的智能合约的方法还可以包括如下操作。

获取策略查询请求。响应于所述策略查询请求,得到案例调度策略。显示案例调度策略。

根据本公开的实施例,为了便于用户可以直观看到案例调度策略,可以在获得案例调度策略后,显示案例调度策略。

图3示意性示出了根据本公开实施例的一种显示案例调度策略的示意图。图3中的显示界面显示了各个测试案例之间的依赖关系,其中,测试案例2与测试案例1具有依赖关系,测试案例3与测试案例1具有依赖关系,测试案例4与测试案例1具有依赖关系,测试案例5分别与测试案例2、测试案例3和测试案例4具有依赖关系,测试案例2、测试案例3和测试案例4不具有依赖关系。

根据本公开的实施例,根据预设匹配关系,将目标测试案例中的变量名转换为与变量名对应的变量地址,可以包括如下操作。

在确定目标测试案例的测试方式为人工测试方式的情况下,如果获取到针对目标测试案例的测试请求,则响应于测试请求,根据预设匹配关系,将目标测试案例中的变量名转换为与变量名对应的变量地址。

根据本公开的实施例,由于针对某些功能的测试需要通过人工测试方式才能实现,因此,本公开实施例的技术方案还同时支持人工测试方式。即如果确定目标测试案例的测试方式是人工测试方式,则可以在获取到针对目标测试案例的测试请求的情况下,响应于测试请求,执行目标测试案例。其中,测试请求可以是根据操作体的触发操作生成。触发操作可以包括点击操作或滑动操作。

图4示意性示出了根据本公开实施例的另一种测试被部署在区块链节点上的智能合约的方法的流程图。

如图4所示,该方法包括操作S401~S419。

在操作S401,针对多个待测试智能合约中的每个待测试智能合约,确定针对待测试智能合约的内部参数信息,其中,内部参数信息包括与待测试智能合约相关联的变量和方法,变量包括变量名。

在操作S402,确定针对待测试智能合约的外部参数信息,其中,外部参数信息包括预设匹配关系、合约执行参数、待测试智能合约的合约地址和合约执行结果确定策略。

在操作S403,根据待测试智能合约的内部参数信息和外部参数信息,生成针对待测试智能合约的测试案例。

在操作S404,针对多个测试案例中的每个测试案例,确定测试案例的案例执行信息,其中,案例执行信息包括测试案例标识、测试时间、测试次数和测试方式中的至少一种。

在操作S405,根据业务逻辑,确定各个测试案例之间的依赖关系。

在操作S406,根据各个测试案例的案例执行信息和各个测试案例之间的依赖关系,生成案例调度策略。

在操作S407,根据案例调度策略,从多个测试案例中调度多个目标测试案例和各个目标测试案例之间的依赖关系,其中,目标测试案例包括预设匹配关系、合约地址、与合约地址相关联的合约执行参数和变量名。

在操作S408,根据各个目标测试案例之间的依赖关系,确定每个目标测试案例的执行顺序。

在操作S409,针对多个目标测试案例中的每个目标测试案例,确定目标测试案例的测试方式是否为人工测试方式;若是,则执行操作S410;若否,则执行操作S411。

在操作S410,确定是否获取到针对目标测试案例的测试请求;若是,则执行操作S411;若否,则继续执行操作S410。

在操作S411,确定目标测试案例的执行顺序是否到达;若是,则执行操作S412;若否,则继续执行操作S411。

在操作S412,确定是否存在目标测试案例的前项测试案例;若是,则执行操作S413;若否,则执行操作S414。

在操作S413,确定前项测试案例是否执行成功;若是,则执行操作操作S414;若否,则继续执行操作S413。

在操作S414,根据预设匹配关系,将目标测试案例中的变量名转换为与变量名对应的变量地址。

在操作S415,根据合约地址确定待测试智能合约。

在操作S416,根据合约执行参数初始化待测试智能合约,得到初始化后的待测试智能合约。

在操作S417,执行初始化后的待测试智能合约,得到合约执行结果,其中,合约执行结果包括与变量地址相关联的变量信息。

在操作S418,根据预设匹配关系,将合约执行结果中的变量地址转换为与变量地址对应的变量名,得到针对待测试智能合约的测试日志。

在操作S419,显示针对待测试智能合约的测试日志。

根据本公开的实施例,图5示意性示出了根据本公开实施例的一种测试被部署在区块链节点上的智能合约的方法的示意图。图5中包括案例生成、案例调度策略生成和案例调度过程。

根据本公开实施例的技术方案,由于案例调度策略是根据各个测试案例的案例执行信息和各个测试案例之间的依赖关系生成的,各个测试案例之间的依赖关系反映了各个测试案例的执行顺序,因此,可以根据案例调度策略确定需要执行的多个目标测试案例和各个目标测试案例的执行顺序,实现了对多个目标测试案例的统一调度和设置各个目标测试案例的执行顺序,由此,提高了测试灵活性。由于采用为每个待测试智能合约设置对应的测试案例,使得调用测试案例即可以完成针对待测试智能合约的测试,实现了将针对待测试智能合约的测试与针对各个业务逻辑的测试解耦,因此,简化了测试待测试智能合约的测试步骤,进而提高了测试待测试智能合约的测试效率。由于测试日志中涉及的变量是以变量名来表征的,因此,提高了测试日志的可读性。

图6示意性示出了根据本公开的实施例的一种测试被部署在区块链节点上的智能合约的装置的框图。

如图6所示,测试被部署在区块链节点上的智能合约的装置600可以包括调度模块610、转换模块620、第一确定模块630、获得模块640和执行模块650。

调度模块610、转换模块620、第一确定模块630、第一获得模块640和执行模块650通信连接。

调度模块610,用于根据案例调度策略,从多个测试案例中调度目标测试案例,其中,目标测试案例包括预设匹配关系、合约地址、与合约地址相关联的合约执行参数和变量名。

转换模块620,用于根据预设匹配关系,将目标测试案例中的变量名转换为与变量名对应的变量地址。

第一确定模块630,用于根据合约地址确定待测试智能合约。

第一获得模块640,用于根据合约执行参数初始化待测试智能合约,得到初始化后的待测试智能合约。

执行模块650,用于执行初始化后的待测试智能合约,得到合约执行结果,其中,合约执行结果包括与变量地址相关联的变量信息。

根据本公开实施例的技术方案,通过根据案例调度策略,从多个测试案例中调度目标测试案例,目标测试案例包括预设匹配关系、合约地址、与合约地址相关联的合约执行参数和变量名,根据预设匹配关系,将目标测试案例中的变量名转换为与变量名对应的变量地址,根据合约地址确定待测试智能合约,根据合约执行参数初始化待测试智能合约,得到初始化后的待测试智能合约,执行初始化后的待测试智能合约,得到合约执行结果。由于是采用与待测试智能合约对应的目标测试案例的方式对其进行的测试,使得调用目标测试案例即可以完成针对待测试智能合约的测试,实现了将针对待测试智能合约的测试与针对各个业务逻辑的测试解耦,因此,简化了测试待测试智能合约的测试步骤,进而提高了测试待测试智能合约的测试效率,因而,至少部分地克服了采用相关技术对智能合约进行测试的测试效率不高的技术问题。

根据本公开的实施例,上述测试被部署在区块链节点上的智能合约的装置600还可以包括第二确定模块、第三确定模块和第一生成模块。

第二确定模块,用于针对多个待测试智能合约中的每个待测试智能合约,确定针对待测试智能合约的内部参数信息,其中,内部参数信息包括与待测试智能合约相关联的变量,变量包括变量名。

第三确定模块,用于确定针对待测试智能合约的外部参数信息,其中,外部参数信息包括预设匹配关系、合约执行参数、待测试智能合约的合约地址和合约执行结果确定策略。

第一生成模块,用于根据待测试智能合约的内部参数信息和外部参数信息,生成针对待测试智能合约的测试案例。

根据本公开的实施例,上述测试被部署在区块链节点上的智能合约的装置600还可以包括第四确定模块、第五确定模块和第二生成模块。

第四确定模块,用于针对多个测试案例中的每个测试案例,确定测试案例的案例执行信息,其中,案例执行信息包括测试案例标识、测试时间、测试次数和测试方式中的至少一种。

第五确定模块,用于根据业务逻辑,确定各个测试案例之间的依赖关系。

第二生成模块,用于根据各个测试案例的案例执行信息和各个测试案例之间的依赖关系,生成案例调度策略。

根据本公开的实施例,目标测试案例包括多个。

调度模块610可以包括调度子模块。

调度子模块,用于根据案例调度策略,从多个测试案例中调度多个目标测试案例和各个目标测试案例之间的依赖关系。

上述测试装置600还可以包括第六确定模块。

第六确定模块,用于根据各个目标测试案例之间的依赖关系,确定每个目标测试案例的执行顺序。

转换模块620可以包括确定子模块。

确定子模块,用于针对多个目标测试案例中的每个目标测试案例,在确定目标测试案例的执行顺序到达的情况下,根据与目标测试案例对应的预设匹配关系,将目标测试案例中的变量名转换为与变量名对应的变量地址。

根据本公开的实施例,确定子模块可以包括第一确定单元、第二确定单元和第一转换单元。

第一确定单元,用于在确定存在目标测试案例的前项测试案例的情况下,确定前项测试案例是否执行成功。

第二确定单元,用于在确定前项测试案例执行成功的情况下,确定目标测试案例的执行顺序到达。

第一转换单元,用于在确定目标测试案例的执行顺序到达的情况下,根据与目标测试案例对应的预设匹配关系,将目标测试案例中的变量名转换为与变量名对应的变量地址。

根据本公开的实施例,上述测试被部署在区块链节点上的智能合约的装置600还可以包括第二获得模块。

第二获得模块,用于根据预设匹配关系,将合约执行结果中的变量地址转换为与变量地址对应的变量名,得到针对待测试智能合约的测试日志。

根据本公开的实施例,上述测试被部署在区块链节点上的智能合约的装置600还可以包括第一获取模块、第一响应模块和第一显示模块。

第一获取模块,用于获取结果查询请求,其中,结果查询请求包括查询条件。

第一响应模块,用于响应于结果查询请求,得到与查询条件对应的合约执行结果。

第一显示模块,用于显示与查询条件对应的合约执行结果。

根据本公开的实施例,上述测试被部署在区块链节点上的智能合约的装置600还可以包括第二获取模块、第二响应模块和第二显示模块。

第二获取模块,用于获取策略查询请求。

第二响应模块,用于响应于策略查询请求,得到案例调度策略。

第二显示模块,用于显示案例调度策略。

根据本公开的实施例,转换模块620可以包括第二转换单元。

第二转换单元,用于在确定目标测试案例的测试方式为人工测试方式的情况下,如果获取到针对目标测试案例的测试请求,则响应于测试请求,根据预设匹配关系,将目标测试案例中的变量名转换为与变量名对应的变量地址。

根据本公开的实施例的模块、子模块、单元中的任意多个、或其中任意多个的至少部分功能可以在一个模块中实现。根据本公开实施例的模块、子模块、单元中的任意一个或多个可以被拆分成多个模块来实现。根据本公开实施例的模块、子模块、单元中的任意一个或多个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(Field ProgrammableGate Array,FPGA)、可编程逻辑阵列(Programmable Logic Arrays,PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(Application Specific Integrated Circuit,ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式的硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,根据本公开实施例的模块、子模块、单元中的一个或多个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。

例如,调度模块610、转换模块620、第一确定模块630、第一获得模块640和执行模块650通信连接中的任意多个可以合并在一个模块/子模块/单元中实现,或者其中的任意一个模块/子模块/单元可以被拆分成多个模块/子模块/单元。或者,这些模块/子模块/单元中的一个或多个模块/单元的至少部分功能可以与其他模块/子模块/单元的至少部分功能相结合,并在一个模块/子模块/单元中实现。根据本公开的实施例,调度模块610、转换模块620、第一确定模块630、第一获得模块640和执行模块650通信连接中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,调度模块610、转换模块620、第一确定模块630、第一获得模块640和执行模块650通信连接中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。

需要说明的是,本公开的实施例中测试被部署在区块链节点上的智能合约的装置部分与本公开的实施例中测试被部署在区块链节点上的智能合约的方法部分是相对应的,测试装置部分的描述具体参考测试被部署在区块链节点上的智能合约的方法部分,在此不再赘述。

图7示意性示出了根据本公开实施例的适于实现上文描述的方法的电子设备的框图。图7示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。

如图7所示,根据本公开实施例的电子设备700包括处理器701,其可以根据存储在只读存储器(Read-Only Memory,ROM)702中的程序或者从存储部分708加载到随机访问存储器(Random Access Memory,RAM)703中的程序而执行各种适当的动作和处理。处理器701例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC)),等等。处理器701还可以包括用于缓存用途的板载存储器。处理器701可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。

在RAM 703中,存储有电子设备700操作所需的各种程序和数据。处理器701、ROM702以及RAM 703通过总线704彼此相连。处理器701通过执行ROM 702和/或RAM 703中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 702和RAM 703以外的一个或多个存储器中。处理器701也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。

根据本公开的实施例,电子设备700还可以包括输入/输出(I/O)接口705,输入/输出(I/O)接口705也连接至总线704。电子设备700还可以包括连接至I/O接口705的以下部件中的一项或多项:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至I/O接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。

根据本公开的实施例,根据本公开实施例的方法流程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被处理器701执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。

本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。

根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质。例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器((Erasable Programmable Read Only Memory,EPROM)或闪存)、便携式紧凑磁盘只读存储器(Computer Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 702和/或RAM 703和/或ROM 702和RAM 703以外的一个或多个存储器。

本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行本公开实施例所提供的方法的程序代码,当计算机程序产品在电子设备上运行时,该程序代码用于使电子设备实现本公开实施例所提供的测试被部署在区块链节点上的智能合约的方法。

在该计算机程序被处理器701执行时,执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。

在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分709被下载和安装,和/或从可拆卸介质711被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等,或者上述的任意合适的组合。

根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(Local Area Network,LAN)或广域网(Wide Area Networks,WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。

附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。

以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号