CN111444092A - 智能合约的测试方法、装置、电子设备及存储介质 - Google Patents
智能合约的测试方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN111444092A CN111444092A CN202010214679.XA CN202010214679A CN111444092A CN 111444092 A CN111444092 A CN 111444092A CN 202010214679 A CN202010214679 A CN 202010214679A CN 111444092 A CN111444092 A CN 111444092A
- Authority
- CN
- China
- Prior art keywords
- intelligent contract
- account
- test case
- test
- testing
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请公开了一种智能合约的测试方法、装置、电子设备及存储介质,属于区块链技术领域。本申请实施例通过根据待测试的智能合约,生成对应的调用接口,从而可以通过生成的该调用接口查询得到智能合约中的账户,进而生成测试用例进行测试,该过程中能够根据待测试的智能合约,自动生成对应的调用接口,实现了对智能合约的调用和测试,无需开发人员参与,无需开发人员预先编写RPC接口,也无需人工获取智能合约中的账户,降低了人工成本,全过程自动进行,自动化程度高,该方式能够被重复利用,因而,对智能合约的测试的效率高。
Description
技术领域
本申请涉及区块链技术领域,特别涉及一种智能合约的测试方法、装置、电子设备及存储介质。
背景技术
随着区块链技术的发展,区块链应用越来越广泛。在区块链系统中,通常可以编写智能合约,通过运行智能合约来实现相应的功能。因而,需要对智能合约进行测试,以保证智能合约的正常运行和业务准确性。
由于智能合约具有不可改变性,目前,智能合约的测试方法通常是由开发人员根据智能合约,来编写相应的远程调用RPC接口,通过该RPC(Remote Procedure Call,远程过程调用)接口来调用智能合约,进行测试步骤。还有一些测试方法是需要开发人员部署remix在线编译器的集成开发环境(Integrated Development Environment,IDE),通过该remix实现接口函数测试,人工获取智能合约中的账户,进而在IDE中调试智能合约的接口。
上述方法中均需要开发人员编写RPC接口或人工获取智能合约中的账户依赖在线编译器实现测试,人工成本高,自动化程度低,无法重复利用,测试用例编写耗时,因而,测试效率差。
发明内容
本申请实施例提供了一种智能合约的测试方法、装置、电子设备及存储介质,能够提升定位过程的定位精度。该技术方案如下:
一方面,提供了一种智能合约的测试方法,该方法包括:
根据待测试的智能合约,生成所述智能合约对应的调用接口;
通过所述调用接口,查询所述智能合约中的至少一个账户;
根据所述至少一个账户,生成所述智能合约的测试用例;
根据所述测试用例,对所述智能合约进行测试。
在一种可能实现方式中,所述目标编程语言为全球广域网3.java脚本(WorldWide Web 3.javascript,Web3.js)。
一方面,提供了一种智能合约的测试装置,该装置包括:
生成模块,用于根据待测试的智能合约,生成所述智能合约对应的调用接口;
查询模块,用于通过所述调用接口,查询所述智能合约中的至少一个账户;
所述生成模块,还用于根据所述至少一个账户,生成所述智能合约的测试用例;
测试模块,用于根据所述测试用例,对所述智能合约进行测试。
在一种可能实现方式中,所述查询模块用于:
通过所述调用接口,调用所述智能合约中的账户信息;
从所述账户信息中查询,得到所述智能合约的至少一个账户。
在一种可能实现方式中,所述至少一个账户的数量为多个,多个账户包括用户账户和平台账户;
所述查询模块用于查询所述账户信息中账户的账户类型,得到所述智能合约中的用户账户和平台账户。
在一种可能实现方式中,所述测试用例包括正常转让的测试用例和异常转让的测试用例;所述正常转让的测试用例用于指示将所述平台账户的资产转移至所述用户账户;所述异常转让的测试用例用于指示将所述用户账户的资产转移至所述平台账户;
所述生成模块用于:
根据所述用户账户和所述平台账户,生成所述智能合约的异常转让的测试用例,所述异常转让的测试用例包括的资产转移的期望结果为转移失败;或,
根据所述用户账户和所述平台账户,生成所述智能合约的正常转让的测试用例,所述正常转让的测试用例包括的资产转移的期望结果为转移成功。
在一种可能实现方式中,所述测试模块用于:
根据所述正常转让的测试用例和异常转让的测试用例,通过所述智能合约的调用接口,触发所述智能合约执行所述异常转让的测试用例所指示的资产转移步骤,得到对所述正常转让的测试用例和异常转让的测试用例的测试结果;
所述装置还包括:
确定模块,用于响应于所述对任一测试用例的测试结果与所述测试用例包括的期望结果不相同,确定所述测试结果异常。
在一种可能实现方式中,所述生成模块用于根据所述待测试的智能合约的调用参数,通过目标编程语言,生成所述智能合约对应的调用接口,所述目标编程语言的调用接口能够与区块链系统中的节点设备上的目标RPC接口通信。
在一种可能实现方式中,所述生成模块还用于根据对所述智能合约进行测试的测试结果,生成测试报告;
所述装置还包括:
发送模块,用于监听测试过程中的事件,根据监听到的事件,发送通知消息。
一方面,提供了一种电子设备,该电子设备包括一个或多个处理器和一个或多个存储器,该一个或多个存储器中存储有至少一条程序代码,该至少一条程序代码由该一个或多个处理器加载并执行以实现如上述任一种可能实现方式的智能合约的测试方法所执行的操作。
一方面,提供了一种存储介质,该存储介质中存储有至少一条程序代码,该至少一条程序代码由处理器加载并执行以实现如上述任一种可能实现方式的智能合约的测试方法所执行的操作。
本申请实施例提供的技术方案带来的有益效果至少包括:
本申请实施例通过根据待测试的智能合约,生成对应的调用接口,从而可以通过生成的该调用接口查询得到智能合约中的账户,进而生成测试用例进行测试,该过程中能够根据待测试的智能合约,自动生成对应的调用接口,实现了对智能合约的调用和测试,无需开发人员参与,无需开发人员预先编写RPC接口,也无需人工获取智能合约中的账户,降低了人工成本,全过程自动进行,自动化程度高,该方式能够被重复利用,因而,对智能合约的测试的效率高。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种区块链系统的结构示意图;
图2是本申请实施例提供的一种区块链的结构示意图;
图3是本申请实施例提供的一种新区块生成过程的流程图;
图4是本申请实施例提供的分布式系统400应用于区块链系统的一个可选的结构示意图;
图5是本申请实施例提供的区块结构(Block Structure)一个可选的示意图;
图6是本申请实施例提供的一种智能合约的生命周期的示意图;
图7是本申请实施例提供的一种智能合约的测试方法的流程图;
图8是本申请实施例提供的一种创世区块的配置示意界面图;
图9是本申请实施例提供的一种账户信息的界面图;
图10是本申请实施例提供的一种账户信息的界面图;
图11是本申请实施例提供的一种测试用例的界面图;
图12是本申请实施例提供的一种冷热互转用例模板文件的界面图;
图13是本申请实施例提供的一种测试报告的界面图;
图14是本申请实施例提供的一种实例化合约的界面图;
图15是本申请实施例提供的一种订阅合约事件的界面图;
图16是本申请实施例提供的一种监听到事件邮件输出的界面图;
图17是本申请实施例提供的一种监听到事件邮件输出的界面图;
图18是本申请实施例提供的一种智能合约的测试方法的流程图;
图19是本申请实施例提供的一种智能合约的测试装置的结构示意图;
图20是本申请实施例提供的一种终端2000的结构示意图;
图21是本申请实施例提供的一种服务器2100的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
本申请中术语“第一”“第二”等字样用于对作用和功能基本相同的相同项或相似项进行区分,应理解,“第一”、“第二”、“第n”之间不具有逻辑或时序上的依赖关系,也不对数量和执行顺序进行限定。
本申请中术语“至少一个”是指一个或多个,“多个”的含义是指两个或两个以上,例如,多个第一位置是指两个或两个以上的第一位置。
以下,对本申请涉及到的术语进行解释。
智能合约:是一种旨在以信息化方式传播、验证或执行合同的计算机协议,能够允许在没有第三方的情况下进行可信交易,且这些交易可追踪不可篡改。
Solidity:以太坊solidity是一种面向智能合约的高级语言,编写智能合约后能够生成在EVM上执行的字节码。其中,EVM的英文全称为Ethereum Virtual Machine,中文全称为以太坊虚拟机,EVM用于执行智能合约的环境。
Geth:是用go语言编写,且实现以太坊ethereum协议的客户端软件。
Web3.js:是一个通过RPC调用和本地以太坊节点进行通信的javascript库,或者说。web3.js可以与任何暴露了RPC接口的以太坊节点连接通信。
REQ:软件研发提测流程管理平台,管理软件版本开发、提测、缺陷提交、回归测试、发布整个生命周期。
ERC20:是一个合约接口标准协议,设计初衷是为以太坊中的Token合约提供一套常见的功能和接口,任何基于ERC20标准的Token都能兼容以太坊钱包,同时支持共享和交换。其中,Token为资产的单位。
平台账户,也可以称为热钱包账户:区块链热钱包表示账户地址是从区块链平台生成,私钥由平台托管。
用户账户,也可以称为冷钱包账户:区块链冷钱包表示账户地址是私人从平台外生成,私钥保存在用户手中。
区块链是一种多方共同维护,使用密码学保证传输和访问安全,能够实现数据一致存储、难以篡改、防止抵赖的记账技术,也就是分布式账本技术。区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层。
区块链底层平台可以包括用户管理、基础服务、智能合约以及运营监控等处理模块。其中,用户管理模块负责所有区块链参与者的身份信息管理,包括维护公私钥生成(账户管理)、密钥管理以及用户真实身份和区块链地址对应关系维护(权限管理)等,并且在授权的情况下,监管和审计某些真实身份的交易情况,提供风险控制的规则配置(风控审计);基础服务模块部署在所有区块链节点设备上,用来验证业务请求的有效性,并对有效请求完成共识后记录到存储上,对于一个新的业务请求,基础服务先对接口适配解析和鉴权处理(接口适配),然后通过共识算法将业务信息加密(共识管理),在加密之后完整一致的传输至共享账本上(网络通信),并进行记录存储;智能合约模块负责合约的注册发行以及合约触发和合约执行,开发人员可以通过某种编程语言定义合约逻辑,发布到区块链上(合约注册),根据合约条款的逻辑,调用密钥或者其它的事件触发执行,完成合约逻辑,同时还提供对合约升级注销的功能;运营监控模块主要负责产品发布过程中的部署、配置的修改、合约设置、云适配以及产品运行中的实时状态的可视化输出,例如:告警、监控网络情况、监控节点设备健康状态等。
平台产品服务层提供典型应用的基本能力和实现框架,开发人员可以基于这些基本能力,叠加业务的特性,完成业务逻辑的区块链实现。应用服务层提供基于区块链方案的应用服务给业务参与方进行使用。
参见图1所示的区块链系统,区块链系统100是指用于进行节点与节点之间数据共享的系统,该区块链系统中可以包括多个节点101,多个节点101可以是指区块链系统中各个客户端。每个节点101在进行正常工作可以接收到输入信息,并基于接收到的输入信息维护该区块链系统内的共享数据。为了保证区块链系统内的信息互通,区块链系统中的每个节点之间可以存在信息连接,节点之间可以通过上述信息连接进行信息传输。例如,当区块链系统中的任意节点接收到输入信息时,区块链系统中的其他节点便根据共识算法获取该输入信息,将该输入信息作为共享数据中的数据进行存储,使得区块链系统中全部节点上存储的数据均一致。
对于区块链系统中的每个节点,均具有与其对应的节点标识,而且区块链系统中的每个节点均可以存储有区块链系统中其他节点的节点标识,以便后续根据其他节点的节点标识,将生成的区块广播至区块链系统中的其他节点。每个节点中可维护一个如下表所示的节点标识列表,将节点名称和节点标识对应存储至该节点标识列表中。其中,节点标识可为IP(Internet Protocol,网络之间互联的协议)地址以及其他任一种能够用于标识该节点的信息,表1中仅以IP地址为例进行说明。
表1
节点名称 | 节点标识 |
节点1 | 117.114.151.174 |
节点2 | 117.116.189.145 |
… | … |
节点N | 119.123.789.258 |
区块链系统中的每个节点均存储一条相同的区块链。区块链由多个区块组成,参见图2,区块链由多个区块组成,创始块中包括区块头和区块主体,区块头中存储有输入信息特征值、版本号、时间戳和难度值,区块主体中存储有输入信息;创始块的下一区块以创始块为父区块,下一区块中同样包括区块头和区块主体,区块头中存储有当前区块的输入信息特征值、父区块的区块头特征值、版本号、时间戳和难度值,并以此类推,使得区块链中每个区块中存储的区块数据均与父区块中存储的区块数据存在关联,保证了区块中输入信息的安全性。
在生成区块链中的各个区块时,参见图3,区块链所在的节点在接收到输入信息时,对输入信息进行校验,完成校验后,将输入信息存储至内存池中,并更新其用于记录输入信息的哈希树;之后,将更新时间戳更新为接收到输入信息的时间,并尝试不同的随机数,多次进行特征值计算,使得计算得到的特征值可以满足下述公式:
SHA256(SHA256(version+prev_hash+merkle_root+ntime+nbits+x))<TARGET
其中,SHA256为计算特征值所用的特征值算法;version(版本号)为区块链中相关区块协议的版本信息;prev_hash为当前区块的父区块的区块头特征值;merkle_root为输入信息的特征值;ntime为更新时间戳的更新时间;nbits为当前难度,在一段时间内为定值,并在超出固定时间段后再次进行确定;x为随机数;TARGET为特征值阈值,该特征值阈值可以根据nbits确定得到。
这样,当计算得到满足上述公式的随机数时,便可将信息对应存储,生成区块头和区块主体,得到当前区块。随后,区块链所在节点根据区块链系统中其他节点的节点标识,将新生成的区块分别发送给其所在的区块链系统中的其他节点,由其他节点对新生成的区块进行校验,并在完成校验后将新生成的区块添加至其存储的区块链中。
本申请实施例涉及的系统可以是由客户端、多个节点(接入网络中的任意形式的计算设备,如服务器、用户终端)通过网络通信的形式连接形成的分布式系统。
以分布式系统为区块链系统为例,参见图4,图4是本申请实施例提供的分布式系统400应用于区块链系统的一个可选的结构示意图,由多个节点(接入网络中的任意形式的计算设备,如服务器、用户终端)和客户端形成,节点之间形成组成的点对点(P2P,Peer ToPeer)网络,P2P协议是一个运行在传输控制协议(TCP,Transmission Control Protocol)协议之上的应用层协议。在分布式系统中,任何机器如服务器、终端都可以加入而成为节点,节点包括硬件层、中间层、操作系统层和应用层。
参见图4示出的区块链系统中各节点的功能,涉及的功能包括:
1)路由,节点具有的基本功能,用于支持节点之间的通信。
节点除具有路由功能外,还可以具有以下功能:
2)应用,用于部署在区块链中,根据实际业务需求而实现特定业务,记录实现功能相关的数据形成记录数据,在记录数据中携带数字签名以表示任务数据的来源,将记录数据发送到区块链系统中的其他节点,供其他节点在验证记录数据来源以及完整性成功时,将记录数据添加到临时区块中。
例如,应用实现的业务包括:
2.1)钱包,用于提供进行电子货币的交易的功能,包括发起交易(即,将当前交易的交易记录发送给区块链系统中的其他节点,其他节点验证成功后,作为承认交易有效的响应,将交易的记录数据存入区块链的临时区块中;当然,钱包还支持查询电子货币地址中剩余的电子货币;
2.2)共享账本,用于提供账目数据的存储、查询和修改等操作的功能,将对账目数据的操作的记录数据发送到区块链系统中的其他节点,其他节点验证有效后,作为承认账目数据有效的响应,将记录数据存入临时区块中,还可以向发起操作的节点发送确认。
2.3)智能合约,计算机化的协议,可以执行某个合约的条款,通过部署在共享账本上的用于在满足一定条件时而执行的代码实现,根据实际的业务需求代码用于完成自动化的交易,例如查询买家所购买商品的物流状态,在买家签收货物后将买家的电子货币转移到商户的地址;当然,智能合约不仅限于执行用于交易的合约,还可以执行对接收的信息进行处理的合约。
3)区块链,包括一系列按照产生的先后时间顺序相互接续的区块(Block),新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链系统中节点提交的记录数据。
参见图5,图5是本申请实施例提供的区块结构(Block Structure)一个可选的示意图,每个区块中包括本区块存储交易记录的哈希值(本区块的哈希值)、以及前一区块的哈希值,各区块通过哈希值连接形成区块链。另外,区块中还可以包括有区块生成时的时间戳等信息。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了相关的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
在本申请实施例中,在智能合约应用到区块链之前,通常需要对智能合约进行测试,以验证正确性和业务准确性,或是否有异常情况。下面通过图6,先介绍智能合约的生命周期,如图6所示,该智能合约的生命周期包括编写合约、编译合约、部署合约、调用合约、监听合约和销毁合约。开发人员编写合约后,可以采用本申请所提供的测试方法进行测试,该测试过程即可以包括上述生命周期中编译合约、部署合约、调用合约、监听合约的的过程,待合约测试完毕后,还可以销毁合约。
图7是本申请实施例提供的一种智能合约的测试方法的流程图。参见图7,该实施例可以包括下述步骤:
701、电子设备部署测试环境。
在对智能合约进行测试之前,需要先部署测试环境,从而在部署好的测试环境中,构造测试用例,对智能合约进行测试。其中,该测试环境可以为以太坊私有链系统,也可以为以太坊的测试链系统,本申请实施例对此不作限定。
以该测试环境为以太坊私有链系统为例,智能合约的执行依赖底层区块链平台ethereum的搭建,搭建后需要启动节点的挖矿工作,从而得到很好的测试环境。具体的,该部署过程可以包括以下步骤一至步骤:
步骤一、电子设备下载并安装Geth。其中,Geth是GoEthereum开源项目的简称,它是使用Go语言编写且实现了Ethereum协议的客户端软件,也是目前用户最多、使用最广泛的客户端。例如,该geth可以从git仓库中获取得到,该下载过程可以为:git clonehttps://github.com/ethereum/go-ethereum。其中,git clone为克隆git仓库的意思,https://github.com/ethereum/go-ethereum为Geth的路径。然后安装Geth的过程可以为:cd go-ethereum,make geth。其中,cd为进入文件夹的指令,go-ethereum为文件夹名称,make为编译的意思。当然,该git仓库中可以包括多个版本的geth,电子设备可以通过gethversion(描述)来查看版本号。
步骤二、电子设备启动Geth。
在该启动步骤中,电子设备可以先创建几个账户,该账户可以用于挖矿。账户的创建过程可以通过geth--datadir path/to/custom/data/folder account new实现,其中,datadir为数据目录的意思,数据目录为path/to/custom/data/folder,account为账户的意思,new为创建的意思。电子设备可以再创建一个创世区块(genesis block),并配置该创世区块。
例如,可以通过下述代码来创建创世区块,并通过图8所示的代码来对创世区块进行配置:
Geth--datadir path/to/custom/data/folder init path/to/store/genesisfile/genesis.json。
可以通过下述代码来启动该创世区块:
geth--datadirpath/to/custom/data/folder--ipcpath path/to/custom/data/folder/geth.ipc--networkid 15。
其中,datadir为数据目录的意思,path/to/custom/data/folder为节点运行时数据存储的位置,也即是数据目录。init为初始化的意思。path/to/store/genesisfile/为创世块的配置文件genesis.json存储的位置。ipcpath为进程间通信路径的意思。geth.ipc为该创世区块运行时的IPC(Inter-Process Communication,进程间通信)文件。Networkid为网络标识的意思。
步骤三、电子设备可以进行Attach(连接)交互并启动挖矿。
电子设备在创建了创世区块后,还可以进行Attach交互并启动挖矿,从而该测试环境能够模拟真实的区块链系统。例如,该Attach交互过程可以通过下述geth attachipc:/Users/zhangpeng/ethData/geth.ipc实现,启动挖矿可以通过miner.start()函数实现。
在该步骤701中,电子设备部署了测试环境,后续的测试步骤则可以在该测试环境中进行,以在测试环境下对智能合约进行测试。
702、电子设备获取待测试的智能合约。
其中,智能合约通常是指采用solidity、vyper等高级语言编写的不可改变的计算机程序,运行在区块链虚拟机(如,以太坊的EVM、Fabric的docker等),以确定性的方式实现去中心化应用的技术。
在本申请实施例中,该电子设备能够为待测试的智能合约进行测试。该待测试的智能合约可以由相关技术人员在该电子设备上编写完成,也可以由其他电子设备将编写完成的智能合约发送至该电子设备。本申请实施例对该待测试的智能合约的来源不作限定。
在一种可能实现方式中,电子设备可以为测试平台所在设备,开发人员在编写得到智能合约后,均可以将智能合约提交到该测试平台进行测试,再例如,该测试平台可以为REQ平台。
在一个具体的可能实施例中,该智能合约可以为基于ERC20的智能合约,该ERC20的设计初衷是为以太坊中的Token合约提供一套常见的功能和接口,任何基于ERC20标准的Token都能兼容以太坊钱包,同时支持发行、转让。当然,该智能合约也可以为基于其他标准的智能合约,对此并不做限定。
703、电子设备根据待测试的智能合约,生成该智能合约对应的调用接口。
通常智能合约编写完成后,该智能合约支持内部调用,而无法外部调用。如果想要对智能合约进行测试,需要通过外部的调用接口,对该智能合约进行调用执行。在本申请实施例中,电子设备可以根据获取到的智能合约,自动生成对应的调用接口,而非相关技术中获取开发人员预先编写好的调用接口。这样对于任一待测试的智能合约,均能自动生成调用接口,实现调用和测试的自动化处理。
在一种可能实现方式中,智能合约通常是指采用solidity、vyper等高级语言编写的不可改变的计算机程序,它对应的调用接口可以被理解为一段代码,该代码可以采用目标编程语言,该目标编程语言的调用接口能够与区块链系统中的节点设备上的目标RPC接口通信。这样通过该目标编程语言的调用接口,即可实现对智能合约的调用以便于后续进行测试。具体的,该调用接口的生成过程可以为:电子设备可以根据该待测试的智能合约的调用参数,通过目标编程语言,生成该智能合约对应的调用接口。这样通过该目标编程语言,生成调用接口后,可以直接调用智能合约,实施测试步骤,进而能够实现自动化测试。
该目标编程语言可以为多种编程语言中的一种,例如,该目标编程语言可以为全球广域网3.java脚本(World Wide Web 3.javascript,Web3.js)。该Web3.js为以太坊提供的一种编程语言,能够直接触及合约接口,进而能够执行后续调用智能合约的步骤,实现测试。当然,该目标编程语言还可以为其他编程语言,通过语言转换代码以及其他编程语言,也能够实现上述生成调用接口进而调用智能合约的过程。本申请实施例对此不作限定。
704、电子设备通过该调用接口,调用该智能合约中的账户信息。
电子设备生成调用接口后,即可通过该调用接口,对该智能合约进行调用,得到测试需要的账户信息,以执行后续步骤,自动生成测试用例进行测试,进一步实现测试的自动化。
该账户信息可以存储于钱包存储层(maogodb),该账户信息中可以包括至少一个账户的账户地址和每个账户的账户类型,当然,还可以包括其他信息,在此不一一列举。
705、电子设备从该账户信息中查询,得到该智能合约的至少一个账户。
电子设备调用到账户信息后,可以从账户信息中查询测试所需的至少一个账户。该至少一个账户的数量可以为一个,也可以为多个。当该至少一个账户的数量为多个时,多个账户可以包括用户账户和平台账户,也即是冷钱包账户和热钱包账户。同理的,上述账户信息可以包括用户账户和平台账户的账户类型和账户地址。电子设备本次即可查询得到该用户账户和平台账户,以便于基于用户账户和平台账户,生成相应的测试用例进行测试。
在一种可能实现方式中,该用户账户和平台账户的账户类型不同,该查询过程可以通过账户类型对账户进行区分实现。具体的,该查询过程可以为:电子设备可以查询该账户信息中账户的账户类型,得到该智能合约中的用户账户和平台账户。
在一种可能实现方式中,该用户账户的账户类型为第一账户类型,平台账户的账户类型可以为第二账户类型。电子设备可以查询该账户信息中的第一账户类型和第二账户类型,将第一账户类型的账户确定为用户账户,将第二账户类型的账户确定为平台账户。
例如,电子设备可以分析钱包存储层maogodb的账户类型,自动搜集冷钱包地址(也即是用户账户的账户地址)和热钱包地址(也即是平台账户的账户地址),如图9和图10所示,该账户信息中的address为账户地址,type为账户类型。以第一账户类型用3表示,第二账户类型用0表示为例,图9中账户的账户类型为3,则将其确定为冷钱包账户,可获取其账户地址。图10中账户的账户类型为0,则将其确定为热钱包账户,并获取其账户地址。
需要说明的是,该步骤704和步骤705为通过该调用接口,查询该智能合约中的至少一个账户的过程,电子设备通过自动生成的调用接口,能够自动查询到智能合约中的至少一个账户,这样无需开发人员获取,实现了账户获取的自动化。
706、电子设备根据该至少一个账户,生成该智能合约的测试用例。
电子设备获取到至少一个账户后,可以生成测试用例,来触发该智能合约,执行实现相应功能,以此来判断该智能合约是否能够正确运行,该智能合约的业务逻辑是否正确。
该测试用例可以用于指示在账户之间进行资产转移。资产(Token)归集是ERC20资产从热钱包地址转到冷钱包地址的过程,一般地,相反方向则不允许转让,也即是,不允许将资产从冷钱包地址转到钱包地址。对于该反方向的转让,通常钱包应用层和合约层都应具备相应的拦截功能。因而,可以生成测试用例,来对该智能合约进行测试。
相较于相关技术中很难触及归集功能的反向转让异常场景,在本申请实施例中,可以提供一种可能实现方式,在该实现方式中,该测试用例可以覆盖上述反向转让异常场景。具体的,该测试用例包括正常转让的测试用例和异常转让的测试用例;该正常转让的测试用例用于指示将该平台账户的资产转移至该用户账户;该异常转让的测试用例用于指示将该用户账户的资产转移至该平台账户。该正常转让的测试用例包括的资产转移的期望结果为转移成功,该异常转让的测试用例包括的资产转移的期望结果为转移失败。相应的,该测试用例生成过程可以包括:电子设备可以根据该用户账户和该平台账户,生成该智能合约的正常转让的测试用例和异常转让的测试用例。
在一种可能实现方式中,该测试用例的生成过程也可以通过目标编程语言实现,也即是,电子设备可生成目标编程语言的测试用例,进而触发智能合约,执行后续的测试步骤。在一种可能实现方式中,该目标编程语言可以为全球广域网3.java脚本(World WideWeb 3.javascript,Web3.js)。这样在相关技术中在应用层无法模拟token从冷钱包转到热钱包的场景下,基于web3.js能够自动模拟合约层Token从冷钱包转向热钱包这种异常场景。
这样上述方案中,通过web3.js自动搜集合约的热钱包和冷钱包地址,并完成互转,达到覆盖Token冷钱包转热钱包的异常测试场景,在实现自动化测试的同时,实现了对智能合约的异常测试,测试效率提高的同时,提高了测试效果。
在一个具体示例中,上述过程也即为:电子设备利用web3.js自动生成ERC20合约的异常测试用例:从冷钱包地址转Token到热钱包地址。例如,如图11所示,可以自动构建从冷钱包0xa9503694ffedd85e7e9931033a44261efb3c28d1转200token到热钱包0x706a535f849343d6df149bb6627def0e993e0bd4的测试用例。
具体的,上述测试用例可以称之为冷热互转用例,由于该测试用例通过web3.js生成,还可以称之为web3.js冷热互转用例,上述根据智能合约生成测试用例的过程可以通过python的模板库jinja2来实现。其中,jinja2是python web框架Flask作者开发的一个模板系统,起初是仿django模板的一个模板引擎,为Flask提供模板支持,由于其灵活,快速和安全等优点被广泛使用。
在该方式中,该电子设备可以先下载安装jinja2,具体可以通过pip3 installjinja2实现,然后编写web3.js的资产(Token)冷热互转用例模板文件,模板文件如图12所示。最后,该模板文件经过jinja2模板引擎渲染后,生成测试用例,具体可以通过template.render()实现,得到的测试用例如图10所示。
需要说明的是,上述下载并安装jinja2的过程可以预先完成,也可以在第一次生成测试用例时执行,后续生成测试用例时无需再执行。
当然,上述仅以ERC20钱包的延伸功能为Token只能从热钱包归集到冷钱包,禁止从冷钱包转到热钱包为例进行说明,相关技术人员还可以根据业务需求,编写智能合约,电子设备还可以通过上述调用接口,获取该智能合约所约定的内容,基于该内容,生成测试用例。本申请实施例对此不作限定。
需要说明的是,电子设备在对智能合约进行测试之前,还可以对智能合约进行编译,将其部署到步骤701部署的测试环境中,具体的,电子设备可以编译该待测试的智能合约,并将其部署到Geth区块链上。
以该区块链为以太坊区块链为例,该编译和部署过程可以通过truffle实现,其中,Truffle是针对基于以太坊的Solidity语言的一套开发框架。该编译和部署过程可以通过truffle compile和truffle migrate--network test实现,其中,compile为编译的意思,migrate为迁移的意思,network为网络的意思,test为测试的意思。
707、电子设备根据该测试用例,在测试环境中,对该智能合约进行测试。
电子设备生成测试用例后,即可触发智能合约,实现对智能合约的测试。该步骤707为根据该测试用例,对该智能合约进行测试的过程。
在该测试用例包括正常转让的测试用例和异常转让的测试用例的实现方式中,电子设备可以根据该正常转让的测试用例和异常转让的测试用例,通过该智能合约的调用接口,触发该智能合约执行该异常转让的测试用例所指示的资产转移步骤,得到对该正常转让的测试用例和异常转让的测试用例的测试结果。该测试结果用于指示该资产转移是否成功。进一步地,可以通过对比测试结果与该异常转让的测试用例包括的期望结果,来判断本次测试结果正常或异常。
具体的,电子设备可以响应于该对任一测试用例的测试结果与该测试用例包括的期望结果不相同,确定该测试结果异常。相应的,电子设备可以响应于该对任一测试用例的测试结果与该测试用例包括的期望结果相同,确定该测试结果正常。
在一种可能实现方式中,电子设备还可以根据对该智能合约进行测试的测试结果,生成测试报告,后续相关技术人员可以根据测试报告来获知该智能合约的情况,例如,电子设备可生成5个测试用例,可以包括3个正向转让场景的测试用例和2个反向转让异常场景的测试用例,测试后,电子设备可以生成得到测试报告,测试报告可以如图13所示,该5个测试用例的测试结果可以为:3个成功执行,2个执行失败。
电子设备也可以监听该测试过程中的事件,以此来通知相关技术人员该测试过程中该智能合约的情况。具体的,电子设备可以监听该测试过程中的事件,根据监听到的事件,发送通知消息。例如,可以监听该测试过程中的转让事件,通过邮件、短信或其他通信方式来通知相关技术人员。
该监听过程的实现可以为:如图14所示,电子设备可以实例化该待测试的智能合约,在此以通过HttpProvider进行实例化为例进行说明,其中,Http的英文全称为HyperText Transfer Protocol,中文全称为超文本传输协议。Provider为提供程序,可以通过Provider来进行实例化。然后如图15所示,电子设备订阅合约事件,例如,我的事件(myEvent4),图15中其他语句即为该事件的内容等,在此不多做解释。最后测试过程中触发冷钱包转让资产到热钱包事件发生,并在监听到该事件后,通过特定的方式输出,例如,如图16和图17所示,通过邮件方式输出,具体的,通过转移事件(transfer event),或者添加存书目录事件(add backlist event)。
当然,可以由相关技术人员根据需求,来确定采用上述生成测试报告和监听中哪种方式,或者二者均采用,本申请实施例对此不作限定。
下面提供一个具体示例,对上述智能合约的测试方法的具体流程进行说明。如图18所示,该待测试的智能合约可以为ERC20合约,该智能合约可以包括开发、测试和发布三个阶段。在开发阶段,开发可以编写ERC20合约,将智能合约提测到REQ平台,由REC平台分发测试任务,开发阶段还可以进行审核,如果审核通过,则可以进入测试流程。在测试流程中,该测试的设备可以部署有智能合约运行环境,在提测后,对该提测的智能合约进行测试步骤,具体可以包括搜集钱包中冷、热账户地址,根据归集功能,生成冷热互转web3.js用例,从而编译、部署、执行测试合约(待测试的智能合约),执行后,可以根据测试结果,生成测试报告,还可以监听该测试过程中的合约事件,触发邮件通知。
在该示例中,该方案具有以下优点:采用web3.js的方案,自动化程度高,测试用例可重复使用;采用web3.js的方案直接触及合约接口,自动搜集冷热钱包地址,并完成互转token,覆盖异常测试场景,测试效果好;采用web3.js的方案在异常测试完成执行后,可以触发合约事件,前端监听到事件后可自动生成测试报告,测试过程完整,有明确的收尾,整个测试过程闭环自动进行。
本申请实施例通过根据待测试的智能合约,生成对应的调用接口,从而可以通过生成的该调用接口查询得到智能合约中的账户,进而生成测试用例进行测试,该过程中能够根据待测试的智能合约,自动生成对应的调用接口,实现了对智能合约的调用和测试,无需开发人员参与,无需开发人员预先编写RPC接口,也无需人工获取智能合约中的账户,降低了人工成本,全过程自动进行,自动化程度高,该方式能够被重复利用,因而,对智能合约的测试的效率高。
上述所有可选技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。
图19是本申请实施例提供的一种智能合约的测试装置的结构示意图,请参考图19,该装置包括:
生成模块1901,用于根据待测试的智能合约,生成该智能合约对应的调用接口;
查询模块1902,用于通过该调用接口,查询该智能合约中的至少一个账户;
该生成模块1901,还用于根据该至少一个账户,生成该智能合约的测试用例;
测试模块1903,用于根据该测试用例,对该智能合约进行测试。
在一种可能实现方式中,该查询模块1902用于:
通过该调用接口,调用该智能合约中的账户信息;
从该账户信息中查询,得到该智能合约的至少一个账户。
在一种可能实现方式中,该至少一个账户的数量为多个,多个账户包括用户账户和平台账户;
该查询模块1902用于查询该账户信息中账户的账户类型,得到该智能合约中的用户账户和平台账户。
在一种可能实现方式中,该测试用例包括正常转让的测试用例和异常转让的测试用例;该正常转让的测试用例用于指示将该平台账户的资产转移至该用户账户;该异常转让的测试用例用于指示将该用户账户的资产转移至该平台账户;
该生成模块1901用于:
根据该用户账户和该平台账户,生成该智能合约的异常转让的测试用例,该异常转让的测试用例包括的资产转移的期望结果为转移失败;或,
根据该用户账户和该平台账户,生成该智能合约的正常转让的测试用例,该正常转让的测试用例包括的资产转移的期望结果为转移成功。
在一种可能实现方式中,该测试模块1903用于:
根据该正常转让的测试用例和异常转让的测试用例,通过该智能合约的调用接口,触发该智能合约执行该异常转让的测试用例所指示的资产转移步骤,得到对该正常转让的测试用例和异常转让的测试用例的测试结果;
该装置还包括:
确定模块,用于响应于该对任一测试用例的测试结果与该测试用例包括的期望结果不相同,确定该测试结果异常。
在一种可能实现方式中,该生成模块1901用于根据该待测试的智能合约的调用参数,通过目标编程语言,生成该智能合约对应的调用接口,该目标编程语言的调用接口能够与区块链系统中的节点设备上的目标RPC接口通信。
在一种可能实现方式中,该生成模块1901还用于根据对该智能合约进行测试的测试结果,生成测试报告;
该装置还包括:
发送模块,用于监听测试过程中的事件,根据监听到的事件,发送通知消息。
本申请实施例提供的装置,通过根据待测试的智能合约,生成对应的调用接口,从而可以通过生成的该调用接口查询得到智能合约中的账户,进而生成测试用例进行测试,该过程中能够根据待测试的智能合约,自动生成对应的调用接口,实现了对智能合约的调用和测试,无需开发人员参与,无需开发人员预先编写RPC接口,也无需人工获取智能合约中的账户,降低了人工成本,全过程自动进行,自动化程度高,该方式能够被重复利用,因而,对智能合约的测试的效率高。
需要说明的是:上述实施例提供的智能合约的测试装置在定位时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将电子设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的智能合约的测试装置与智能合约的测试方法实施例属于同一构思,其具体实现过程详见智能合约的测试方法实施例,这里不再赘述。
上述电子设备可以被提供为下述图20所示的终端,也可以被提供为下述图21所示的服务器,本申请实施例对此不作限定。
图20是本申请实施例提供的一种终端2000的结构示意图,该终端2000可以是:智能手机、平板电脑、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端2000还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,终端2000包括有:处理器2001和存储器2002。
处理器2001可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器2001可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器2001也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器2001可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器2001还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器2002可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器2002还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器2002中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器2001所执行以实现本申请中各个实施例提供的智能合约的测试方法。
在一些实施例中,终端2000还可选包括有:外围设备接口2003和至少一个外围设备。处理器2001、存储器2002和外围设备接口2003之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口2003相连。具体地,外围设备包括:射频电路2004、触摸显示屏2005、摄像头组件2006、音频电路2007、定位组件2008和电源2009中的至少一种。
外围设备接口2003可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器2001和存储器2002。在一些实施例中,处理器2001、存储器2002和外围设备接口2003被集成在同一芯片或电路板上;在一些其他实施例中,处理器2001、存储器2002和外围设备接口2003中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路2004用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路2004通过电磁信号与通信网络以及其他通信设备进行通信。射频电路2004将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路2004包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路2004可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:城域网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路2004还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏2005用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏2005是触摸显示屏时,显示屏2005还具有采集在显示屏2005的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器2001进行处理。此时,显示屏2005还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏2005可以为一个,设置终端2000的前面板;在另一些实施例中,显示屏2005可以为至少两个,分别设置在终端2000的不同表面或呈折叠设计;在再一些实施例中,显示屏2005可以是柔性显示屏,设置在终端2000的弯曲表面上或折叠面上。甚至,显示屏2005还可以设置成非矩形的不规则图形,也即异形屏。显示屏2005可以采用LCD(Liquid Crystal Display,液晶显示屏)、OLED(Organic Light-Emitting Diode,有机发光二极管)等材质制备。
摄像头组件2006用于采集图像或视频。可选地,摄像头组件2006包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件2006还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路2007可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器2001进行处理,或者输入至射频电路2004以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端2000的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器2001或射频电路2004的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路2007还可以包括耳机插孔。
定位组件2008用于定位终端2000的当前地理位置,以实现导航或LBS(LocationBased Service,基于位置的服务)。定位组件2008可以是基于美国的GPS(GlobalPositioning System,全球定位系统)、中国的北斗系统、俄罗斯的格雷纳斯系统或欧盟的伽利略系统的定位组件。
电源2009用于为终端2000中的各个组件进行供电。电源2009可以是交流电、直流电、一次性电池或可充电电池。当电源2009包括可充电电池时,该可充电电池可以支持有线充电或无线充电。该可充电电池还可以用于支持快充技术。
在一些实施例中,终端2000还包括有一个或多个传感器2010。该一个或多个传感器2010包括但不限于:加速度传感器2011、陀螺仪传感器2012、压力传感器2013、指纹传感器2014、光学传感器2015以及接近传感器2016。
加速度传感器2011可以检测以终端2000建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器2011可以用于检测重力加速度在三个坐标轴上的分量。处理器2001可以根据加速度传感器2011采集的重力加速度信号,控制触摸显示屏2005以横向视图或纵向视图进行用户界面的显示。加速度传感器2011还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器2012可以检测终端2000的机体方向及转动角度,陀螺仪传感器2012可以与加速度传感器2011协同采集用户对终端2000的3D动作。处理器2001根据陀螺仪传感器2012采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器2013可以设置在终端2000的侧边框和/或触摸显示屏2005的下层。当压力传感器2013设置在终端2000的侧边框时,可以检测用户对终端2000的握持信号,由处理器2001根据压力传感器2013采集的握持信号进行左右手识别或快捷操作。当压力传感器2013设置在触摸显示屏2005的下层时,由处理器2001根据用户对触摸显示屏2005的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
指纹传感器2014用于采集用户的指纹,由处理器2001根据指纹传感器2014采集到的指纹识别用户的身份,或者,由指纹传感器2014根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器2001授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器2014可以被设置终端2000的正面、背面或侧面。当终端2000上设置有物理按键或厂商Logo时,指纹传感器2014可以与物理按键或厂商Logo集成在一起。
光学传感器2015用于采集环境光强度。在一个实施例中,处理器2001可以根据光学传感器2015采集的环境光强度,控制触摸显示屏2005的显示亮度。具体地,当环境光强度较高时,调高触摸显示屏2005的显示亮度;当环境光强度较低时,调低触摸显示屏2005的显示亮度。在另一个实施例中,处理器2001还可以根据光学传感器2015采集的环境光强度,动态调整摄像头组件2006的拍摄参数。
接近传感器2016,也称距离传感器,通常设置在终端2000的前面板。接近传感器2016用于采集用户与终端2000的正面之间的距离。在一个实施例中,当接近传感器2016检测到用户与终端2000的正面之间的距离逐渐变小时,由处理器2001控制触摸显示屏2005从亮屏状态切换为息屏状态;当接近传感器2016检测到用户与终端2000的正面之间的距离逐渐变大时,由处理器2001控制触摸显示屏2005从息屏状态切换为亮屏状态。
本领域技术人员可以理解,图20中示出的结构并不构成对终端2000的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
图21是本申请实施例提供的一种服务器2100的结构示意图,该服务器2100可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(CentralProcessing Units,CPU)2101和一个或一个以上的存储器2102,其中,该存储器2102中存储有至少一条程序代码,该至少一条程序代码由该处理器2101加载并执行以实现上述各个实施例提供的智能合约的测试方法。当然,该服务器2100还可以具有有线或无线网络接口、键盘以及输入输出接口等部件,以便进行输入输出,该服务器2100还可以包括其他用于实现设备功能的部件,在此不做赘述。
在示例性实施例中,还提供了一种计算机可读存储介质,例如包括至少一条程序代码的存储器,上述至少一条程序代码可由终端中的处理器执行以完成上述实施例中智能合约的测试方法。例如,该计算机可读存储介质可以是ROM(Read-Only Memory,只读存储器)、RAM(Random-Access Memory,随机存取存储器)、CD-ROM(Compact Disc Read-OnlyMemory,只读光盘)、磁带、软盘和光数据存储设备等。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,该程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上该仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种智能合约的测试方法,其特征在于,所述方法包括:
根据待测试的智能合约,生成所述智能合约对应的调用接口;
通过所述调用接口,查询所述智能合约中的至少一个账户;
根据所述至少一个账户,生成所述智能合约的测试用例;
根据所述测试用例,对所述智能合约进行测试。
2.根据权利要求1所述的方法,其特征在于,所述通过所述调用接口,查询所述智能合约中的至少一个账户,包括:
通过所述调用接口,调用所述智能合约中的账户信息;
从所述账户信息中查询,得到所述智能合约的至少一个账户。
3.根据权利要求2所述的方法,其特征在于,所述至少一个账户的数量为多个,多个账户包括用户账户和平台账户;
所述从所述账户信息中查询,得到所述智能合约的至少一个账户,包括:
查询所述账户信息中账户的账户类型,得到所述智能合约中的用户账户和平台账户。
4.根据权利要求3所述的方法,其特征在于,所述测试用例包括正常转让的测试用例和异常转让的测试用例;所述正常转让的测试用例用于指示将所述平台账户的资产转移至所述用户账户;所述异常转让的测试用例用于指示将所述用户账户的资产转移至所述平台账户;
所述根据所述至少一个账户,生成所述智能合约的测试用例,包括:
根据所述用户账户和所述平台账户,生成所述智能合约的异常转让的测试用例,所述异常转让的测试用例包括的资产转移的期望结果为转移失败;
根据所述用户账户和所述平台账户,生成所述智能合约的正常转让的测试用例,所述正常转让的测试用例包括的资产转移的期望结果为转移成功。
5.根据权利要求4所述的方法,其特征在于,所述根据所述测试用例,对所述智能合约进行测试,包括:
根据所述正常转让的测试用例和异常转让的测试用例,通过所述智能合约的调用接口,触发所述智能合约执行所述异常转让的测试用例所指示的资产转移步骤,得到对所述正常转让的测试用例和异常转让的测试用例的测试结果;
所述方法还包括:
响应于所述对任一测试用例的测试结果与所述测试用例包括的期望结果不相同,确定所述测试结果异常。
6.根据权利要求1所述的方法,其特征在于,所述根据待测试的智能合约,生成所述智能合约对应的调用接口,包括:
根据所述待测试的智能合约的调用参数,通过目标编程语言,生成所述智能合约对应的调用接口,所述目标编程语言的调用接口能够与区块链系统中的节点设备上的目标RPC接口通信。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括下述至少一项:
根据对所述智能合约进行测试的测试结果,生成测试报告;
监听测试过程中的事件,根据监听到的事件,发送通知消息。
8.一种智能合约的测试装置,其特征在于,所述装置包括:
生成模块,用于根据待测试的智能合约,生成所述智能合约对应的调用接口;
查询模块,用于通过所述调用接口,查询所述智能合约中的至少一个账户;
所述生成模块,还用于根据所述至少一个账户,生成所述智能合约的测试用例;
测试模块,用于根据所述测试用例,对所述智能合约进行测试。
9.一种电子设备,其特征在于,所述电子设备包括一个或多个处理器和一个或多个存储器,所述一个或多个存储器中存储有至少一条程序代码,所述至少一条程序代码由所述一个或多个处理器加载并执行以实现如权利要求1至权利要求7任一项所述的智能合约的测试方法所执行的操作。
10.一种存储介质,其特征在于,所述存储介质中存储有至少一条程序代码,所述至少一条程序代码由处理器加载并执行以实现如权利要求1至权利要求7任一项或所述的智能合约的测试方法所执行的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010214679.XA CN111444092B (zh) | 2020-03-24 | 2020-03-24 | 智能合约的测试方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010214679.XA CN111444092B (zh) | 2020-03-24 | 2020-03-24 | 智能合约的测试方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111444092A true CN111444092A (zh) | 2020-07-24 |
CN111444092B CN111444092B (zh) | 2022-06-10 |
Family
ID=71629525
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010214679.XA Active CN111444092B (zh) | 2020-03-24 | 2020-03-24 | 智能合约的测试方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111444092B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112131115A (zh) * | 2020-09-23 | 2020-12-25 | 腾讯科技(深圳)有限公司 | 一种智能合约模糊测试的方法、装置及存储介质 |
CN112202633A (zh) * | 2020-09-24 | 2021-01-08 | 成都质数斯达克科技有限公司 | 区块链网络的测试方法、装置、电子设备及可读存储介质 |
CN112269836A (zh) * | 2020-11-15 | 2021-01-26 | 北京物资学院 | 一种区块链智能合约生成与管理系统及其实现机制 |
CN112506769A (zh) * | 2020-12-04 | 2021-03-16 | 数字广东网络建设有限公司 | 基于接口文档的请求体生成方法、装置和计算机设备 |
CN113282517A (zh) * | 2021-07-21 | 2021-08-20 | 支付宝(杭州)信息技术有限公司 | 一种智能合约代码的质量评估系统 |
CN113312035A (zh) * | 2021-05-17 | 2021-08-27 | 南京大学 | 一种面向Hyperledger Fabric的智能合约开发插件 |
CN114510420A (zh) * | 2022-01-28 | 2022-05-17 | 江苏大学 | 一种基于蜕变测试的区块链智能合约测试方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9934138B1 (en) * | 2016-12-07 | 2018-04-03 | International Business Machines Corporation | Application testing on a blockchain |
CN108776890A (zh) * | 2018-06-04 | 2018-11-09 | 青岛大学 | 一种基于区块链的可信智能工资发放方法和系统 |
CN109003081A (zh) * | 2018-07-13 | 2018-12-14 | 北京创世智链信息技术研究院 | 一种基于区块链的交易方法及系统 |
CN110633200A (zh) * | 2018-06-25 | 2019-12-31 | 富士通株式会社 | 用于测试智能合约的方法和设备 |
-
2020
- 2020-03-24 CN CN202010214679.XA patent/CN111444092B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9934138B1 (en) * | 2016-12-07 | 2018-04-03 | International Business Machines Corporation | Application testing on a blockchain |
CN108776890A (zh) * | 2018-06-04 | 2018-11-09 | 青岛大学 | 一种基于区块链的可信智能工资发放方法和系统 |
CN110633200A (zh) * | 2018-06-25 | 2019-12-31 | 富士通株式会社 | 用于测试智能合约的方法和设备 |
CN109003081A (zh) * | 2018-07-13 | 2018-12-14 | 北京创世智链信息技术研究院 | 一种基于区块链的交易方法及系统 |
Non-Patent Citations (1)
Title |
---|
张宏宇_ZH: "web3.js与智能合约交互", 《HTTPS://BLOG.CSDN.NET/QQ_26630519/ARTICLE/DETAILS/81078522》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112131115A (zh) * | 2020-09-23 | 2020-12-25 | 腾讯科技(深圳)有限公司 | 一种智能合约模糊测试的方法、装置及存储介质 |
CN112131115B (zh) * | 2020-09-23 | 2021-06-22 | 腾讯科技(深圳)有限公司 | 一种智能合约模糊测试的方法、装置及存储介质 |
CN112202633A (zh) * | 2020-09-24 | 2021-01-08 | 成都质数斯达克科技有限公司 | 区块链网络的测试方法、装置、电子设备及可读存储介质 |
CN112202633B (zh) * | 2020-09-24 | 2022-07-12 | 成都质数斯达克科技有限公司 | 区块链网络的测试方法、装置、电子设备及可读存储介质 |
CN112269836A (zh) * | 2020-11-15 | 2021-01-26 | 北京物资学院 | 一种区块链智能合约生成与管理系统及其实现机制 |
CN112269836B (zh) * | 2020-11-15 | 2023-07-04 | 北京物资学院 | 一种区块链智能合约生成与管理系统及其实现机制 |
CN112506769A (zh) * | 2020-12-04 | 2021-03-16 | 数字广东网络建设有限公司 | 基于接口文档的请求体生成方法、装置和计算机设备 |
CN113312035A (zh) * | 2021-05-17 | 2021-08-27 | 南京大学 | 一种面向Hyperledger Fabric的智能合约开发插件 |
CN113312035B (zh) * | 2021-05-17 | 2023-06-06 | 南京大学 | 一种面向Hyperledger Fabric的智能合约开发插件的实现方法 |
CN113282517A (zh) * | 2021-07-21 | 2021-08-20 | 支付宝(杭州)信息技术有限公司 | 一种智能合约代码的质量评估系统 |
CN114510420A (zh) * | 2022-01-28 | 2022-05-17 | 江苏大学 | 一种基于蜕变测试的区块链智能合约测试方法 |
CN114510420B (zh) * | 2022-01-28 | 2024-05-10 | 江苏大学 | 一种基于蜕变测试的区块链智能合约测试方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111444092B (zh) | 2022-06-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111444092B (zh) | 智能合约的测试方法、装置、电子设备及存储介质 | |
CN110401715B (zh) | 资源收集任务管理方法、装置、存储介质及系统 | |
CN109615516B (zh) | 资源转移方法、装置、电子设备及存储介质 | |
CN111340482B (zh) | 冲突检测方法、装置、节点设备及存储介质 | |
CN111245745B (zh) | 消息发送方法、装置、节点设备及存储介质 | |
CN110687821B (zh) | 基于区块链的智能家居控制系统及方法 | |
CN111339086B (zh) | 区块处理方法、基于区块链的数据查询方法及装置 | |
CN111401867A (zh) | 基于区块链的资源转移方法、装置、节点设备及存储介质 | |
CN111339181B (zh) | 区块存储方法、装置、节点设备及存储介质 | |
CN111159474B (zh) | 基于区块链的多线取证方法、装置、设备及存储介质 | |
CN111045568B (zh) | 基于区块链的虚拟物品处理方法、装置、设备及存储介质 | |
CN110597924B (zh) | 基于区块链的用户标识处理方法、装置、设备及存储介质 | |
CN111241115B (zh) | 数据同步方法、装置、设备及存储介质 | |
CN110555780B (zh) | 基于区块链的保险数据处理方法、装置、设备及存储介质 | |
CN111355732B (zh) | 链接检测方法、装置、电子设备及存储介质 | |
CN110933113B (zh) | 基于区块链的互动行为检测方法、装置、设备及存储介质 | |
CN111667371B (zh) | 基于区块链的资源聚合方法、系统、设备及存储介质 | |
CN110826103A (zh) | 基于区块链的文档权限处理方法、装置、设备及存储介质 | |
CN111260347A (zh) | 基于区块链的资源处理方法、装置、设备及存储介质 | |
CN111737100A (zh) | 数据获取方法、装置、设备及存储介质 | |
CN111212074A (zh) | 基于区块链的资格认定方法、装置、设备及存储介质 | |
CN112148499A (zh) | 数据上报方法、装置、计算机设备及介质 | |
CN110659975A (zh) | 基于区块链的资源转移方法、装置、设备及存储介质 | |
CN110727894A (zh) | 目标素材设置方法、装置、设备及存储介质 | |
CN110597840A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |