CN115687064A - 基于区块链的智能合约测试方法及相关设备 - Google Patents
基于区块链的智能合约测试方法及相关设备 Download PDFInfo
- Publication number
- CN115687064A CN115687064A CN202110856321.1A CN202110856321A CN115687064A CN 115687064 A CN115687064 A CN 115687064A CN 202110856321 A CN202110856321 A CN 202110856321A CN 115687064 A CN115687064 A CN 115687064A
- Authority
- CN
- China
- Prior art keywords
- contract
- tested
- test
- intelligent contract
- intelligent
- 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
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本公开实施例提供了一种基于区块链的智能合约测试方法及相关设备。该方法包括:创建用于测试智能合约的自动化测试框架;通过自动化测试框架加载待测试智能合约的测试代码;利用自动化测试框架解析测试代码中的合约配置信息,获得合约代码;通过自动化测试框架创建用于测试待测试智能合约的虚拟账户;利用自动化测试框架将待测试智能合约的合约代码部署至区块链环境中;通过自动化测试框架解析待测试智能合约的合约代码为账户对象和合约对象,账户对象包括待测试智能合约中的账户地址;自动化测试框架在执行测试代码过程中,利用虚拟账户和账户对象,并通过合约对象调用待测试智能合约的合约代码中的方法,获得待测试智能合约的合约测试结果。
Description
技术领域
本公开涉及区块链技术领域,具体而言,涉及一种基于区块链的智能合约测试方法、基于区块链的智能合约测试装置、电子设备及计算机可读介质。
背景技术
区块链是一种多方共同维护,使用密码学保证传输和访问安全,能够实现数据一致存储、难以篡改、防止抵赖的记账技术,是一种分布式账本技术。
智能合约是一种旨在以信息化方式传播、验证或执行合同的计算机协议,智能合约允许在没有第三方情况下进行可行交易。由于业务场景的复杂多样性,智能合约需满足图灵完备性,因此其可能存在异常复杂的业务逻辑,为了确保智能合约的质量,对发布的智能合约进行测试是必不可少的环节。
智能合约代码发布场景下,存在代码编码不规范的问题。随着智能合约的增多和大规模的发展,安全问题也频繁的出现,该问题不解决,造成经济上的损失是不可估量的。如何对智能合约进行有效的管理和控制,保证安全的执行合约以及不出现漏洞等,日益显得重要。且合约代码具有公开且上传不可以更改的特性,如何在最短的时间内对智能合约代码进行快速的审计、评估和修复也更加迫切。
相关技术中,对智能合约进行测试的方式有以下几种。
第一种是对合约程序的单元测试,智能合约本身即为计算机程序,一些不依赖于区块链相关接口的功能可以使用语言本身的测试框架来进行单元测试。
第二种是基于上述第一种测试方式,对区块链相关的接口功能进行打桩,即返回虚假数据来模拟智能合约的区块链执行环境,这样可以在一定程度上测试智能合约本身的功能。
但是,上述第一、二种智能合约测试方式,功能有限,仅能对智能合约里与区块链环境无关的逻辑功能进行有效测试,不能够测试复杂的智能合约使用场景。
发明内容
本公开实施例提供一种基于区块链的智能合约测试方法、装置、电子设备及计算机可读介质,进而至少在一定程度上解决相关技术中存在的区块链中的智能合约测试问题。
本公开实施例提出一种基于区块链的智能合约测试方法,所述方法包括:创建用于测试智能合约的自动化测试框架;通过自动化测试框架加载待测试智能合约的测试代码;利用所述自动化测试框架解析所述测试代码中的合约配置信息,获得所述待测试智能合约的合约代码;通过所述自动化测试框架创建用于测试所述待测试智能合约的虚拟账户;利用所述自动化测试框架将所述待测试智能合约的合约代码部署至区块链环境中;通过所述自动化测试框架解析所述待测试智能合约的合约代码为账户对象和合约对象,所述账户对象包括所述待测试智能合约中的账户地址;所述自动化测试框架在执行所述测试代码过程中,利用所述虚拟账户和所述账户对象,并通过所述合约对象调用所述待测试智能合约的合约代码中的方法,获得所述待测试智能合约的合约测试结果。
本公开实施例提出一种基于区块链的智能合约测试装置,所述装置包括:智能合约测试框架创建单元,用于创建用于测试智能合约的自动化测试框架;测试代码加载单元,用于通过自动化测试框架加载待测试智能合约的测试代码;合约配置解析单元,用于利用所述自动化测试框架解析所述测试代码中的合约配置信息,获得所述待测试智能合约的合约代码;虚拟账户创建单元,用于通过所述自动化测试框架创建用于测试所述待测试智能合约的虚拟账户;智能合约部署单元,用于利用所述自动化测试框架将所述待测试智能合约的合约代码部署至区块链环境中;全局对象解析单元,用于通过所述自动化测试框架解析所述待测试智能合约的合约代码为账户对象和合约对象,所述账户对象包括所述待测试智能合约中的账户地址;测试代码执行单元,用于所述自动化测试框架在执行所述测试代码过程中,利用所述虚拟账户和所述账户对象,并通过所述合约对象调用所述待测试智能合约的合约代码中的方法,获得所述待测试智能合约的合约测试结果。
在本公开的一些示例性实施例中,所述装置还包括:合约函数封装单元,用于通过所述自动化测试框架将所述账户对象和所述合约对象封装至合约函数中。
其中,测试代码执行单元包括:合约方法执行单元,用于利用所述合约函数中的所述合约对象调用所述待测试智能合约的合约代码中的方法。
在本公开的一些示例性实施例中,所述装置还包括:交互对象实例构建单元,用于通过所述自动化测试框架的软件开发工具包接口对象,构建交互对象实例;区块链交互单元,用于所述自动化测试框架在执行所述测试代码过程中,利用所述交互对象实例与所述区块链进行交互。
在本公开的一些示例性实施例中,所述装置还包括:交易对象实例化单元,用于若所述测试代码中包括交易对象,则根据所述区块链的交易对象格式,实例化交易对象;交易推送单元,用于通过所述交互对象实例将所述交易对象对应的交易推送至所述区块链。
在本公开的一些示例性实施例中,所述装置还包括:区块链状态快照单元,用于所述自动化测试框架在执行所述测试代码过程之前,若所述区块链环境为真实区块链环境,则通过所述自动化测试框架调用所述真实区块链环境中的区块链状态快照接口,以保存所述区块链的测试前状态。
所述装置还包括:区块链快照恢复单元,用于所述自动化测试框架在执行所述测试代码之后,通过所述自动化测试框架调用所述真实区块链环境中的区块链状态恢复接口,将所述区块链的状态恢复至所述测试前状态。
在本公开的一些示例性实施例中,所述装置还包括:虚拟区块链创建单元,用于在利用所述自动化测试框架将所述待测试智能合约的合约代码部署至区块链环境中之前,若所述区块链环境为虚拟区块链环境,则构建所述虚拟区块链环境中的虚拟区块链,所述虚拟区块链包括一个虚拟节点;状态数据保存单元,用于将所述虚拟区块链的状态和数据保存在内存中;交易执行单元,用于当所述虚拟区块链接收到交易时,生成区块,并执行所述区块中的所述交易;执行引擎提供单元,用于提供用于执行所述待测试智能合约的执行引擎;环境接口提供单元,用于提供所述待测试智能合约中区块链相关的环境接口。
在本公开的一些示例性实施例中,所述装置还包括:测试框架集成单元,用于将所述自动化测试框架集成在智能合约集成开发环境中。
在本公开的一些示例性实施例中,所述装置还包括:第一测试文件生成单元,用于响应在所述智能合约集成开发环境的文件浏览器中对所述待测试智能合约的选择和触发操作,显示测试文件创建控件;响应对所述测试文件创建控件的输入操作,确定所述测试文件的测试文件名、所述待测试智能合约的合约标识和合约文件路径,其中所述测试文件的文件类型与所述待测试智能合约的文件类型相同;将所述测试文件创建在所述待测试智能合约所在的当前目录或者所述智能合约集成开发环境的文件管理器中的指定测试目录,以在所述测试文件中编辑所述测试代码。
在本公开的一些示例性实施例中,所述装置还包括:第二测试文件生成单元,用于响应对所述智能合约集成开发环境的文件浏览器的输入操作,确定所述测试文件的测试文件名,以触发提示控件;响应对所述提示控件的选择操作,确定所述待测试智能合约的合约文件路径;响应针对所述测试文件的输入操作,确定所述待测试智能合约的合约标识;将所述测试文件创建在所述待测试智能合约所在的当前目录或者所述智能合约集成开发环境的文件管理器中的指定测试目录。
在本公开的一些示例性实施例中,所述装置还包括:合约配置代码自动生成单元,用于通过所述自动化测试框架自动生成所述测试代码中的合约配置信息,所述合约配置信息用于关联所述待测试智能合约的合约标识和合约文件路径。
在本公开的一些示例性实施例中,测试代码执行单元包括:目标节点信息监听单元,用于通过所述智能合约集成开发环境在运行所述测试代码的过程中添加***,以用于监听所述测试代码执行过程中的目标节点信息;合约测试结果统计单元,用于所述自动化测试框架根据所述目标节点信息统计获得所述合约测试结果。
其中,所述装置还包括:合约测试结果显示单元,用于通过所述智能合约集成开发环境显示所述合约测试结果。
本公开实施例提出一种电子设备,包括:至少一个处理器;存储装置,用于存储至少一个程序,当所述至少一个程序被所述至少一个处理器执行时,使得所述至少一个处理器实现如上述实施例中所述的基于区块链的智能合约测试方法。
本公开实施例提出一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现如上述实施例中所述的基于区块链的智能合约测试方法。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各种可选实现方式中提供的基于区块链的智能合约测试方法。
在本公开的一些实施例所提供的技术方案中,基于区块链环境,构建一种用于测试智能合约的自动化测试框架,使得该自动化测试框架具备待测试智能合约的测试代码加载功能、测试代码中的合约配置信息解析功能、创建用于测试该待测试智能合约的虚拟账户的功能、将待测试智能合约的合约代码部署至区块链环境中的功能、解析待测试智能合约的合约代码为账户对象和合约对象的功能以及自动执行测试代码的功能等,从而可以让用户简单地构建待测试智能合约相关的测试代码,无需关心待测试智能合约与区块链的复杂交互细节,提升了待测试智能合约的测试效率,进而可以提升待测试智能合约的开发效率,保障待测试智能合约上线之前的质量和安全等。
在本公开的另一些实施例所提供的技术方案中,通过将自动化测试框架融合到智能合约集成开发环境中,让用户可以简单、直接、快速地在智能合约集成开发环境中进行待测试智能合约的测试文件和测试代码的创建、配置、执行以及查看合约测试结果,提供了一套完整的智能合约测试方式、模式与流程。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本公开实施例提供的一种基于区块链的数据处理***的架构示意图。
图2是本公开实施例提供的一种区块链网络的示意图。
图3是本公开实施例提供的一种区块的结构示意图。
图4是本公开实施例提供的一种新区块产生过程的示意图。
图5示意性示出了根据本公开的一个实施例的基于区块链的智能合约测试方法的流程图。
图6示意性示出了根据本公开的另一个实施例的基于区块链的智能合约测试方法的流程图。
图7示意性示出了根据本公开的一个实施例的创建测试文件的流程示意图。
图8示意性示出了根据本公开的又一个实施例的基于区块链的智能合约测试方法的流程图。
图9示意性示出了根据本公开的再一个实施例的基于区块链的智能合约测试装置的框图。
图10示出了适于用来实现本公开实施例的电子设备的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本公开的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本公开的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在至少一个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
本公开实施例所涉及的区块链(blockchain或block chain)是一种分布式数据存储、点对点(Peer to Peer,P2P)传输、共识机制、加密算法等计算机技术的新型应用模式,其本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层;区块链可由多个借由密码学串接并保护内容的串连交易记录(又称区块)构成,用区块链所串接的分布式账本能让多方有效记录交易,且可永久查验此交易(不可篡改)。其中,共识机制是指区块链网络中实现不同节点之间建立信任、获取权益的数学算法,即共识机制是区块链各网络节点共同认可的一种数学算法。
如图1所示,本公开实施例提供的基于区块链的数据处理***可以包括区块链网络100及多个终端设备,图1中以包括三个终端设备为例,分别为第一终端201、第二终端202和第三终端203。其中,第一终端201、第二终端202和第三终端203可用于从区块链网络获取交易数据(包括交易请求或者执行交易请求后生成的交易数据),或向区块链网络上传交易数据。
如图2所示,图1实施例中的区块链网络100中可以包括多个节点设备101,多个节点设备101可以是指区块链网络中各个客户端,区块链网络100是指用于进行节点设备101与节点设备101之间数据共享的***。每个节点设备101在进行正常工作时可以接收到交易数据,并基于接收到的交易数据维护该区块链网络100内的共享数据。为了保证区块链网络100内的信息互通,区块链网络100中的每个节点设备101之间可以存在信息连接,节点设备101之间可以通过上述信息连接进行信息传输。例如,当区块链网络100中的任意节点设备101接收到交易数据时,区块链网络100中的其他节点设备101便根据共识算法获取该交易数据,将该交易数据作为共享数据中的数据进行存储,使得区块链网络100中全部节点设备101上存储的数据均一致。
其中,区块链网络100中的节点设备101、第一终端201、第二终端202和第三终端203可以为任意的电子设备,包括但不限于手机、平板电脑、笔记本电脑、掌上电脑、智能音响、移动互联网设备(mobile internet device,MID)、POS(Point Of Sales,销售点)机、可穿戴设备(例如智能手表、智能手环等);还可以是一***立的服务器、或由若干台服务器组成的服务器集群、或云计算中心。
对于区块链网络100中的每个节点设备101,均具有与其对应的节点设备标识,而且区块链网络100中的每个节点设备101均可以存储有区块链网络100中其他节点设备101的节点设备标识,以便后续根据其他节点设备101的节点设备标识,将生成的区块广播至区块链网络100中的其他节点设备101。每个节点设备101中可维护一个如下表1所示的节点设备标识列表,将节点设备名称和节点设备标识对应存储至该节点设备标识列表中。其中,节点设备标识可为IP(Internet Protocol,网络之间互联的协议)地址以及其他任一种能够用于标识该节点设备的信息,表1中仅以IP地址为例进行说明。其中N为大于或等于1的正整数。
表1
节点名称 | 节点标识 |
节点1 | 117.114.151.174 |
节点2 | 117.116.189.145 |
… | … |
节点N | 119.123.789.258 |
区块链网络100中的每个节点设备101均存储一条相同的区块链。区块链由多个区块组成,每一个区块包含了前一个区块的加密散列(可以用默克尔树(Merkle tree)算法计算的散列值表示)、相应时间戳以及交易数据,这样的设计使得区块内容具有难以篡改的特性。
参见图3,区块链由多个区块组成,创始块中包括区块头和区块主体,区块头中存储有交易数据特征值、版本号、时间戳和难度值,区块主体中存储有交易数据;创始块的下一区块以创始块为父区块,下一区块中同样包括区块头和区块主体,区块头中存储有当前区块的交易数据特征值、父区块的区块头特征值、版本号、时间戳和难度值,并以此类推,使得区块链中每个区块中存储的区块数据均与父区块中存储的区块数据存在关联,保证了区块中交易数据的安全性。
在生成区块链中的各个区块时,参见图4,区块链所在的节点设备在接收到交易数据时,对交易数据进行校验,完成校验后,将交易数据存储至内存池中,并更新其用于记录交易数据的哈希树;之后,将更新时间戳更新为接收到交易数据的时间,并尝试不同的随机数,多次进行特征值计算,使得计算得到的特征值可以满足下述公式:
SHA256(SHA256(version+prev_hash+merkle_root+ntime+nbits+x))<TARGET (1)
其中,SHA256为计算特征值所用的特征值算法;version(版本号)为区块链中相关区块协议的版本信息;prev_hash为当前区块的父区块的区块头特征值;merkle_root为交易数据的特征值;ntime为更新时间戳的更新时间;nbits为当前难度,在一段时间内为定值,并在超出固定时间段后再次进行确定;x为随机数;TARGET为特征值阈值,该特征值阈值可以根据nbits确定得到。
这样,当计算得到满足上述公式的随机数时,便可将信息对应存储,生成区块头和区块主体,得到当前区块。随后,区块链所在节点设备根据区块链网络100中其他节点设备的节点设备标识,将新生成的区块分别发送给其所在的区块链网络100中的其他节点设备,由其他节点设备对新生成的区块进行校验,并在完成校验后将新生成的区块添加至其存储的区块链中。
图5示意性示出了根据本公开的一个实施例的基于区块链的智能合约测试方法的流程图。图5实施例提供的方法可以由任意的电子设备执行,例如图1中的第一终端201、第二终端202和第三终端203中的任一终端设备。
如图5所示,本公开实施例提供的方法可以包括以下步骤。
在步骤S510中,创建用于测试智能合约的自动化测试框架。
本公开实施例中,创建一种用于测试智能合约的自动化测试框架,使得该自动化测试框架具备待测试智能合约的测试代码加载功能、测试代码中的合约配置信息解析功能、创建用于测试该待测试智能合约的虚拟账户的功能、将待测试智能合约的合约代码部署至区块链环境中的功能、解析待测试智能合约的合约代码为账户对象和合约对象的功能以及自动执行测试代码的功能等,还可以包括其它用于实现智能合约自动化测试的功能。
在步骤S520中,通过自动化测试框架加载待测试智能合约的测试代码。
在示例性实施例中,所述方法还可以包括:将所述自动化测试框架集成在智能合约集成开发环境中。
本公开实施例中,智能合约集成开发环境(Integrated DevelopmentEnvironment,IDE)是用于提供程序开发环境的应用程序,可以包括代码编辑器、编译器、调试器和图形用户界面等工具,以下简写为IDE。
本公开实施例采用的IDE是一种可视化的IDE,例如在线智能合约IDE、VS Code(Visual Studio Code,可视化工作室代码)插件等。
本公开实施例中的自动化测试框架,是一种运行测试的工具,通过自动化测试框架,例如可以为待测试智能合约添加测试,从而保证待测试智能合约的合约代码的质量。
本公开实施例中,用户可以使用C++、js、Solidity、Python等编程语言将约定的条款编程为待测试智能合约,当条款得到满足时,待测试智能合约可以由区块链***自动执行,例如,执行交易。在下面的举例说明中,均以js为例进行举例说明,但本公开并不限定于此。
本公开实施例中,假设待测试智能合约的合约代码采用js(javascript的简写,是一种具有函数优先的轻量级、解释型或即时编译型的编程语言)语言编写,则自动化测试框架可以采用js代码测试框架mocha(摩卡)、chai等,但本公开并不限定于此。
mocha是一个功能丰富的js代码测试框架,既可以在浏览器环境下运行,也可以在Node.js环境下运行。通过使用mocha,用户只需要专注于编写测试代码本身,然后,让mocha去自动运行所有的测试,并给出合约测试结果。
本公开实施例中,将自动化测试框架融合到IDE环境中,例如可以采用VS Code的插件机制。
本公开实施例中,通过将自动化测试框架融合到智能合约集成开发环境中,让用户可以简单、直接、快速地在智能合约集成开发环境中进行待测试智能合约的测试文件和测试代码的创建、配置、执行以及查看合约测试结果,提供了一套完整的智能合约测试方式、模式与流程。
本公开实施例中,待测试智能合约可以是任意需要被测试的智能合约,需要通过测试,确认该智能合约是否存在问题。
其中,待测试智能合约是一种旨在以信息化方式传播、验证或执行合同的计算机协议,可以执行某个合约的条款,通过部署在共享账本上的用于满足一定条件时而执行的代码实现,根据实际的业务需求代码用于完成自动化的交易,例如查询买家所购买的物流状态,在买家签收货物后将买家的电子资源转移到商家的地址;当然,待测试智能合约不仅限于执行用于交易的合约,还可以执行对接收的信息进行处理的合约。待测试智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。
区块链上的待测试智能合约是在区块链上可以被交易触发执行的合约。待测试智能合约可以通过合约代码的形式定义。
以以太坊为例,支持用户在以太网网络中创建并调用一些复杂的逻辑。以太坊作为一个可编程区块链,其核心是以太坊虚拟机(Ethereum Virtual Machine,EVM),每个以太坊节点都可以运行EVM。EVM是一个图灵完备的虚拟机,通过它可以实现各种复杂的逻辑。用户在以太坊中发布和调用待测试智能合约就是在EVM上运行的。实际上,EVM直接运行的是虚拟机代码(虚拟机字节码,简称“字节码”),所以部署在区块链上的待测试智能合约可以是字节码。
在示例性实施例中,所述方法还可以包括:响应在所述智能合约集成开发环境的文件浏览器中对所述待测试智能合约的选择和触发操作,显示测试文件创建控件;响应对所述测试文件创建控件的输入操作,确定所述测试文件的测试文件名、所述待测试智能合约的合约标识和合约文件路径,其中所述测试文件的文件类型与所述待测试智能合约的文件类型相同;将所述测试文件创建在所述待测试智能合约所在的当前目录或者所述智能合约集成开发环境的文件管理器中的指定测试目录,以在所述测试文件中编辑所述测试代码。
在示例性实施例中,所述方法还可以包括:响应对所述智能合约集成开发环境的文件浏览器的输入操作,确定所述测试文件的测试文件名,以触发提示控件;响应对所述提示控件的选择操作,确定所述待测试智能合约的合约文件路径;响应针对所述测试文件的输入操作,确定所述待测试智能合约的合约标识;将所述测试文件创建在所述待测试智能合约所在的当前目录或者所述智能合约集成开发环境的文件管理器中的指定测试目录。
在示例性实施例中,所述方法还可以包括:通过所述自动化测试框架自动生成所述测试代码中的合约配置信息,所述合约配置信息用于关联所述待测试智能合约的合约标识和合约文件路径。
在集成自动化测试框架的智能合约集成开发环境中,创建待测试智能合约的测试文件并确定所述待测试智能合约的合约标识信息。
在示例性实施例中,所述待测试智能合约的合约标识信息可以包括所述待测试智能合约的合约标识(identity,ID)。
本公开实施例中,测试文件是用来测试待测试智能合约的合约代码的脚本,测试文件与所要测试的待测试智能合约的合约代码同名,若待测试智能合约的文件类型为js,则测试文件的文件类型也为js,测试文件的测试文件名的后缀名可以为.test.js,以用于该测试文件是用于测试的,且文件类型也为js。
在示例性实施例中,所述待测试智能合约的合约标识信息包括所述待测试智能合约的合约文件路径和合约标识。
在步骤S530中,利用所述自动化测试框架解析所述测试代码中的合约配置信息,获得所述待测试智能合约的合约代码。
在步骤S540中,通过所述自动化测试框架创建用于测试所述待测试智能合约的虚拟账户。
在步骤S550中,利用所述自动化测试框架将所述待测试智能合约的合约代码部署至区块链环境中。
在步骤S560中,通过所述自动化测试框架解析所述待测试智能合约的合约代码为账户对象和合约对象,所述账户对象包括所述待测试智能合约中的账户地址。
在示例性实施例中,所述方法还可以包括:通过所述自动化测试框架将所述账户对象和所述合约对象封装至合约函数中。
所述合约函数包括所述待测试智能合约的合约标识和回调函数,以表示所述合约函数为所述待测试智能合约的测试用例。其中,所述回调函数可以包括账户对象和所述合约对象,所述账户对象可以表示所述合约函数使用的区块链中的账户地址数组,所述账户地址数组中可以包括所述区块链中的测试账户。所述合约对象可以用于调用所述待测试智能合约的合约代码中的方法。
本公开实施例中的待测试智能合约可以包括合约代码和数据,例如可以包括变量以及合约代码中的方法(简称为合约方法),可以通过执行合约方法实现对应的功能。
当需要对待测试智能合约进行测试时,可以向区块链环境或区块链网络中的区块链节点(例如图2中的节点设备101)发送消息。消息中可以携带作为消息发送方的测试账户的账户地址以及作为消息接收方的测试账户的账户地址,作为消息接收方的测试账户的账户地址为需要调用的待测试智能合约的账户地址,以表示该消息是发送给该账户地址对应的待测试智能合约的。作为消息发送方的测试账户的账户地址可以是外部账户地址。
其中,以太坊中的账户地址可以包括外部账户地址以及合约账户地址。外部账户地址是指用户的账户地址,用户的账户地址可以根据用户的私钥得到,用于标识用户。合约账户地址是待测试智能合约的账户地址,用于标识待测试智能合约。消息还可以携带测试相关的参数,例如还可以携带合约执行参数,以使得可以根据合约执行参数执行待测试智能合约。合约执行参数是对待测试智能合约进行测试时,需要输入到待测试智能合约中的参数,待测试智能合约的账户地址用于确定所被测试的待测试智能合约。
合约执行参数可以根据待测试智能合约的类型确定。例如,如果待测试智能合约包括转账方法,则合约执行参数可以包括转账金额。如果待测试智能合约包括签名认证方法,则合约执行参数可以包括签名数据。测试结果确定策略用于确定待测试智能合约的合约测试结果。例如当合约执行参数为资源转移数量时,测试结果确定策略可以为:对于转出资源的测试账户,当转移前的资源数量等于转移后的资源数量加上资源转移数量时;对于接收资源的测试账户,当转移前的资源数量等于转移后的资源数量减去资源转移数量时,则测试结果为通过。
一个待测试智能合约中可以包括一个或多个方法,例如可以为资源转移方法、数量计算方法或共识方法。写入合约执行参数、待测试智能合约的账户地址、测试结果确定策略或者所要调用的合约方法的一个或多个,在执行时可以直接获取这些写入的参数进行测试。在执行待测试智能合约时,可以将待测试智能合约加载在以太坊虚拟机中执行。以太坊虚拟机是待测试智能合约的运行环境。待测试智能合约的代码是编译后可以在以太坊虚拟机中运行的字节码。待测试智能合约包含可以调用的函数,即合约方法,可以执行所有的合约方法,也可以执行部分合约方法,例如,消息中可以携带所要调用方法的方法标识,根据方法标识执行对应的合约方法。合约测试结果是指执行待测试智能合约的合约方法得到的结果。在区块链环境中执行测试,能够更准确的检测出待测试智能合约存在的问题,提高待测试智能合约测试的效率。
本公开实施例中,测试代码里可以包括一个或多个合约函数(contract函数),每个合约函数可以包括一个或多个it块,合约函数可以用于表示针对同一待测试智能合约的一组相关的测试,它是一个函数,第一个参数可以是待测试智能合约的名称(例如假设待测试智能合约的名称为testHello,可以将该名称作为该待测试智能合约的合约ID),第二个参数是一个实际执行的函数,在本公开实施例中,可以是一个回调函数。回调函数是一个被作为参数传递的函数。
其中,it块可以称为测试用例,表示一个单独的测试,是测试的最小单位,它也是一个函数,第一个参数是测试用例的名称,第二个参数是一个实际执行的函数。
示例的测试代码如下:
在示例性实施例中,所述方法还可以包括:通过所述自动化测试框架的软件开发工具包接口对象,构建交互对象实例。
在示例性实施例中,所述方法还可以包括:若所述测试代码中包括交易对象,则根据所述区块链的交易对象格式,实例化交易对象;通过所述交互对象实例将所述交易对象对应的交易推送至所述区块链。
本公开实施例中,测试代码的编写从形式上遵循自动化测试框架例如mocha的测试用例写法,同时可以使用智能合约框架包装进来的相关API(Application ProgrammingInterface,应用程序接口)函数和全局对象,相关API函数例如可以包括contract函数、回调函数等,全局对象可以包括accounts对象、contract对象、transaction对象(交易对象)等,相关API函数和全局对象在测试代码中可以直接调用,不需要任何引入。
其中,contract函数,表示对这个待测试智能合约的一组相关的测试用例。contract函数的最后一个参数可以为一个回调函数,这个回调函数中定义了两个参数:accounts对象和contract对象。
其中accounts对象代表当前测试用例可以使用的区块链中的账户地址数组,contract对象代表待测试智能合约被解析过的智能合约对象,可以直接使用contract对象来调用待测试智能合约中的方法/合约方法,而无需关心与区块链的交互,用户可以在测试代码中直接使用accounts对象和contract对象这两个参数与待测试智能合约以及区块链进行交互。
示例如下,假设待测试智能合约的名称为testHi.js,js的后缀代表待测试智能合约的文件类型为js,testHi.js的合约代码为:
针对上述testHi.js相应的测试用例的测试代码可以为:
上述测试用例(it块)含有一句或多句的断言。断言功能由断言库来实现,mocha本身不带断言库,可以先引入断言库。断言库有很多种,mocha并不限制使用哪一种。例如还可以引入的断言库是chai,并且指定使用它的expect断言风格。如果expect断言不成立,就会抛出一个错误。只要不抛出错误,测试用例就算通过。chai是一个针对Node.js和浏览器的行为驱动测试和测试驱动测试的诊断库,可与任何js测试框架集成。
本公开实施例中,待测试智能合约实际上就是区块链上要执行的合约代码,合约代码里有方法,在区块链上执行待测试智能合约,就是让区块链找到待测试智能合约,然后调用待测试智能合约里的某个方法。测试代码首先要能找到要待测试智能合约,见上边的例子,用待测试智能合约的合约文件路径来查找。在测试代码调用待测试智能合约其中的方法时,是通过自动化测试框架把待测试智能合约解析成一个对象(即测试代码里的contract对象),测试代码拿到这个对象,可以直接使用其中的方法,自动化测试框架将测试代码对合约方法的调用转化为对区块链中待测试智能合约的方法的执行。
本公开实施例中,还可以使用区块链SDK(Software Development Kit,软件开发工具包)的相关接口实例,用以在测试代码中也同时可以处理与区块链的交互。具体的,自动化测试框架暴露了一个sdkInterface(SDK接口)对象作为与区块链交互的SDK接口对象。一些复杂的情况,如果当前的自动化测试框架暴露出来的全局对象做不了,可以直接用这个SDK接口对象与区块链进行交互。
例如:
本公开实施例中,transaction对象代表区块链中的一个交易,用以处理复杂的交互。
具体的,可以按照区块链要求的交易对象格式,实例化一个交易对象tx,本公开实施例中不具体限制这个交易对象的格式,例如是a发给b一笔电子资源,tx里定义具体字段。然后通过上边暴露出来的SDK接口对象将交易push(推送)给区块链。
在示例性实施例中,所述自动化测试框架在执行所述测试代码过程之前,所述方法还可以包括:若所述区块链环境为真实区块链环境,则通过所述自动化测试框架调用所述真实区块链环境中的区块链状态快照接口,以保存所述区块链的测试前状态。
在示例性实施例中,在利用所述自动化测试框架将所述待测试智能合约的合约代码部署至区块链环境中之前,所述方法还可以包括:若所述区块链环境为虚拟区块链环境,则构建所述虚拟区块链环境中的虚拟区块链,所述虚拟区块链包括一个虚拟节点;将所述虚拟区块链的状态和数据保存在内存中;当所述虚拟区块链接收到交易时,生成区块,并执行所述区块中的所述交易;提供用于执行所述待测试智能合约的执行引擎;提供所述待测试智能合约中区块链相关的环境接口。
本公开实施例中,IDE可以对测试代码的编写提供高亮显示、自动补充、参数提示等功能,可以将测试相关的API函数添加到提示配置中,具体显示的提示信息可以根据实际情况而定,本公开对此不做限定。
在步骤S570中,所述自动化测试框架在执行所述测试代码过程中,利用所述虚拟账户和所述账户对象,并通过所述合约对象调用所述待测试智能合约的合约代码中的方法,获得所述待测试智能合约的合约测试结果。
在示例性实施例中,利用所述合约对象调用所述待测试智能合约的合约代码中的方法,可以包括:利用所述合约函数中的所述合约对象调用所述待测试智能合约的合约代码中的方法。所述自动化测试框架在执行所述测试代码过程中,利用所述交互对象实例与所述区块链进行交互。
在示例性实施例中,所述自动化测试框架在执行所述测试代码之后,所述方法还可以包括:通过所述自动化测试框架调用所述真实区块链环境中的区块链状态恢复接口,将所述区块链的状态恢复至所述测试前状态。
在示例性实施例中,获得所述待测试智能合约的合约测试结果,可以包括:通过所述智能合约集成开发环境在运行所述测试代码的过程中添加***,以用于监听所述测试代码执行过程中的目标节点信息;所述自动化测试框架根据所述目标节点信息统计获得所述合约测试结果。
例如,监听的目标节点信息可以包括但不限于:所述测试代码执行过程中的测试开始时间、各个待测试智能合约的测试开始时间、各个待测试智能合约的各个测试用例的执行结果、各个待测试智能合约的测试结束时间。
统计获得的合约测试结果可以包括但不限于:根据所述测试代码执行过程中的测试开始时间、各个待测试智能合约的测试开始时间、各个待测试智能合约的各个测试用例的执行结果、各个待测试智能合约的测试结束时间统计获得总测试用例数、总测试用时、测试成功的用例条数、测试失败的用例条数、测试阻塞的用例条数、各个待测试智能合约的测试用时、各个待测试智能合约的测试用例成功数、各个待测试智能合约的测试用例失败数、各个待测试智能合约的测试用例阻塞数、各个测试用例的用时、各个失败用例的错误信息,以作为所述合约测试结果。
在示例性实施例中,所述方法还可以包括:通过所述智能合约集成开发环境显示所述合约测试结果。
本公开实施例中,合约测试结果的展示,可以在测试执行的过程中添加***,监听测试执行的以下各个关键节点,以进行数据统计:
整个测试过程开始时,即测试代码执行过程中的测试开始时间,若是批量执行多个待测试智能合约,则这里的测试代码相应的包括多个;
每一个测试合约执行开始时,即各个待测试智能合约的测试开始时间;
合约的每一条测试用例执行成功时,各个待测试智能合约的各个测试用例的执行结果可以包括执行成功、执行失败和执行阻塞,这里是指各个待测试智能合约的各个测试用例的执行结果为执行成功的时间;
合约的每一条测试用例执行失败时,这里是指各个待测试智能合约的各个测试用例的执行结果为执行失败的时间;
合约的每一条测试用例执行阻塞时,这里是指各个待测试智能合约的各个测试用例的执行结果为执行阻塞的时间;
每一个测试合约执行结束时,即各个待测试智能合约的测试结束时间;
整个测试过程结束时。
根据以上节点可以得到的统计信息可以包括如下信息:
总的测试用例数量,即总测试用例数;
总的测试用时,即总测试用时;
测试成功的用例条数;
测试失败的用例条数;
测试阻塞的用例条数;
每个合约的测试用时,即各个待测试智能合约的测试用时;
每个合约的测试用例成功数、失败数、阻塞数,即各个待测试智能合约的测试用例成功数、各个待测试智能合约的测试用例失败数、各个待测试智能合约的测试用例阻塞数;
每一条测试用例的用时,即各个测试用例的用时;
每一条失败用例的错误信息(如堆栈等)。
根据以上统计信息,获得合约测试结果,测试执行结束时可以通过html(HyperText Markup Language,超文本标记语言)方式形成测试报告,输出到当前IDE的一个独立的窗口或者区域。
本公开实施例中,测试代码编辑完成后,在IDE的文件管理器中右键点击测试文件、或者在IDE中添加快捷菜单或者工具栏按钮,均可以对测试文件发起运行。运行的结果即测试代码的执行结果作为合约测试结果,可以在IDE的单独窗口展示,以html页面的形式,内容提纲如下:
测试代码路径
测试代码运行进度指示
测试代码运行结果总览(测试通过的测试case条数,测试失败的测试case条数,总用时)
[详细信息]
测试合约一名称[测试标题]
case1结果、名称、以及用时(如果用时过短则不展示用时,点击可展示case代码)
case2结果、名称、以及用时(如果用时过短则不展示用时,点击可展示case代码)
……
测试合约二名称[测试标题]
case1结果、名称、以及用时(如果用时过短则不展示用时,点击可展示case代码)
case2结果、名称、以及用时(如果用时过短则不展示用时,点击可展示case代码)
……
……
本公开实施方式提供的基于区块链的智能合约测试方法,基于区块链环境,构建一种用于测试智能合约的自动化测试框架,使得该自动化测试框架具备待测试智能合约的测试代码加载功能、测试代码中的合约配置信息解析功能、创建用于测试该待测试智能合约的虚拟账户的功能、将待测试智能合约的合约代码部署至区块链环境中的功能、解析待测试智能合约的合约代码为账户对象和合约对象的功能以及自动执行测试代码的功能等,从而可以让用户简单地构建待测试智能合约相关的测试代码,无需关心待测试智能合约与区块链的复杂交互细节,提升了待测试智能合约的测试效率,进而可以提升待测试智能合约的开发效率,保障待测试智能合约上线之前的质量和安全等。
下面结合图6至图8对本公开实施例提供的方法进行举例说明。
本公开实施例可以在智能合约IDE中集成自动化测试框架相关的功能,其中智能合约IDE例如在线版的Remix IDE,或者用来编写待测试智能合约的VS Code插件。
本公开实施例中,测试代码的运行环境为区块链环境,这里可以包括真实区块链环境和虚拟区块链环境。如果运行在真实区块链环境,则区块链的节点提供区块链状态快照接口和区块链状态恢复接口,这样测试的运行不会影响到当前区块链的状态,具体过程如下图6所示。
图6示意性示出了根据本公开的另一个实施例的基于区块链的智能合约测试方法的流程图。
如图6所示,本公开实施例提供的方法可以包括以下步骤。
在步骤S610中,对区块链状态进行快照保存。
即调用所述区块链状态快照接口,以保存所述区块链的测试前状态。
在步骤S620中,运行待测试智能合约的测试用例。
在步骤S630中,将区块链状态恢复到上一个快照。
在执行所述测试代码,以获得所述合约测试结果之后,调用所述区块链状态恢复接口将所述区块链的状态恢复至保存的测试前状态。
本公开实施例中,区块链可以由任意语言编写,比如js,区块链实际上是分布式账本,是一种状态的集合,在执行测试之前,在区块链中将这个测试前状态保存起来,即是对区块链当前状态的快照,测试完成时,将保存的测试前状态恢复成区块链的状态,即为恢复。
如果运行在虚拟区块链环境,则在进行待测试智能合约的测试之前,可以以如下方式构建虚拟区块链环境:
无共识、只有一个虚拟节点;
所有区块链状态和数据均在内存保存;
每一个交易到达时立即出一个区块,并执行交易;
提供对待测试智能合约的执行引擎;
提供待测试智能合约中区块链相关的环境接口。
本公开实施例中,搭建虚拟区块链环境可以包括:配置待测试智能合约运行所需的API;配置待测试智能合约运行所需的全局账本状态;配置待测试智能合约运行所需的区块数据(确定待测试智能合约在真实区块链网络环境运行时所涉及的目标区块,生成与目标区块对应的模拟区块,模拟区块的数据可以将其简化为以键值对的形式存储于内存中。其中,在虚拟区块链环境中仅保存当前要测试的待测试智能合约关联的区块数据,无需获取真实区块链环境中的全部区块数据,减少了用户的工作量。
具体的,可以根据真实区块链环境中当前的全局账本状态来配置虚拟区块链环境中的全局账本状态,首先获取真实区块链环境中的全局账本状态数据;然后创建本地键值对数据库,并在本地键值对数据库中存储获取的全局账本状态数据,可以通过配置redis键值对数据库,实现对获取的全局账本状态数据的存储,还可通过内存中的map数据结构的方式实现对获取的全局账本状态数据的存储。通过分析和分解待测试智能合约实际运行的真实区块链环境,确定真实区块链环境支持待测试智能合约运行的基本框架,模拟这些基本框架的功能,搭建可以支持待测试智能合约运行的虚拟区块链环境。
其中,支持待测试智能合约运行的基本框架可以包括:第一,底层区块链的应用程序编程接口API,API包括invoker数据写入、query数据查询、range query范围查询等基本接口;第二,区块链网络中的区块block,在真实区块链环境中,block块之间以链的形式串联连接在一起的,同时存储在区块链的文件***中,包含了该区块链网络上发生的所有的历史数据和发生的事件;第三,区块链网络中的全局账本状态world state,全局账本状态用于存储当前区块链网络中的所有key/value键值对的最新值;第四,待测试智能合约被调用触发的时候,对应的触发数据。由于虚拟区块链环境中的模拟区块的数据是以键值对的形式进行保存的,在相应的模拟区块的数据被待测试智能合约调用时,需要将其转化为真实区块链环境中的区块数据格式,以对上层的待测试智能合约提供统一的返回接口。具体的,可以通过模拟API打桩的方式,在相应的区块数据被调用时进行数据格式的转换,这样也实现了在虚拟区块链环境中待测试智能合约与底层数据结构的隔离。
在测试时,可以将待测试智能合约加载至虚拟区块链环境;对待测试智能合约进行编译,获得可执行文件;执行该可执行文件,生成待测试智能合约的服务;调用该服务,并提供触发数据以触发该待测试智能合约在虚拟区块链环境中运行。虚拟区块链环境为对待测试智能合约实际运行的真实区块链环境进行模拟而得到的运行环境。待测试智能合约实际运行的真实区块链环境是指待测试智能合约发布之后实际运行的真实的区块链环境。虚拟区块链环境可以提供与真实区块链环境一致的外部依赖数据、一致的底层接口、以及一致的触发数据,使得待测试智能合约在该虚拟区块链环境中运行时能够与其在真实区块链环境中运行时表现出一致的行为逻辑。
通过在虚拟区块链环境中对待测试智能合约的合约代码的源代码进行编译,可以生成可执行文件。具体的,待测试智能合约的源代码在虚拟区块链环境中存放于类库单元(package,也可称为包)中,通过对相应的类库单元中的待测试智能合约的源代码执行编译,得到一个可执行文件。该可执行文件在执行之后可生成用于触发待测试智能合约运行的服务。可以将多个待测试智能合约加载至虚拟区块链环境中,并分别存放于不同的类库单元中,然后通过共同执行编译,生成服务。再通过应用程序提供不同的触发数据,来触发该服务调用和运行与相应的触发数据对应的待测试智能合约。该服务运行于虚拟区块链环境的后台,等待被触发和调用。待测试智能合约的触发和调用可以由应用程序来完成,虚拟区块链环境提供了与真实区块链环境一致的访问接口,例如,该访问接口可以为Restful接口。由此,使得应用程序可以如访问真实区块链网络一样访问该虚拟区块链环境,从而可以调用该服务并提供触发数据以触发待测试智能合约在该虚拟区块链环境中运行。所提供的触发数据与待测试智能合约在真实区块链环境中运行时的触发数据保持一致,在实际应用时,可以通过应用程序来调用相应的服务并提供触发数据。
待测试智能合约运行于虚拟区块链环境,在该虚拟区块链环境中,可以随时查看待测试智能合约的运行状态,并且,还可以方便的直接进行待测试智能合约的代码的调试。在指定的断点中断待测试智能合约的运行,并输出待测试智能合约的当前运行状态信息。在虚拟区块链环境中运行的待测试智能合约,可以随时指定断点,并在该断点中断智能合约的运行,例如,当用户需要查看某待测试智能合约运行时某个时间点的状态时,可以通过设置断点中断待测试智能合约的运行,同时,虚拟区块链环境可以输出待测试智能合约中断时的运行状态,以供用户使用。虚拟区块链环境是脱离了真实区块链环境的运行环境,既能够支持待测试智能合约的运行,也不影响真实区块链网络,故可以支持随时中断待测试智能合约的运行,也可以支持随时进行待测试智能合约的代码的调试,方便了用户进行待测试智能合约的开发和测试。
本公开实施例可以采用js语言作为待测试智能合约的测试代码的开发语言,采用js代码自动化测试框架mocha和chai进行二次封装,主要是将区块链以及合约功能相关的功能与js自动化测试框架进行集成。
其中,待测试智能合约的测试代码的文件以.test.js结尾,即其也是一种js文件,这样可以充分利用支持js的IDE,比如VS Code。另外,这样定义的文件名规则,可以在IDE中方便识别测试代码和测试文件,以及实时监测当前工程里测试文件的创建动作。
图7示意性示出了根据本公开的一个实施例的创建测试文件的流程示意图。如图7所示,本公开实施例提供的方法可以包括以下步骤。
在步骤S710中,在IDE中创建测试文件,可以执行步骤S720,也可以执行步骤S730。
在步骤S720中,在IDE文件浏览器中选择待测试智能合约,右键菜单创建,然后执行步骤S750。
本公开实施例中,提供了两种测试文件的创建与配置方式,一种是可以在IDE的文件浏览器中选中某一个智能合约文件作为待测试智能合约,点击菜单或者快捷按钮创建相应的测试文件,测试文件可以创建在待测试智能合约所在的当前目录或者文件管理器中的某一个指定测试目录,但不能与已有测试文件重名。
例如,VS Code文件浏览器中,右键点击某一个合约文件,如js文件,将其确定为待测试智能合约,然后出现菜单,菜单里添加选项‘创建合约测试文件’。
在步骤S730中,通过IDE菜单命令或者按钮直接创建待测试智能合约的测试文件。
在步骤S740中,提示选择待测试智能合约的合约文件路径,然后执行步骤S750。
在步骤S750中,用户输入测试文件名称。
在步骤S760中,用户输入测试时合约部署ID。
另一种方式是,也可以在IDE的文件浏览器中不选择待测试智能合约,直接创建新的测试文件,创建测试文件以后则提示选择要测试的待测试智能的合约文件路径以及填写测试时要部署的待测试智能的合约ID。
例如,VS Code文件浏览器中,直接创建测试文件,测试文件的扩展名为指定的待测试智能合约的测试文件扩展名,如.test.js,创建后则触发提示。
在步骤S770中,自动生成合约配置相关代码,写入新建合约测试文件。
本公开实施例中,在创建出的测试文件中可以自动生成相关代码或者注释,用来关联待测试智能合约的合约文件路径以及待测试智能合约部署时的合约ID,这样在测试代码执行的过程中所要测试的待测试智能合约可以被成功地找到并部署到区块链中,示例如下。
图8示意性示出了测试代码执行引擎执行的如下步骤。
在步骤S810中,加载测试代码。
在步骤S820中,解析测试代码中的合约配置,即在所述测试文件中生成的用于关联所述待测试智能合约的合约文件路径与合约标识的配置信息。
步骤S820通过解析测试代码中的配置信息,可以找到要测试的待测试智能合约的合约代码。
在步骤S830中,构建与区块链的交互对象实例。
本公开实施例中,区块链有接口向外暴露,用来发送交易、查询状态等,把这个接口对象保存起来使用作为对象交互实例。
在区块链框架比如以太坊或hyperledger fabric中,每一个函数调用都需要通过发起一笔交易的手段来操作。调用待测试智能合约中的特定函数,需要提交一笔交易,一笔交易可以看做是一个原子性操作。提交若干笔交易来调用若干个函数以达到特定目的。
区块链***中,待测试智能合约中的每一个函数的调用都是通过发起交易来实现。在每个交易中,都包含一个from字段,代表了这个交易的发起人,不同用户发起的交易,from字段中的内容不相同,通过在不同的测试用例中设置不同的from字段,来模拟不同用户访问同一智能合约。
在步骤S840中,对区块链进行快照。
可以参照上述图6实施例的描述。
在步骤S850中,创建测试使用的区块链账户。
本公开实施例中,区块链中可以使用数据库存储账户和账户所现有的电子资源,并且暴露账户创建接口用来创建账户和充值。
本公开实施例中,测试账户也可以称为虚拟账户,可以是区块链中的账户地址,可以调用待测试智能合约、执行交易等,按照区块链的地址格式,在测试中可以创建N个账户,作为测试使用。其中,虚拟账户是指测试时使用的账户,在区块链快照中创建并充值,测试完成后不再使用,这样不影响区块链的状态。
在区块链中所有的交易都需要消耗掉gas(电子资源的一种),账户必须有相应的余额才能进行交易。
在步骤S860中,在区块链中部署待测试智能合约。
本公开实施例中,把待测试智能合约保存到区块链中,使其可以让任意节点设备调用,实现上可以使用数据库保存智能合约的合约ID、合约代码等。
本公开实施例中的任意一个待测试智能合约可以通过以下方式部署到区块链网络上,但本公开并不限定于此。用户将一笔包含创建待测试智能合约的交易(transaction)发送到区块链网络后,各节点设备均可以在EVM中执行这笔交易。其中,交易中的From字段用于记录发起创建待测试智能合约的账户的地址,交易的Data字段的字段值保存的合约代码可以是字节码,交易的To字段的字段值为一个null(空)的账户。当节点间通过共识机制达成一致后,这个待测试智能合约成功创建,后续用户可以调用这个待测试智能合约。
每个待测试智能合约创建后,区块链上出现一个与各个待测试智能合约对应的合约账户,并拥有一个特定的地址。合约代码(Code)将保存在该合约账户的账户存储(Storage)中。待测试智能合约的行为由合约代码控制,而待测试智能合约的账户存储则保存了合约的状态。即待测试智能合约使得区块链上产生包含合约代码和账户存储的虚拟账户。在一个待测试智能合约中可以声明多种成员,包括状态变量、函数、函数修改器、事件等。状态变量是永久存储在待测试智能合约的账户存储(Storage)字段中的值,用于保存待测试智能合约的状态。
在步骤S870中,解析合约为一个可以直接对其方法进行调用的合约对象。
在步骤S880中,在自动化测试框架中封装账户对象、合约对象等全局对象。
本公开实施例中,accounts对象和contract对象是自动化测试框架已经准备好的对象,测试代码可以直接使用,测试代码写在contract函数中。
本公开实施例中,可以对待测试智能合约中的函数进行封装,即将待测试智能合约包装成一个类,待测试智能合约中的方法包装为类实例的方法,这样测试代码使用起来方便。
在步骤S890中,执行合约测试代码。
如图2所示,假设有属于同一区块链的4个节点设备101。各个节点设备101可以部署有待测试智能合约。当需要对待测试智能合约进行测试时,向节点设备101发送测试消息,该消息携带待测试智能合约的账户地址,节点设备101可以根据消息执行待测试智能合约的测试代码,得到合约测试结果。由于节点设备101可以广播消息,因此,其他各个节点设备101也可以执行待测试智能合约的测试代码。各个节点设备101之间可以利用网络进行连接,以进行共识认证。
在步骤S8100中,输出测试执行结果报告。
可以将获得的合约测试结果以报告的形式显示。
在步骤S8110中,恢复区块链到测试执行之前的快照状态。
可以参照上述图6实施例的描述。
本公开实施方式提出的基于区块链的智能合约测试方法,提出一种对智能合约进行代码测试的自动化测试框架、流程和模式,可以让智能合约开发者快速简洁地对智能合约进行代码测试。一方面,本公开实施例基于真实区块链环境或者构建虚拟区块链环境,融合自动化测试框架技术(如js代码测试框架mocha,chai等),在自动化测试框架中添加对区块链的快照与恢复、对智能合约的部署、虚拟账户的创建和充值、对智能合约的函数封装等过程,高效编写测试逻辑和场景,隐藏与区块链交互的细节,可以让用户简单地构建智能合约相关的测试用例,无需关心智能合约与区块链的复杂交互细节,还可以批量执行测试用例并展示智能合约在区块链中执行的合约测试结果;另一方面,将自动化测试框架融合到可视化的IDE环境中,如在线智能合约IDE,VS Code插件等,让用户可以简单直接地在IDE中进行合约测试程序的创建、配置、执行以及查看测试结果,方便地执行测试程序以及查看测试执行结果。本公开实施例可以用于区块链智能合约的开发生态工具集合、测试工具集合,提升智能合约开发效率,保障合约上线之前的质量和安全等。
以下介绍本公开的相关设备实施例,可以用于执行本公开上述的基于区块链的智能合约测试方法。对于本公开相关设备实施例中未披露的细节,请参照本公开上述的基于区块链的智能合约测试方法的实施例。
图9示意性示出了根据本公开的一实施例的基于区块链的智能合约测试装置的框图。
参照图9所示,根据本公开的一个实施例的基于区块链的智能合约测试装置900可以包括:智能合约测试框架创建单元910、测试代码加载单元920、合约配置解析单元930、虚拟账户创建单元940、智能合约部署单元950、全局对象解析单元960以及测试代码执行单元970。
本公开实施例中,智能合约测试框架创建单元910可以用于创建用于测试智能合约的自动化测试框架。测试代码加载单元920可以用于通过自动化测试框架加载待测试智能合约的测试代码。合约配置解析单元930可以用于利用所述自动化测试框架解析所述测试代码中的合约配置信息,获得所述待测试智能合约的合约代码。虚拟账户创建单元940可以用于通过所述自动化测试框架创建用于测试所述待测试智能合约的虚拟账户。智能合约部署单元950可以用于利用所述自动化测试框架将所述待测试智能合约的合约代码部署至区块链环境中。全局对象解析单元960可以用于通过所述自动化测试框架解析所述待测试智能合约的合约代码为账户对象和合约对象,所述账户对象包括所述待测试智能合约中的账户地址。测试代码执行单元970可以用于所述自动化测试框架在执行所述测试代码过程中,利用所述虚拟账户和所述账户对象,并通过所述合约对象调用所述待测试智能合约的合约代码中的方法,获得所述待测试智能合约的合约测试结果。
在示例性实施例中,基于区块链的智能合约测试装置900还可以包括:合约函数封装单元,可以用于通过所述自动化测试框架将所述账户对象和所述合约对象封装至合约函数中。
其中,测试代码执行单元970可以包括:合约方法执行单元,可以用于利用所述合约函数中的所述合约对象调用所述待测试智能合约的合约代码中的方法。
在示例性实施例中,基于区块链的智能合约测试装置900还可以包括:交互对象实例构建单元,可以用于通过所述自动化测试框架的软件开发工具包接口对象,构建交互对象实例;区块链交互单元,可以用于所述自动化测试框架在执行所述测试代码过程中,利用所述交互对象实例与所述区块链进行交互。
在示例性实施例中,基于区块链的智能合约测试装置900还可以包括:交易对象实例化单元,可以用于若所述测试代码中包括交易对象,则根据所述区块链的交易对象格式,实例化交易对象;交易推送单元,可以用于通过所述交互对象实例将所述交易对象对应的交易推送至所述区块链。
在示例性实施例中,基于区块链的智能合约测试装置900还可以包括:区块链状态快照单元,可以用于所述自动化测试框架在执行所述测试代码过程之前,若所述区块链环境为真实区块链环境,则通过所述自动化测试框架调用所述真实区块链环境中的区块链状态快照接口,以保存所述区块链的测试前状态。
基于区块链的智能合约测试装置900还可以包括:区块链快照恢复单元,可以用于所述自动化测试框架在执行所述测试代码之后,通过所述自动化测试框架调用所述真实区块链环境中的区块链状态恢复接口,将所述区块链的状态恢复至所述测试前状态。
在示例性实施例中,基于区块链的智能合约测试装置900还可以包括:虚拟区块链创建单元,可以用于在利用所述自动化测试框架将所述待测试智能合约的合约代码部署至区块链环境中之前,若所述区块链环境为虚拟区块链环境,则构建所述虚拟区块链环境中的虚拟区块链,所述虚拟区块链包括一个虚拟节点;状态数据保存单元,可以用于将所述虚拟区块链的状态和数据保存在内存中;交易执行单元,可以用于当所述虚拟区块链接收到交易时,生成区块,并执行所述区块中的所述交易;执行引擎提供单元,可以用于提供用于执行所述待测试智能合约的执行引擎;环境接口提供单元,可以用于提供所述待测试智能合约中区块链相关的环境接口。
在示例性实施例中,基于区块链的智能合约测试装置900还可以包括:测试框架集成单元,用于将所述自动化测试框架集成在智能合约集成开发环境中。
在示例性实施例中,基于区块链的智能合约测试装置900还可以包括:第一测试文件生成单元,可以用于响应在所述智能合约集成开发环境的文件浏览器中对所述待测试智能合约的选择和触发操作,显示测试文件创建控件;响应对所述测试文件创建控件的输入操作,确定所述测试文件的测试文件名、所述待测试智能合约的合约标识和合约文件路径,其中所述测试文件的文件类型与所述待测试智能合约的文件类型相同;将所述测试文件创建在所述待测试智能合约所在的当前目录或者所述智能合约集成开发环境的文件管理器中的指定测试目录,以在所述测试文件中编辑所述测试代码。
在示例性实施例中,基于区块链的智能合约测试装置900还可以包括:第二测试文件生成单元,可以用于响应对所述智能合约集成开发环境的文件浏览器的输入操作,确定所述测试文件的测试文件名,以触发提示控件;响应对所述提示控件的选择操作,确定所述待测试智能合约的合约文件路径;响应针对所述测试文件的输入操作,确定所述待测试智能合约的合约标识;将所述测试文件创建在所述待测试智能合约所在的当前目录或者所述智能合约集成开发环境的文件管理器中的指定测试目录。
在示例性实施例中,基于区块链的智能合约测试装置900还可以包括:合约配置代码自动生成单元,可以用于通过所述自动化测试框架自动生成所述测试代码中的合约配置信息,所述合约配置信息用于关联所述待测试智能合约的合约标识和合约文件路径。
在示例性实施例中,测试代码执行单元970可以包括:目标节点信息监听单元,可以用于通过所述智能合约集成开发环境在运行所述测试代码的过程中添加***,以用于监听所述测试代码执行过程中的目标节点信息;合约测试结果统计单元,可以用于所述自动化测试框架根据所述目标节点信息统计获得所述合约测试结果。
其中,基于区块链的智能合约测试装置900还可以包括:合约测试结果显示单元,可以用于通过所述智能合约集成开发环境显示所述合约测试结果。
本公开实施方式提供的基于区块链的智能合约测试装置,基于区块链环境,构建一种用于测试智能合约的自动化测试框架,使得该自动化测试框架具备待测试智能合约的测试代码加载功能、测试代码中的合约配置信息解析功能、创建用于测试该待测试智能合约的虚拟账户的功能、将待测试智能合约的合约代码部署至区块链环境中的功能、解析待测试智能合约的合约代码为账户对象和合约对象的功能以及自动执行测试代码的功能等,从而可以让用户简单地构建待测试智能合约相关的测试代码,无需关心待测试智能合约与区块链的复杂交互细节,提升了待测试智能合约的测试效率,进而可以提升待测试智能合约的开发效率,保障待测试智能合约上线之前的质量和安全等。
图10示出了适于用来实现本公开实施例的电子设备的结构示意图。需要说明的是,图10示出的电子设备1000仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图10所示,电子设备1000包括中央处理单元(CPU)1001,其可以根据存储在只读存储器(ROM)1002中的程序或者从储存部分1008加载到随机访问存储器(RAM)1003中的程序而执行各种适当的动作和处理。在RAM 1003中,还存储有***操作所需的各种程序和数据。CPU 1001、ROM 1002以及RAM 1003通过总线1004彼此相连。输入/输出(I/O)接口1005也连接至总线1004。
以下部件连接至I/O接口1005:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1007;包括硬盘等的储存部分1008;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至I/O接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入储存部分1008。
特别地,根据本公开的实施例,下文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质1011被安装。在该计算机程序被中央处理单元(CPU)1001执行时,执行本申请的***中限定的各种功能。
需要说明的是,本公开所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有至少一个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本公开各种实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含至少一个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的模块和/或单元和/或子单元可以通过软件的方式实现,也可以通过硬件的方式来实现,所描述的模块和/或单元和/或子单元也可以设置在处理器中。其中,这些模块和/或单元和/或子单元的名称在某种情况下并不构成对该模块和/或单元和/或子单元本身的限定。
作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该电子设备执行时,使得该电子设备实现如下述实施例中所述的方法。例如,所述的电子设备可以实现如图5或图6或图7或图8所示的各个步骤。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元或者子单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元或者子单元的特征和功能可以在一个模块或者单元或者子单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元或者子单元来具体化。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本公开实施方式的方法。
Claims (14)
1.一种基于区块链的智能合约测试方法,其特征在于,包括:
创建用于测试智能合约的自动化测试框架;
通过所述自动化测试框架加载待测试智能合约的测试代码;
利用所述自动化测试框架解析所述测试代码中的合约配置信息,获得所述待测试智能合约的合约代码;
通过所述自动化测试框架创建用于测试所述待测试智能合约的虚拟账户;
利用所述自动化测试框架将所述待测试智能合约的合约代码部署至区块链环境中;
通过所述自动化测试框架解析所述待测试智能合约的合约代码为账户对象和合约对象,所述账户对象包括所述待测试智能合约中的账户地址;
所述自动化测试框架在执行所述测试代码过程中,利用所述虚拟账户和所述账户对象,并通过所述合约对象调用所述待测试智能合约的合约代码中的方法,获得所述待测试智能合约的合约测试结果。
2.如权利要求1所述的方法,其特征在于,还包括:
通过所述自动化测试框架将所述账户对象和所述合约对象封装至合约函数中;
其中,利用所述合约对象调用所述待测试智能合约的合约代码中的方法,包括:
利用所述合约函数中的所述合约对象调用所述待测试智能合约的合约代码中的方法。
3.如权利要求1所述的方法,其特征在于,还包括:
通过所述自动化测试框架的软件开发工具包接口对象,构建交互对象实例;
所述自动化测试框架在执行所述测试代码过程中,利用所述交互对象实例与所述区块链进行交互。
4.如权利要求3所述的方法,其特征在于,还包括:
若所述测试代码中包括交易对象,则根据所述区块链的交易对象格式,实例化交易对象;
通过所述交互对象实例将所述交易对象对应的交易推送至所述区块链。
5.如权利要求1所述的方法,其特征在于,所述自动化测试框架在执行所述测试代码过程之前,所述方法还包括:
若所述区块链环境为真实区块链环境,则通过所述自动化测试框架调用所述真实区块链环境中的区块链状态快照接口,以保存所述区块链的测试前状态;
所述自动化测试框架在执行所述测试代码之后,所述方法还包括:
通过所述自动化测试框架调用所述真实区块链环境中的区块链状态恢复接口,将所述区块链的状态恢复至所述测试前状态。
6.如权利要求1所述的方法,其特征在于,在利用所述自动化测试框架将所述待测试智能合约的合约代码部署至区块链环境中之前,所述方法还包括:
若所述区块链环境为虚拟区块链环境,则构建所述虚拟区块链环境中的虚拟区块链,所述虚拟区块链包括一个虚拟节点;
将所述虚拟区块链的状态和数据保存在内存中;
当所述虚拟区块链接收到交易时,生成区块,并执行所述区块中的所述交易;
提供用于执行所述待测试智能合约的执行引擎;
提供所述待测试智能合约中区块链相关的环境接口。
7.如权利要求1所述的方法,其特征在于,还包括:
将所述自动化测试框架集成在智能合约集成开发环境中。
8.如权利要求7所述的方法,其特征在于,还包括:
响应在所述智能合约集成开发环境的文件浏览器中对所述待测试智能合约的选择和触发操作,显示测试文件创建控件;
响应对所述测试文件创建控件的输入操作,确定所述测试文件的测试文件名、所述待测试智能合约的合约标识和合约文件路径,其中所述测试文件的文件类型与所述待测试智能合约的文件类型相同;
将所述测试文件创建在所述待测试智能合约所在的当前目录或者所述智能合约集成开发环境的文件管理器中的指定测试目录,以在所述测试文件中编辑所述测试代码。
9.如权利要求7所述的方法,其特征在于,还包括:
响应对所述智能合约集成开发环境的文件浏览器的输入操作,确定所述测试文件的测试文件名,以触发提示控件;
响应对所述提示控件的选择操作,确定所述待测试智能合约的合约文件路径;
响应针对所述测试文件的输入操作,确定所述待测试智能合约的合约标识;
将所述测试文件创建在所述待测试智能合约所在的当前目录或者所述智能合约集成开发环境的文件管理器中的指定测试目录。
10.如权利要求8或9所述的方法,其特征在于,还包括:
通过所述自动化测试框架自动生成所述测试代码中的合约配置信息,所述合约配置信息用于关联所述待测试智能合约的合约标识和合约文件路径。
11.如权利要求7所述的方法,其特征在于,获得所述待测试智能合约的合约测试结果,包括:
通过所述智能合约集成开发环境在运行所述测试代码的过程中添加***,以用于监听所述测试代码执行过程中的目标节点信息;
所述自动化测试框架根据所述目标节点信息统计获得所述合约测试结果;
其中,所述方法还包括:
通过所述智能合约集成开发环境显示所述合约测试结果。
12.一种基于区块链的智能合约测试装置,其特征在于,包括:
智能合约测试框架创建单元,用于创建用于测试智能合约的自动化测试框架;
测试代码加载单元,用于通过所述自动化测试框架加载待测试智能合约的测试代码;
合约配置解析单元,用于利用所述自动化测试框架解析所述测试代码中的合约配置信息,获得所述待测试智能合约的合约代码;
虚拟账户创建单元,用于通过所述自动化测试框架创建用于测试所述待测试智能合约的虚拟账户;
智能合约部署单元,用于利用所述自动化测试框架将所述待测试智能合约的合约代码部署至区块链环境中;
全局对象解析单元,用于通过所述自动化测试框架解析所述待测试智能合约的合约代码为账户对象和合约对象,所述账户对象包括所述待测试智能合约中的账户地址;
测试代码执行单元,用于所述自动化测试框架在执行所述测试代码过程中,利用所述虚拟账户和所述账户对象,并通过所述合约对象调用所述待测试智能合约的合约代码中的方法,获得所述待测试智能合约的合约测试结果。
13.一种电子设备,其特征在于,包括:
至少一个处理器;
存储装置,用于存储至少一个程序;
当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器实现如权利要求1-11中任一项所述的方法。
14.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-11中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110856321.1A CN115687064A (zh) | 2021-07-28 | 2021-07-28 | 基于区块链的智能合约测试方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110856321.1A CN115687064A (zh) | 2021-07-28 | 2021-07-28 | 基于区块链的智能合约测试方法及相关设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115687064A true CN115687064A (zh) | 2023-02-03 |
Family
ID=85058692
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110856321.1A Pending CN115687064A (zh) | 2021-07-28 | 2021-07-28 | 基于区块链的智能合约测试方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115687064A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117061403A (zh) * | 2023-10-10 | 2023-11-14 | 中铱数字科技有限公司 | 一种基于区块链BaaS的自动化测试方法及*** |
-
2021
- 2021-07-28 CN CN202110856321.1A patent/CN115687064A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117061403A (zh) * | 2023-10-10 | 2023-11-14 | 中铱数字科技有限公司 | 一种基于区块链BaaS的自动化测试方法及*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2019072110A1 (zh) | 应用程序的生成方法、装置、***、设备和介质 | |
Vivar et al. | A security framework for Ethereum smart contracts | |
CN111949531B (zh) | 区块链网络的测试方法、装置、介质及电子设备 | |
CN116155771A (zh) | 网络异常测试方法、装置、设备、存储介质和程序 | |
Mahmud et al. | Android compatibility issue detection using api differences | |
US11816479B2 (en) | System and method for implementing a code audit tool | |
CN113590454A (zh) | 测试方法、装置、计算机设备和存储介质 | |
Mahmood et al. | A framework for automated API fuzzing at enterprise scale | |
CN115687064A (zh) | 基于区块链的智能合约测试方法及相关设备 | |
CN114116509A (zh) | 程序分析方法、装置、电子设备和存储介质 | |
CN110598419A (zh) | 一种区块链客户端漏洞挖掘方法、装置、设备及存储介质 | |
US10310962B2 (en) | Infrastructure rule generation | |
CN113778897A (zh) | 接口的自动测试方法、装置、设备及存储介质 | |
CN111917729B (zh) | 动态注入测试方法及装置、相关设备 | |
US11368554B2 (en) | Systems and methods for regulating service behavior | |
US20230359746A1 (en) | Systems and methods for shift left testing | |
CN113590465A (zh) | 一种基于SDK自动生成mock服务的方法 | |
US10606569B2 (en) | Declarative configuration elements | |
CN114840410A (zh) | 测试分析方法、装置、计算机设备及存储介质 | |
CN116795701A (zh) | 一种接口程序的通用测试实例的生成方法和装置 | |
Virani et al. | A Systematic Literature Review on Smart Contracts Security | |
Mazuera-Rozo et al. | Detecting connectivity issues in android apps | |
CN116521509A (zh) | 智能合约测试方法、装置、设备、存储介质及产品 | |
Endo | Model based testing of service oriented applications | |
CN112181816A (zh) | 一种基于场景的接口测试方法、装置、计算机设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40080490 Country of ref document: HK |
|
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |