CN112069067B - 基于区块链的数据测试方法、装置及计算机可读存储介质 - Google Patents
基于区块链的数据测试方法、装置及计算机可读存储介质 Download PDFInfo
- Publication number
- CN112069067B CN112069067B CN202010916251.XA CN202010916251A CN112069067B CN 112069067 B CN112069067 B CN 112069067B CN 202010916251 A CN202010916251 A CN 202010916251A CN 112069067 B CN112069067 B CN 112069067B
- Authority
- CN
- China
- Prior art keywords
- statement
- object execution
- test
- execution
- transaction
- 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.)
- Active
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/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
本申请公开了一种基于区块链的数据测试方法、装置及计算机可读存储介质,该方法包括:获取智能合约中的至少两个对象执行语句,对至少两个对象执行语句进行组合,生成测试用例;测试用例中的对象执行语句均属于相同交易或均属于不同交易;测试用例中的对象执行语句用于指示针对目标对象的对象操作;基于智能合约中的操作去重函数,对测试用例中的对象执行语句进行语句去重,得到目标对象的语句去重后的剩余对象执行语句;根据剩余对象执行语句,生成针对测试用例的测试结果信息;测试结果信息,表征智能合约对测试用例中的对象执行语句的语句去重质量。采用本申请,可提高针对语句去重质量的测试效率。
Description
技术领域
本申请涉及数据处理的技术领域,尤其涉及一种基于区块链的数据测试方法、装置及计算机可读存储介质。
背景技术
随着区块链技术的不断发展,区块链相关技术逐渐趋于成熟,对于区块链相关技术的优化手段也层出不穷。其中,就涉及到对区块链网络中相关对象(例如账户)的对象操作进行去重的目的。
现有技术中,在通过区块链网络对对象的对象操作进行去重之后,通常可以通过查看操作去重的日志,来检测区块链网络对对象操作的去重效果(例如是否去重成功)。而日志中一般会包括针对大量对象的对象操作去重记录,因此,通过查看日志这种排查式的手段来检测区块链网络对对象操作的去重效果,会导致针对去重效果的检测效率低。
发明内容
本申请提供了一种基于区块链的数据测试方法、装置及计算机可读存储介质,可提高针对语句去重质量的测试效率。
本申请一方面提供了一种基于区块链的数据测试方法,包括:
获取智能合约中的至少两个对象执行语句,对至少两个对象执行语句进行组合,生成测试用例;测试用例中的对象执行语句均属于相同交易或均属于不同交易;测试用例中的对象执行语句用于指示针对目标对象的对象操作;
基于智能合约中的操作去重函数,对测试用例中的对象执行语句进行语句去重,得到目标对象的语句去重后的剩余对象执行语句;
根据剩余对象执行语句,生成针对测试用例的测试结果信息;测试结果信息,表征智能合约对测试用例中的对象执行语句的语句去重质量。
本申请一方面提供了一种基于区块链的数据测试装置,包括:
用例获取模块,用于获取智能合约中的至少两个对象执行语句,对至少两个对象执行语句进行组合,生成测试用例;测试用例中的对象执行语句均属于相同交易或均属于不同交易;测试用例中的对象执行语句用于指示针对目标对象的对象操作;
去重模块,用于基于智能合约中的操作去重函数,对测试用例中的对象执行语句进行语句去重,得到目标对象的语句去重后的剩余对象执行语句;
信息生成模块,根据剩余对象执行语句,生成针对测试用例的测试结果信息;测试结果信息,表征智能合约对测试用例中的对象执行语句的语句去重质量。
其中,测试用例包括交易测试用例;至少两个对象执行语句包括第一对象执行语句和第二对象执行语句;
用例获取模块,包括:
第一语句组合单元,用于对第一对象执行语句和第二对象执行语句进行组合,得到第一组合执行语句;
第一交易确定单元,用于将第一组合执行语句中的第一对象执行语句和第二对象执行语句,确定为属于第一交易的对象执行语句;
第一请求获取单元,用于获取针对第一交易的第一测试交易请求;
第一用例生成单元,用于基于第一组合执行语句以及第一测试交易请求,生成交易测试用例。
其中,去重模块,包括:
第一参数获取单元,用于当第一对象执行语句在交易测试用例中的位置优先级,大于第二对象执行语句在交易测试用例中的位置优先级时,从交易测试用例中的第一测试交易请求中,获取针对第一对象执行语句的第一语句执行参数;
第一执行单元,用于基于操作去重函数和第一语句执行参数,执行交易测试用例中的第一对象执行语句,为所执行的第一对象执行语句添加初始执行信息;
第二参数获取单元,用于当对交易测试用例中的第一对象执行语句执行完成时,从交易测试用例中的第一测试交易请求中,获取针对第二对象执行语句的第二语句执行参数;
第二执行单元,用于基于操作去重函数和第二语句执行参数,执行交易测试用例中的第二对象执行语句,根据为第一对象执行语句添加的初始执行信息,获取对目标对象执行第一对象执行语句的第一对象执行结果,对第一对象执行语句进行语句去重,将第二对象执行语句确定为剩余对象执行语句;第一对象执行结果用于获取对目标对象执行第二对象执行语句的第二对象执行结果。
其中,测试用例包括区块测试用例;至少两个对象执行语句包括第三对象执行语句和第四对象执行语句;
用例获取模块,包括:
第二语句组合单元,用于对第三对象执行语句和第四对象执行语句进行组合,得到第二组合执行语句;
第二交易确定单元,用于将将第二组合执行语句中的第三对象执行语句,确定为属于第二交易的对象执行语句,将第二组合执行语句中的第四对象执行语句,确定为属于第三交易的对象执行语句;
第二请求获取单元,用于获取针对第二交易的第二测试交易请求、以及针对第三交易的第三测试交易请求;
第二用例生成单元,用于基于第二组合执行语句、第二测试交易请求和第三测试交易请求,生成区块测试用例。
其中,去重模块,包括:
第三参数获取单元,用于当第三对象执行语句在区域测试用例中的位置优先级,大于第四对象执行语句在区块测试用例中的位置优先级时,从区块测试用例中的第二测试交易请求中,获取针对第三对象执行语句的第三语句执行参数;
第三执行单元,用于基于操作去重函数和第三语句执行参数,执行区块测试用例中的第三对象执行语句,为所执行的第三对象执行语句添加初始执行信息;
第四参数获取单元,用于当对区块测试用例中的第三对象执行语句执行完成时,从区块测试用例中的第三测试交易请求中,获取针对第四对象执行语句的第四语句执行参数;
第四执行单元,用于根据操作去重函数和第四语句执行参数,执行区块测试用例中的第四对象执行语句,根据为第三对象执行语句添加的初始执行信息,获取对目标对象执行第三对象执行语句的第三对象执行结果,对第三对象执行语句进行语句去重,将第四对象执行语句确定为剩余对象执行语句;第三对象执行结果用于获取对目标对象执行第四对象执行语句的第四对象执行结果。
其中,测试结果信息包括测试已去重信息和测试未去重信息;
信息生成模块,包括:
语句数量获取单元,用于获取剩余对象执行语句的语句数量;
第一信息确定单元,用于当语句数量大于语句数量阈值时,确定测试结果信息为测试未去重信息;
第二信息确定单元,用于当语句数量小于或等于语句数量阈值时,确定测试结果为测试已去重信息。
其中,语句数量获取单元,包括:
关系获取子单元,用于获取剩余对象执行语句所触发的函数调用关系;
关系数量获取子单元,用于获取函数调用关系的调用关系数量;
数量确定子单元,用于根据调用关系数量,确定剩余对象执行语句的语句数量。
其中,关系获取子单元,包括:
关系检测子单元,用于检测已有函数调用关系;已有函数调用关系包括函数调用参数;函数调用参数用于指示已有函数调用关系所调用的对象;
关系确定子单元,用于当函数调用参数所指示的已有函数调用关系调用的对象为目标对象时,将已有函数调用关系,确定为剩余对象执行语句所触发的函数调用关系。
其中,上述装置还包括:
提示信息生成模块,用于当测试结果信息为测试已去重信息时,根据测试已去重信息生成测试通过提示信息;
输出模块,用于将测试通过提示信息同步至测试客户端,以使测试客户端在客户端页面输出测试通过提示信息。
其中,上述装置还包括:
位置定位模块,用于当测试结果信息为测试未去重信息时,根据测试用例,定位操作去重函数的函数出错位置;
报告生成模块,用于根据函数出错位置,生成去重出错分析报告;
调整参数确定模块,用于根据去重出错分析报告,确定针对操作去重函数的函数调整参数;
函数调整模块,用于基于函数调整参数,调整操作去重函数,得到调整后的操作去重函数。
本申请一方面提供了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行本申请中一方面中的方法。
本申请一方面提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序包括程序指令,该程序指令被处理器执行时使该处理器执行上述一方面中的方法。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述一方面等各种可选方式中提供的方法。
本申请可以获取智能合约中的至少两个对象执行语句,对至少两个对象执行语句进行组合,生成测试用例;测试用例中的对象执行语句用于指示针对目标对象的对象操作;基于智能合约中的操作去重函数,对测试用例中的对象执行语句进行语句去重,得到目标对象的语句去重后的剩余对象执行语句;根据剩余对象执行语句,生成针对测试用例的测试结果信息。由此可见,本申请提出的方法可以自动生成测试用例,通过智能合约来对该测试用例中的对象执行语句进行语句去重,并且可以通过去重之后所得到的剩余对象执行语句,来得到针对测试用例的测试结果信息,该测试结果信息可以表征智能合约对对象执行语句的语句去重质量。因此,通过本申所请提供的方法,实现了全自动地测试智能合约对对象执行语句的语句去重质量,提高了针对语句去重质量的测试效率。
附图说明
为了更清楚地说明本申请或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请提供的一种系统架构示意图;
图2是本申请提供的一种数据测试方法的场景示意图;
图3是本申请提供的一种基于区块链的数据测试方法的流程示意图;
图4是本申请提供的一种获取测试用例的场景示意图;
图5是本申请提供的一种的执行交易测试用例的场景示意图;
图6是本申请提供的一种的执行区块测试用例的场景示意图;
图7是本申请提供的一种语句去重的场景示意图;
图8是本申请提供的一种基于区块链的数据测试装置的结构示意图;
图9是本申请提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本申请中的附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请涉及到区块链的相关技术。其中,区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层。区块链中包括一系列按照产生的先后时间顺序相互接续的区块(Block),新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链系统中节点提交的记录数据。
本申请中涉及到的区块链相关技术,主要指对区块链网络中所提交的区块中的对象操作进行去重时的去重效果进行测试,具体请参见下述。
请参见图1,图1是本申请提供的一种系统架构示意图。如图1所示,该系统架构示意图中包括多个服务器,该多个服务器均可以是区块链网络中的区块链节点,这里不对该多个服务器的数量进行限制,该多个服务器均可以相互进行通信。该多个服务器具体可以包括服务器101a、服务器102a、服务器103a、服务器104a以及服务器105a等。可以理解的是,区块链网络中的区块链节点可以是一个服务器,也可以是由多个服务器构成的服务器集群。
如图1所示的各个服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。下面以服务器101a与其他各个服务器之间的通信为例,进行本申请所提供的方法的具体描述。其中,可以将服务器101a称之为区块链节点101a。
其中,区块链节点101a可以为开发人员可以操作的区块链节点,开发人员可以通过区块链节点101a来对区块链网络针对对象执行语句的语句去重效果进行测试。其中,一个对象可以指账户对象或者文档对象等,因此,对象执行语句可以指针对对象的任意操作所对应的执行语句。例如,对象执行语句可以是删除对象的执行语句、存储对象的执行语句以及更新对象的执行语句等。其中,对对象执行语句的具体解释还可以参见下述步骤S101。
更多的,对象执行语句可以是智能合约中的执行语句,换句话说,对象执行语句可以通过智能合约来执行。因此,区块链网络对对象执行语句进行去重,可以指是通过区块链网络中的智能合约来对对象执行语句进行去重。其中,区块链节点101a可以通过智能合约的多个对象执行语句自主生成测试用例,并通过所生成的测试用例对智能合约针对对象执行语句的去重效果进行测试,请参见下述。
请一并参见图2,图2是本申请提供的一种数据测试方法的场景示意图。首先,区块链节点101a可以获取到多个(至少两个)对象执行语句,该多个对象执行语句可以为集合100b中的n个对象执行语句,该n个对象执行语句具体包括:对象执行语句1、对象执行语句2、对象执行语句3、……以及对象执行语句n。可以将该n个对象执行语句理解为是用于生成测试用例的原料。
接着,区块链节点101a可以对集合100b中的多个对象执行语句进行两两组合,以得到测试用例,因此,一个测试用例中可以包括两个对象执行语句。此处,区块链节点101a通过对集合100b中的多个对象执行语句进行两两组合,得到了测试用例102b、测试用例103b、测试用例104b以及测试用例105b等。其中,测试用例102b是通过组合对象执行语句1和对象执行语句2得到;测试用例103b是通过组合对象执行语句3和对象执行语句4得到;测试用例104b是通过组合对象执行语句2和对象执行语句5得到;测试用例105b是通过组合对象执行语句3和对象执行语句6得到。
区块链节点101a可以通过上述所得到的每个测试用例,分别独立对操作去重机制106b进行测试。其中,操作去重机制106b即为智能合约对对象执行语句进行语句去重的机制,因此,对操作去重机制106b进行测试,也就是对智能合约针对对象执行语句的语句去重效果进行测试。该操作去重机制106b即为下述步骤S102中的双层缓存机制,因此,智能合约通过操作去重机制106b对对象执行语句进行语句去重的原理,可以参见下述步骤S102中对双层缓存机制的具体描述。
此处,以区块链节点101a通过测试用例102b对操作去重机制106b进行测试的过程为例进行说明,可以理解的是,通过每个测试用例对操作去重机制106b进行测试的原理均相同。
其中,可以将测试用例102b理解为区块链节点101a创建的一个事件,区块链节点101a可以将测试用例102b这个事件发布到区块链网络中,基于区块链网络中的各个区块链节点(如图1中的服务器102a表示的区块链节点、服务器103a表示的区块链节点、服务器104a表示的区块链节点和服务器105a表示的区块链节点)来对测试用例102b这个事件进行验证上链。但是,在通过区块链网络中各个区块链节点对测试用例102b这个事件进行验证上链之前,就会涉及到对测试用例102b中的对象执行语句进行语句去重的操作。通过对测试用例102b中的对象执行语句进行语句去重,可以使得各个区块链节点在对测试用例102b这个事件进行验证上链时,减少对测试用例102b中的对象执行语句的读写操作,进而提高对测试用例102b这个事件进行验证上链的效率。
因此,区块链节点101a可以将测试用例102b先提交给智能合约,智能合约可以通过操作去重机制106b对测试用例102b中的对象执行语句进行语句去重。智能合约通过操作去重机制106b对测试用例102b中的对象执行语句进行语句去重之后,可以得到测试用例102b中的剩余对象执行语句107b。
接着,区块链节点101a可以通过该剩余对象执行语句107b,得到通过操作去重机制106b对测试用例102b中的对象执行语句进行语句去重后的测试结果信息108b。该测试结果信息108b,可以表征智能合约通过操作去重机制106b是否对测试用例102b中的对象执行语句进行语句去重成功。
若通过该测试结果信息108b,发现通过操作去重机制106b对测试用例102b中的对象执行语句进行语句去重失败,则可以提示相关开发人员分析去重失败的原因,并对操作去重机制106b进行机制调整。若通过该测试结果信息108b,发现通过操作去重机制106b对测试用例102b中的对象执行语句进行语句去重成功,则表征对操作去重机制106b的测试结果良好。
通过本申请所提供的方法,可以实现对操作去重机制106b针对对象执行语句的语句去重效果的全自动测试,该全自动测试包括自动生成测试用例,并自动得到针对测试用例的测试结果信息,因此,提高了针对操作去重机制106b的测试效率。并且,通过对测试用例中的对象执行语句进行语句去重,模拟了实际对对象执行语句进行语句去重的场景,因此,提高了针对操作去重机制106b的测试准确性。
请参见图3,图3是本申请提供的一种基于区块链的数据测试方法的流程示意图,如图3所示,该方法可以包括:
步骤S101,获取智能合约中的至少两个对象执行语句,对至少两个对象执行语句进行组合,生成测试用例;测试用例中的对象执行语句均属于相同交易或均属于不同交易;测试用例中的对象执行语句用于指示针对目标对象的对象操作;
具体的,本申请实施例中的执行主体可以是区块链网络中任意一个区块链节点,该区块链节点可以是由一个计算机设备构成,也可以是由多个计算机设备构成的集群。下述以本申请实施例中的执行主体为目标区块链节点为例进行说明。
目标区块链节点可以是开发人员可以操作的区块链节点,开发人员可以在目标区块链节点中,触发目标区块链节点对区块链网络针对目标对象的对象执行语句的语句去重效果进行测试。其中,目标对象可以为账户对象或者文档对象等。或者,可以对目标区块链节点进行设置,使得目标区块链节点可以定期(例如每隔一天)对区块链网络针对目标对象的对象执行语句的语句去重效果进行测试。下面,具体描述目标区块链节点对区块链网络针对目标对象的对象执行语句的语句去重效果的测试过程。
其中,目标对象的对象执行语句可以是由区块链网络中的智能合约来执行的,因此,区块链网络对目标对象的对象执行语句进行语句去重,即为智能合约对目标对象的对象执行语句进行语句去重。目标区块链节点可以生成测试用例,该测试用例中包括目标对象的对象执行语句。目标区块链节点可以通过该测试用例来测试智能合约针对目标对象的对象执行语句的语句去重效果,该语句去重效果也可以称之为语句去重质量。
其中,通过测试用例对智能合约针对目标对象的对象执行语句的语句去重效果的测试过程,对于区块链网络中除目标区块链节点之外的区块链节点而言,可以是无感的。换句话说,区块链网络中除目标区块链节点之外的区块链节点,会将测试用例当做是一个正常的任务来执行,而不用知道该测试用例是用于对智能合约针对目标对象的对象执行语句的语句去重效果进行测试的。
首先,目标区块链节点可以获取到智能合约中的多个(至少两个)对象执行语句,该多个对象执行语句均为智能合约基础的对象操作语句,可以将对象执行语句称之为对象操作语句。例如,对象执行语句可以是初始化对象结构的语句、升级对象结构字段的语句、存储对象的语句、更新对象的语句、删除对象的语句以及查询对象的语句等。其中,目标区块链节点获取到的多个对象执行语句,可以是开发人员预先定义好的对象执行语句。或者,可以存在一个语句数据集,该语句数据集中存储了大量的对象执行语句,目标区块链节点可以根据测试需要,在该语句数据集中获取到多个对象执行语句。
目标区块链节点在获取到多个对象执行语句之后,即可对该多个对象执行语句进行组合,以得到测试用例。测试用例中的对象执行语句为目标对象的对象执行语句,因此,测试用例中的对象执行语句用于指示针对目标对象的对象操作。例如,若目标对象为账户对象,则目标对象的对象执行语句所指示的针对目标对象的对象操作,可以是对目标对象的账户余额减去5的操作。
因此,可以理解的是,对目标对象的对象执行语句进行语句去重,就是对目标对象的对象操作进行操作去重,因为,去掉了目标对象的某个对象执行语句之后,就不会再对目标对象执行所去掉的对象执行语句所指示的对象操作。
其中,测试用例中所组合的对象执行语句均属于相同交易或均属于不同交易。测试用例可以包括交易测试用例和区块测试用例。其中,交易测试用例用于测试对同一个交易中的操作进行去重的去重效果。对一个交易中的操作进行去重,也就是对该交易所属的对象执行语句进行去重。因此,交易测试用例中的对象执行语句均属于同一个交易。例如,若交易测试用例中包括对象执行语句1和对象执行语句2,那么对象执行语句1和对象执行语句2都属于同一个交易。
而区块测试用例用于测试对一个区块中不同交易的操作进行去重的去重效果。对一个区块中不同交易的操作进行去重,也就是对不同交易分别所属的对象执行语句进行去重。因此,区块测试用例中的对象执行语句均属于不同交易。例如,若区块链测试用例中包括对象执行语句3和对象执行语句4,那么,对象执行语句3和对象执行语句4分别属于不同的交易。
下面具体描述交易测试用例和区块测试用例的生成过程:
首先,描述交易测试用例的生成过程。通常,目标区块链节点可以对所获取到的多个对象执行语句进行两两组合,以得到交易测试用例。因此,一个交易测试用例中可以包括2个对象执行语句,但是可以理解的是,一个交易测试用例中也可以包括大于2个的对象执行语句,对此不作限制。
因此,若目标区块链节点获取到的多个对象执行语句包括第一对象执行语句和第二对象执行语句,则在对对象执行语句进行两两组合时,可以对该第一对象执行语句和第二对象执行语句进行组合。可以将第一对象执行语句和第二对象执行语句的组合,称之为第一组合执行语句。目标区块链节点可以将第一组合执行语句中的第一对象执行语句和第二对象执行语句,均设置为属于第一交易的对象执行语句,该第一交易可以是目标区块链节点所发起的。
目标区块链节点还可以获取到针对该第一交易的第一测试交易请求,该第一测试交易请求为目标区块链节点用于发起第一交易的交易请求,该第一测试交易请求可以是目标区块链节点自行生成的,例如,可以通过一个用于生成交易请求的工具来生成该第一测试交易请求。
目标区块链节点可以对上述第一测试交易请求和第一组合执行语句进行组合,即可生成交易测试用例。因此,可以知道的是,交易测试用例中包括第一测试交易请求、第一对象执行语句和第二对象执行语句。其中,可以将交易测试用例理解为目标区块链节点所生成的一个事件,可以通过交易测试用例中的第一测试交易请求发起第一交易,而发起第一交易就是对目标对象执行交易测试用例中的第一对象执行语句和第二对象执行语句。
接下来,描述区块测试用例的生成过程。同样,目标区块链节点也可以对所获取到的多个对象执行语句进行两两组合,以得到区块测试用例。因此,一个区块测试用例中可以包括2个对象执行语句,但是可以理解的是,一个区块测试用例中也可以包括大于2个的对象执行语句,对此不作限制。
因此,若目标区块链节点获取到的多个对象执行语句包括第三对象执行语句和第四对象执行语句,则在对对象执行语句进行两两组合时,可以对该第三对象执行语句和第四对象执行语句进行组合。可以将第三对象执行语句和第四对象执行语句的组合,称之为第二组合执行语句。目标区块链节点可以将第二组合执行语句中的第三对象执行语句和第二对象执行语句,设置为属于第二交易的对象执行语句,还可以将第二组合执行语句中的第四对象执行语句,设置为属于第三交易的对象执行语句,该第二交易和第三交易均可以是目标区块链节点所发起的。
目标区块链节点还可以获取到针对第二交易的第二测试交易请求,该第二测试交易请求为目标区块链节点用于发起第二交易的交易请求。目标区块链节点还可以获取到针对第三交易的第三测试交易请求,该第三测试交易请求为目标区块链节点用于发起第三交易的交易请求。该第二测试交易请求和第二测试交易请求均可以是目标区块链节点自行生成的,例如,可以通过一个用于生成交易请求的工具来生成该第二测试交易请求和第二测试交易请求。
目标区块链节点可以对上述第二测试交易请求、第三测试交易请求和第二组合执行语句进行组合,即可生成区块测试用例。因此,可以知道的是,区块测试用例中包括第二测试交易请求、第三测试交易请求、第三对象执行语句和第四对象执行语句。
其中,可以将区块测试用例也理解为目标区块链节点所生成的一个事件,可以通过区块测试用例中的第二测试交易请求发起第二交易,而发起第二交易也就是对目标对象执行区块测试用例中的第三对象执行语句。同理,可以通过区块测试用例中的第三测试交易请求发起第三交易,而发起第三交易也就是对目标对象执行区块测试用例中的第四对象执行语句。
请参见图4,图4是本申请提供的一种获取测试用例的场景示意图。如图4所示,目标区块链节点可以获取到多个对象执行语句,包括对象执行语句101c(即初始化对象结构)、对象执行语句102c(即升级对象结构字段)、对象执行语句103c(即存储对象)、对象执行语句104c(即更新对象单个字段)、对象执行语句105c(即删除对象)、以及对象执行语句106c(即更新对象多个字段)等。
因此,目标区块链节点对所获取到的多个对象执行语句进行两两组合,可以得到区域100c中的各个交易测试用例,该各个交易测试用例包括交易测试用例1、交易测试用例2、……以及交易测试用例n。其中,交易测试用例1中的对象执行语句“①初始化对象结构”和对象执行语句“②存储对象”属于相同交易;交易测试用例2中的对象执行语句“①存储对象”和对象执行语句“②更新对象单个字段”属于相同交易;……;交易测试用例n中的对象执行语句“①删除对象”和对象执行语句“②存储对象”属于相同交易。
目标区块链节点对所获取到的多个对象执行语句进行两两组合,还可以得到区域107c中的各个区块测试用例,该各个区块测试用例包括区块测试用例1、区块测试用例2、……以及区块测试用例n。其中,区块测试用例1中的对象执行语句“①初始化对象结构”和对象执行语句“②升级对象结构字段”属于不同交易;区块测试用例2中的对象执行语句“①存储对象”和对象执行语句“②更新对象多个字段”属于不同交易;……;区块测试用例n中的对象执行语句“①存储对象”和对象执行语句“②更新对象单个字段”属于不同交易。
步骤S102,基于智能合约中的操作去重函数,对测试用例中的对象执行语句进行语句去重,得到目标对象的语句去重后的剩余对象执行语句;
具体的,目标区块链节点可以将测试用例这个事件发布到区块链网络中,以触发区块链网络中的智能合约来执行测试用例对应的事件,执行过程中同时实现对测试用例中的对象执行语句进行语句去重。
其中,智能合约可以是通过执行双层缓存机制来对测试用例中的对象执行语句进行去重的,而该双层缓存机制又可以是通过调用相应的函数,来实现对测试用例中的对象执行语句进行去重的,可以将双层缓存机制所调用的函数称之为操作去重函数。因此,也可以说成是由智能合约来调用该操作去重函数,实现对测试用例中的对象执行语句的语句去重。
其中,根据双层缓存机制对对象执行语句的去重原理,对双层缓存机制中的双层进行解释:对于一个区块而言,一个区块中可以包括多个交易,而每个交易又可以具有多个对象执行语句。因此,双层缓存机制就是用于对区块中的对象执行语句进行语句去重(即操作去重),对区块中的对象执行语句进行语句去重就涉及到双层的去重,该双层也就是双层缓存机制中的双层。
其中,对区块中的对象执行语句进行去重的第一层(也就是双层缓存机制的第一层)指:首先对区块的每个交易中的操作(也就是交易中的对象执行语句)进行缓存,以在缓存中对每个交易分别所属的对象执行语句进行语句去重。其中,一个交易可以是针对多个对象的,因此一个交易所属的对象执行语句可以包括该多个对象分别对应的对象执行语句。而对一个交易所属的对象执行语句进行语句去重之后,在该交易中的每个对象分别还对应有一个对象执行语句,每个对象对应的进行语句去重后所得到的对象执行语句,分别为每个对象对应的全部对象执行语句中,时间戳最新的那个对象执行语句。
因此,对区块中的对象执行语句进行去重的第二层(也就是双层缓存机制的第二层)指:在通过上述第一层对区块的每个交易所属的对象执行语句进行去重之后,一个交易所针对的每个对象就还只有一个对象执行语句。可以将区块的每个交易所属的进行语句去重后所得到的对象执行语句进行缓存,以在缓存中对不同交易之间的对象执行语句进行去重。对区块中不同交易之间的对象执行语句进行去重之后,最终,区块中所有交易所涉及到的每个对象分别有且还有一个对象执行语句。
对区块中的对象执行语句进行双层语句去重之后,即为对区块中的对象执行语句去重完成,此时区块中所属的每个对象分别具有一个对象执行语句。其中,对一个区块中的对象执行语句进行语句去重,可以使得后续数据库在对区块中的每个对象的对象执行语句进行读写时,只需要读写每个对象的一个对象执行语句,减少了数据库对每个对象的对象执行语句的读写操作,也就是减少了数据库对每个对象多余的对象执行语句的冗余读写操作,提高了对每个对象的对象执行语句进行读写的效率。
在描述了上述双层缓存机制之后,可以理解的是,对智能合约针对测试用例中的对象执行语句进行语句去重的去重效果的测试,即为对双层缓存机制针对测试用例中的对象执行语句进行语句去重的去重效果的测试。下面具体描述如何通过交易测试用例和区块测试用例,对双层缓存机制针对对象执行语句(即对象操作)的语句去重效果(即语句去重质量)进行测试。
首选,描述如何通过交易测试用例,得到剩余对象执行语句:其中,在对上述第一对象执行语句和第二对象执行语句进行组合时,第一对象执行语句和第二对象执行语句具有组合顺序,组合顺序靠前的对象执行语句,会比组合顺序靠后的对象执行语句优先执行。
其中,可以根据第一对象执行语句和第二对象执行语句的组合顺序,来确定第一对象执行语句和第二对象执行语句在交易测试用例中的位置优先级。组合顺序靠前的对象执行语句比组合顺序靠后的对象执行语句,具有更大的位置优先级。
此处,假设第一对象执行语句在交易测试用例中的位置优先级,大于第二对象执行语句在交易测试用例中的位置优先级,因此,首先目标区块链节点可以触发智能合约通过交易测试用例中的第一测试交易请求、以及上述操作去重函数,来执行第一对象执行语句。其中,第一测试交易请求中可以包括针对第一对象执行语句的语句执行参数,可以将第一测试交易请求所携带的针对第一对象执行语句的语句执行参数,称之为第一语句执行参数。其中,第一语句执行参数指示了对第一对象执行语句所执行的具体操作。例如,第一对象执行语句可以是指示对目标对象进行账户扣款操作的对象执行语句,则第一语句执行参数就可以为具体对目标对象进行账户扣款操作的扣款值是多少,例如扣款值可以是5块钱等。
其中,由于对上述第一对象执行语句进行执行时,该第一对象执行语句为所执行的目标对象的第一个对象执行语句,因此,可以为当前所执行的第一对象执行语句添加初始执行信息,表明当前不对第一对象执行语句进行去重。
接着,当对交易测试用例中的第一对象执行语句执行完成时,目标区块链节点就可以触发智能合约通过交易测试用例中的第一测试交易请求、以及上述操作去重函数,来执行第二对象执行语句。其中,第一测试交易请求中还可以包括针对第二对象执行语句的语句执行参数,可以将第一测试交易请求所携带的针对第二对象执行语句的语句执行参数,称之为第二语句执行参数。其中,第二语句执行参数指示了对第二对象执行语句所执行的具体操作。例如,第二对象执行语句可以是指示对目标对象进行账户进账操作的对象执行语句,则第二语句执行参数就可以为具体对目标对象进行账户进账操作的进账值是多少,例如进账值可以是10块钱等。
此时,由于对第二对象执行语句进行执行时,通过上述为第一对象执行语句所添加的初始执行信息可以判断出,该第二对象执行语句不为所执行的目标对象的第一个对象执行语句,而是为所执行的目标对象的第二个对象执行语句。因此,此时需要对第一对象执行语句和第二对象执行语句进行语句去重。
换句话说,语句去重是指针对一个对象(例如目标对象)的多个对象执行语句进行去重,执行一个对象的第一个对象执行语句时不命中语句去重,例如对上述所执行的目标对象的第一个对象执行语句(即第一对象执行语句)不进行语句去重。执行一个对象的第二个对象执行语句时就要命中语句去重,例如对上述所执行的目标对象的第二个对象执行语句(即第二对象执行语句)进行语句去重。
其中,对第一对象执行语句和第二对象执行语句进行语句去重的过程为:目标区块链节点可以触发智能合约,获取对目标对象执行第一对象执行语句之后的第一对象执行结果。该第一对象执行结果表征了对目标对象执行第一对象执行语句之后,目标对象的当前状态。例如,若目标对象为一个账户对象,对目标对象执行第一对象执行语句,即为对目标对象的账户余额加5,则对目标对象执行第一对象执行语句使得目标对象的账户余额加5之后,目标对象的账户余额变为了100,那么此时目标账户的账户余额100,即为对目标对象执行第一对象执行语句后的第一对象执行结果。
在获取到上述第一对象执行结果之后,目标区块链节点就可以触发智能合约对第一对象执行语句进行去重,即删除第一对象执行语句,而保留第二对象执行语句。这是因为对第一对象执行语句和第二对象执行语句进行语句去重,是要保留第一对象执行语句和第二对象执行语句进行语句中,最新的那个对象执行语句,而第一对象执行语句比第二对象执行语句要优先执行,因此,第二对象执行语句为第一对象执行语句和第二对象执行语句中,最新的那个对象执行语句。而上述获取到的第一对象执行结果,可以用于获取对目标对象执行第二对象执行语句的第二对象执行结果。
例如,若第一对象执行结果为,目标对象的账户余额为100块,对目标对象执行第二对象执行语句即为对目标对象的账户余额加10,因此,对目标对象执行第二对象执行语句即为在第一对象执行结果的基础上,对目标对象的账户余额加10,因此,对目标对象执行第二对象执行语句后,目标对象的账户余额就变为了110。目标账户的账户余额110,即为对目标对象执行第二对象执行语句后的第二对象执行结果。
由于交易测试用例中,可以只包括上述第一对象执行语句和第二对象执行语句,因此,对上述第一对象执行语句和第二对象执行语句进行语句去重之后,即为对交易测试用例中的对象执行语句去重完成。上述删除第一对象执行语句,所保留的第二对象执行语句,即为对交易测试用例中的对象执行语句进行语句去重后,所得到的剩余对象执行语句。可以理解为,对交易测试用例中的对象执行语句进行去重,就是对一个只包括第一交易的区块中的对象执行语句进行去重,该区块中的对象执行语句只包括第一交易中的第一对象执行语句和第二对象执行语句。因此,针对交易测试用例中的对象执行语句的语句去重,只需要进行交易(例如第一交易)内的对象执行语句的语句去重操作,而无需进行不同交易(因为没有不同交易)内的对象执行语句的语句去重操作。
因此,通过上述过程,就得到了对交易测试用例中的对象执行语句进行语句去重后的剩余对象执行语句(即第二对象执行语句)。
请参见图5,图5是本申请提供的一种的执行交易测试用例的场景示意图。如图5所示,目标区块链节点可以是在语句数据集100d中获取到的多个对象执行语句,该多个对象执行语句中包括第一对象执行语句和第二对象执行语句。因此,目标区块链节点获取交易测试用例101d的过程为,目标区块链节点可以将第一对象执行语句和第二对象执行语句设置为是属于第一交易的对象执行语句。目标区块链节点可以获取到针对该第一交易的第一测试交易请求,该第一测试交易请求用于发起第一交易。因此,目标区块链节点通过对第一对象执行语句、第二对象执行语句以及第一测试交易请求进行组合封装,即可得到交易测试用例101d。
对交易测试用例101d的执行过程如区域102d所示。由于在交易测试用例101d中,第一对象执行语句的组合顺序在第二对象执行语句前面,因此,目标区块链节点可以先从第一测试交易请求中获取到第一语句执行参数,并通过该第一语句执行参数执行第一对象执行语句。对第一对象执行语句执行完成后,目标区块链节点就可以从第一测试交易请求中获取到第二语句执行参数。目标区块链节点就可以通过该第二语句执行参数执行第二对象执行语句。
更多的,交易测试用例和区块测试用例是分别独立对双层缓存机制进行测试的,更具体的,每个测试用例对双层缓存机制的测试过程均为独立进行的。下面,描述如何通过区块测试用例,得到剩余对象执行语句:其中,在对上述第三对象执行语句和第四对象执行语句进行组合时,第三对象执行语句和第四对象执行语句也具有组合顺序,组合顺序靠前的对象执行语句,会比组合顺序靠后的对象执行语句优先执行。
其中,可以根据第三对象执行语句和第四对象执行语句的组合顺序,来确定第三对象执行语句和第四对象执行语句在交易测试用例中的位置优先级。组合顺序靠前的对象执行语句比组合顺序靠后的对象执行语句,具有更大的位置优先级。
此处,假设第三对象执行语句在交易测试用例中的位置优先级,大于第四对象执行语句在交易测试用例中的位置优先级,因此,首先目标区块链节点可以触发智能合约通过区块测试用例中的第二测试交易请求、以及上述操作去重函数,来执行第三对象执行语句。其中,第二测试交易请求中可以包括针对第三对象执行语句的语句执行参数,可以将第二测试交易请求所携带的针对第三对象执行语句的语句执行参数,称之为第三语句执行参数。其中,第三语句执行参数指示了对第三对象执行语句所执行的具体操作。例如,第三对象执行语句可以是指示对目标对象进行账户扣款操作的对象执行语句,则第三语句执行参数就可以为具体对目标对象进行账户扣款操作的扣款值是多少,例如扣款值可以是20块钱等。
其中,由于对上述第三对象执行语句进行执行时,该第三对象执行语句为所执行的目标对象的第一个对象执行语句,因此,可以为当前所执行的第三对象执行语句添加初始执行信息,表明当前不对第三对象执行语句进行去重。
接着,当对区块测试用例中的第三对象执行语句执行完成时,目标区块链节点就可以触发智能合约通过区块测试用例中的第三测试交易请求、以及上述操作去重函数,来执行第四对象执行语句。其中,第三测试交易请求中还可以包括针对第四对象执行语句的语句执行参数,可以将第三测试交易请求所携带的针对第四对象执行语句的语句执行参数,称之为第四语句执行参数。其中,第四语句执行参数指示了对第四对象执行语句所执行的具体操作。例如,第四对象执行语句可以是指示对目标对象进行账户进账操作的对象执行语句,则第四语句执行参数就可以为具体对目标对象进行账户进账操作的进账值是多少,例如进账值可以是50块钱等。
此时,由于对第四对象执行语句进行执行时,通过上述为第三对象执行语句所添加的初始执行信息可以判断出,该第四对象执行语句不为所执行的目标对象的第一个对象执行语句,而是为所执行的目标对象的第二个对象执行语句。因此,此时需要对第三对象执行语句和第四对象执行语句进行语句去重。
换句话说,语句去重是指针对一个对象(例如目标对象)的多个对象执行语句进行去重,执行一个对象的第一个对象执行语句时不命中语句去重,例如对上述所执行的目标对象的第一个对象执行语句(即第三对象执行语句)不进行语句去重。执行一个对象的第二个对象执行语句时就要命中语句去重,例如对上述所执行的目标对象的第二个对象执行语句(即第四对象执行语句)进行语句去重。
其中,对第三对象执行语句和第四对象执行语句进行语句去重的过程为:目标区块链节点可以触发智能合约,获取对目标对象执行第三对象执行语句之后的第三对象执行结果。该第三对象执行结果表征了对目标对象执行第三对象执行语句之后,目标对象的当前状态。例如,若目标对象为一个账户对象,对目标对象执行第三对象执行语句,即为对目标对象的账户余额加3,则对目标对象执行第三对象执行语句使得目标对象的账户余额加3之后,目标对象的账户余额变为了123,那么此时目标账户的账户余额123,即为对目标对象执行第三对象执行语句后的第三对象执行结果。
在获取到上述第三对象执行结果之后,目标区块链节点就可以触发智能合约对第三对象执行语句进行去重,即删除第三对象执行语句,而保留第四对象执行语句。这是因为对第三对象执行语句和第四对象执行语句进行语句去重,是要保留第三对象执行语句和第四对象执行语句进行语句中,最新的那个对象执行语句,而第三对象执行语句比第四对象执行语句要优先执行,因此,第四对象执行语句为第三对象执行语句和第四对象执行语句中,最新的那个对象执行语句。而上述获取到的第三对象执行结果,可以用于获取对目标对象执行第四对象执行语句的第四对象执行结果。
例如,若第三对象执行结果为,目标对象的账户余额为123块,对目标对象执行第四对象执行语句即为对目标对象的账户余额加10,即对目标对象执行第四对象执行语句也就是在第三对象执行结果的基础上,对目标对象的账户余额加10。因此,对目标对象执行第二对象执行语句后,目标对象的账户余额就变为了133(即123+10)。目标账户的账户余额133,即为对目标对象执行第四对象执行语句后的第四对象执行结果。
由于交易测试用例中,可以只包括上述第三对象执行语句和第四对象执行语句,因此,对上述第三对象执行语句和第四对象执行语句进行语句去重之后,即为对区块测试用例中的对象执行语句去重完成。上述删除第三对象执行语句,所保留的第四对象执行语句,即为对区块测试用例中的对象执行语句进行语句去重后,所得到的剩余对象执行语句。可以理解为,对区块测试用例中的对象执行语句进行去重,就是对一个包括第二交易和第三交易的区块中的对象执行语句进行去重,该区块中的对象执行语句包括第二交易中的第三对象执行语句、和第三交易中的第四对象执行语句。因此,针对交易测试用例中的对象执行语句的语句去重,只需要进行不同交易(例如第一交易和第二交易)内的对象执行语句的语句去重操作,而无需进行同一个交易(因为一个交易中只有一个对象执行语句)内的对象执行语句的语句去重操作。
因此,通过上述过程,就得到了对区块测试用例中的对象执行语句进行语句去重后的剩余对象执行语句(即第四对象执行语句)。
请参见图6,图6是本申请提供的一种的执行区块测试用例的场景示意图。如图6所示,目标区块链节点可以是在语句数据集100e中获取到的多个对象执行语句,该多个对象执行语句中包括第三对象执行语句和第四对象执行语句。因此,目标区块链节点获取交易测试用例101e的过程为,目标区块链节点可以将第三对象执行语句设置为是属于第二交易的对象执行语句,将第四对象执行语句设置为是属于第三交易的对象执行语句。目标区块链节点可以获取到针对该第二交易的第二测试交易请求以及针对第三交易的第三测试交易请求。其中,第二测试交易请求用于发起第二交易,第三测试交易请求用于发起第三交易。因此,目标区块链节点通过对第三对象执行语句、第四对象执行语句、第二测试交易请求以及第三测试交易请求进行组合封装,即可得到交易测试用例101e。
对区块测试用例101e的执行过程如区域102e所示。由于在区块测试用例101e中,第三对象执行语句的组合顺序在第四对象执行语句前面,因此,目标区块链节点可以先从第二测试交易请求中获取到第三语句执行参数,并通过该第三语句执行参数执行第三对象执行语句。对第三对象执行语句执行完成后,目标区块链节点就可以从第三测试交易请求中获取到第四语句执行参数。目标区块链节点就可以通过该第四语句执行参数执行第四对象执行语句。
步骤S103,根据剩余对象执行语句,生成针对测试用例的测试结果信息;测试结果信息,表征智能合约对测试用例中的对象执行语句的语句去重质量;
具体的,目标区块链节点可以触发智能合约,获取剩余对象执行语句的语句数量。由于通过智能合约对测试用例中的对象执行语句进行语句去重后,是希望一个区块中的一个对象最终只保留最新的一个对象执行语句。因此,也就是希望对测试用例中的对象执行语句进行语句去重后,所得到的剩余对象执行语句的语句数量为1。换句话说,若剩余对象执行语句的语句数量等于1,表明对测试用例中的对象执行语句去重成功,若剩余对象执行语句的语句数量大于1,表明对测试用例中的对象执行语句去重失败。
其中,上述测试结果信息,可以为测试已去重信息或测试未去重信息。该测试已去重信息表明智能合约对测试用例中的对象执行语句去重成功,也就是智能合约针对测试用例中的对象执行语句的语句去重质量好。而该测试未去重信息表明智能合约对测试用例中的对象执行语句去重失败,也就是说明智能合约针对测试用例中的对象执行语句的语句去重质量差。
因此,可以设定一个语句数量阈值,该语句数量阈值可以等于1,当剩余对象执行语句的语句数量大于该语句数量阈值,则上述针对测试用例的测试结果信息就可以为测试未去重信息,当剩余对象执行语句的语句数量等于该语句数量阈值,则上述针对测试用例的测试结果信息就可以为测试已去重信息。
其中,可以通过剩余对象执行语句所触发的函数调用关系,来判断剩余对象执行语句的语句数量。该函数调用关系为在执行该剩余对象执行语句时,所触发的函数调用关系。目标区块链节点可以触发智能合约获取到该函数调用关系的数量(可以称之为调用关系数量),该调用关系数量就可以为剩余对象执行语句的语句数量。换句话说,若剩余对象执行语句有多个,则会存在多个函数调用关系,若剩余对象执行语句只有一个,则只会存在一个函数调用关系。
其中,获取剩余对象执行语句所触发的函数调用关系的过程可以为:目标区块链节点可以触发智能合约,获取当前的已有函数调用关系,该已有函数调用关系也就是当前系统中存在的函数调用关系。该已有函数调用关系中可以包括函数调用参数,该函数调用参数指示了已有函数调用关系所调用的对象。因此,可以将所包含的函数调用参数指示的对象为目标对象的已有函数调用关系,作为剩余对象执行语句所触发的函数调用关系。
请参见图7,图7是本申请提供的一种语句去重的场景示意图。如图7所示,目标区块链节点可以触发智能合约生成交易测试用例100f和区块测试用例101f。首先,描述如何对交易测试用例100f中的对象执行语句进行去重。交易测试用例100f中的交易对象执行语句1即为上述第一对象执行语句,交易对象执行语句2即为上述第二对象执行语句。由于第一对象执行语句和第二对象执行语句为属于某个交易(例如第一交易)的对象执行语句,因此,可以将第一对象执行语句和第二对象执行语句均称之为交易对象执行语句。
其中,交易对象执行语句1和交易对象执行语句2均属于目标对象,首先,智能合约可以执行交易对象执行语句1,由于交易对象执行语句1为所执行的目标对象的第一个对象执行语句,因此,不命中去重,即不对交易对象执行语句1进行语句去重。对交易对象执行语句1执行完成之后,可以执行交易对象执行语句2,由于交易对象执行语句2为所执行的目标对象的第二个对象执行语句,因此,命中去重,即对交易对象执行语句1和交易对象执行语句2进行去重,删除交易对象执行语句1,保留交易对象执行语句2。
对第一交易中的第一对象执行语句和第二对象执行语句2进行语句去重之后,可以将去重所得到第一交易的第二对象执行语句,称之为交易测试用例100f中的区块对象执行语句1。换句话说,可以将对一个交易中的对象执行语句进行去重后所得到的对象执行语句,称之为区块对象执行语句。由于可以理解为交易测试用例100f对应的区块中只有第一交易一个交易,因此,对于不同交易对应的区块对象执行语句不需要进行去重,因为区块对象执行语句只有区块对象执行语句1。因此,对区块对象执行语句1不命中去重,即不对区块对象执行语句1进行语句去重。因此,通过上述过程就实现了对相同交易(第一交易)中的对象执行语句(交易对象执行语句1和交易对象执行语句2)进行语句去重。
通过对交易测试用例100f中的交易对象执行语句1不命中去重、对交易对象执行语句2命中去重、以及对区块对象执行语句1不命中去重的操作,即可得到针对交易测试用例100f的测试已去重信息102f。
接着,描述如何对区块测试用例101f中的对象执行语句进行去重。区块测试用例101f中的交易对象执行语句3即为上述第三对象执行语句,交易对象执行语句4即为上述第四对象执行语句。交易对象执行语句3属于第二交易,交易对象执行语句属于第三交易。
其中,交易对象执行语句3和交易对象执行语句4均属于目标对象,首先,智能合约可以执行交易对象执行语句3,由于交易对象执行语句3为第二交易中所执行的目标对象的第一个交易对象执行语句,因此,不命中去重,即不对交易对象执行语句3进行语句去重。由于第二交易中只存在交易对象执行语句3,因此,可以将对第二交易中的对象执行语句进行语句去重后的交易对象执行语句3,称之为第二交易对应的区块对象执行语句2。换句话说,区块对象执行语句2为对第二交易中的对象执行语句进行去重的结果。由于此时的区块对象执行语句2,为所执行的目标对象的第一个区块对象执行语句(因为当前只有第一交易对应的区块对象执行语句2,而没有其他交易对应的区块对象执行语句),因此不命中去重。
接着,智能合约可以执行交易对象执行语句4,由于交易对象执行语句4为第三交易中所执行的目标对象的第一个交易对象执行语句,因此,不命中去重,即不对交易对象执行语句4进行语句去重。由于第三交易中只存在交易对象执行语句4,因此,可以将对第三交易中的对象执行语句进行语句去重后所得到的交易对象执行语句4,称之为第三交易对应的区块对象执行语句3。换句话说,区块对象执行语句3为对第三交易中的对象执行语句进行去重的结果。由于此时的区块对象执行语句3,为所执行的目标对象的第二个区块对象执行语句(第一个区块对象执行语句为区块对象执行语句2),因此命中去重,可以删除区块对象执行语句2,保留区块对象执行语句3。因此,通过上述过程就实现了对不同交易(第二交易和第三交易)中的对象执行语句(交易对象执行语句3和交易对象执行语句4)进行语句去重。
通过对区块测试用例101f中的交易对象执行语句3不命中去重、对区块对象执行语句2不命中去重、对交易对象执行语句4不命中去重、以及对区块对象执行语句3命中去重的操作,即可得到针对区块测试用例101f的测试已去重信息103f。
更多的,当最终所得到的测试结果信息为上述测试已去重信息时,目标区块链节点可以根据该测试已去重信息生成测试通过提示信息。例如,该测试通过提示信息可以为“对测试用例中的对象执行语句去重成功!”。目标区块链节点可以将该测试通过提示信息同步至测试客户端,该测试客户端可以为,开发人员用于触发智能合约,通过测试用例对针对对象执行语句的语句去重质量进行测试的客户端。测试客户端在获取到该测试通过提示信息之后,可以在客户端页面中输出该测试通过提示信息,以提示开发人员对测试用例中的对象执行语句去重成功。
此外,由于智能合约对测试用例中的对象执行语句进行去重,是通过调用相应的操作去重函数来实现的,因此,当智能合约对测试用例中的对象执行语句去重失败,表明是操作去重函数有问题。该操作去重函数在计算机设备中可以是以代码的形式出现的,操作去重函数出错也就是对应的代码出错。
因此,当测试结果信息为上述测试未去重信息时,目标区块链节点还可以根据测试用例来定位操作去重函数的函数出错位置。例如,目标区块链节点可以根据去重失败的测试用例所触发的交易(例如上述第一交易、第二交易或第三交易)以及该交易中的对象执行语句,来定位操作去重函数的函数出错位置。换句话说,可以通过检查操作去重函数是哪里出了错,导致对测试用例中的对象执行语句去重失败。
更多的,在获取到操作去重函数的函数出错位置之后,目标区块链节点还可以根据该函数出错位置生成去重出错分析报告。该去重出错分析报告中可以描述有操作去重函数在函数出错位置处,具体出错的原因,以及针对该函数出错位置的修正建议,该修正建议指示了可以如何对函数出错位置处的操作去重函数进行调整修正。
因此,目标区块链节点可以根据上述去重出错分析报告,来确定针对操作去重函数的函数调整参数,例如,可以采用去重出错分析报告中的修正建议,来修正操作去重函数。该修正建议中可以包括针对操作去重函数相应的调整参数,目标区块链节点可以将该修正建议中的调整参数作为上述函数调整参数。该函数调整参数为用于修正上述操作去重函数在函数出错位置处的函数参数。
因此,目标区块链节点可以使用该函数调整参数,对操作去重函数进行调整,即将操作去重函数在函数出错位置处的函数参数,调整为函数调整参数,即可得到调整后的操作去重函数。该调整后的操作去重函数,即为优化后的操作去重函数。对操作去重函数进行优化,也就是对智能合约针对对象执行语句的语句去重质量进行优化。
由此可见,本申请提出的方法可以自动生成测试用例,通过智能合约来对该测试用例中的对象执行语句进行语句去重,并且可以通过去重之后所得到的剩余对象执行语句,来得到针对测试用例的测试结果信息,该测试结果信息可以表征智能合约对对象执行语句的语句去重质量。因此,通过本申所请提供的方法,实现了全自动地测试智能合约对对象执行语句的语句去重质量,因此,提高了针对语句去重质量的测试效率。此外,通过自动生成测试用例,并自动生成针对测试用例的测试结果信息,实现了针对测试用例闭环的测试过程,减少了人工参与量,节省了人力成本。
请参见图8,图8是本申请提供的一种基于区块链的数据测试装置的结构示意图。该基于区块链的数据测试装置可以是运行于计算机设备中的一个计算机程序(包括程序代码),例如该基于区块链的数据测试装置为一个应用软件,该基于区块链的数据测试装置可以用于执行本申请实施例提供的方法中的相应步骤。如图8所示,该基于区块链的数据测试装置1可以包括:用例获取模块11、去重模块12和信息生成模块13;
用例获取模块11,用于获取智能合约中的至少两个对象执行语句,对至少两个对象执行语句进行组合,生成测试用例;测试用例中的对象执行语句均属于相同交易或均属于不同交易;测试用例中的对象执行语句用于指示针对目标对象的对象操作;
去重模块12,用于基于智能合约中的操作去重函数,对测试用例中的对象执行语句进行语句去重,得到目标对象的语句去重后的剩余对象执行语句;
信息生成模块13,根据剩余对象执行语句,生成针对测试用例的测试结果信息;测试结果信息,表征智能合约对测试用例中的对象执行语句的语句去重质量。
其中,用例获取模块11、去重模块12和信息生成模块13的具体功能实现方式请参见图3对应的实施例中的步骤S101-步骤S103,这里不再进行赘述。
其中,测试用例包括交易测试用例;至少两个对象执行语句包括第一对象执行语句和第二对象执行语句;
用例获取模块11,包括:第一语句组合单元111、第一交易确定单元112、第一请求获取单元113和第一用例生成单元114;
第一语句组合单元111,用于对第一对象执行语句和第二对象执行语句进行组合,得到第一组合执行语句;
第一交易确定单元112,用于将第一组合执行语句中的第一对象执行语句和第二对象执行语句,确定为属于第一交易的对象执行语句;
第一请求获取单元113,用于获取针对第一交易的第一测试交易请求;
第一用例生成单元114,用于基于第一组合执行语句以及第一测试交易请求,生成交易测试用例。
其中,第一语句组合单元111、第一交易确定单元112、第一请求获取单元113和第一用例生成单元114的具体功能实现方式请参见图3对应的实施例中的步骤S101,这里不再进行赘述。
其中,去重模块12,包括:第一参数获取单元121、第一执行单元122、第二参数获取单元123和第二执行单元124;
第一参数获取单元121,用于当第一对象执行语句在交易测试用例中的位置优先级,大于第二对象执行语句在交易测试用例中的位置优先级时,从交易测试用例中的第一测试交易请求中,获取针对第一对象执行语句的第一语句执行参数;
第一执行单元122,用于基于操作去重函数和第一语句执行参数,执行交易测试用例中的第一对象执行语句,为所执行的第一对象执行语句添加初始执行信息;
第二参数获取单元123,用于当对交易测试用例中的第一对象执行语句执行完成时,从交易测试用例中的第一测试交易请求中,获取针对第二对象执行语句的第二语句执行参数;
第二执行单元124,用于基于操作去重函数和第二语句执行参数,执行交易测试用例中的第二对象执行语句,根据为第一对象执行语句添加的初始执行信息,获取对目标对象执行第一对象执行语句的第一对象执行结果,对第一对象执行语句进行语句去重,将第二对象执行语句确定为剩余对象执行语句;第一对象执行结果用于获取对目标对象执行第二对象执行语句的第二对象执行结果。
其中,第一参数获取单元121、第一执行单元122、第二参数获取单元123和第二执行单元124的具体功能实现方式请参见图3对应的实施例中的步骤S102,这里不再进行赘述。
其中,测试用例包括区块测试用例;至少两个对象执行语句包括第三对象执行语句和第四对象执行语句;
用例获取模块11,包括:第二语句组合单元115、第二交易确定单元116、第二请求获取单元117和第二用例生成单元118;
第二语句组合单元115,用于对第三对象执行语句和第四对象执行语句进行组合,得到第二组合执行语句;
第二交易确定单元116,用于将将第二组合执行语句中的第三对象执行语句,确定为属于第二交易的对象执行语句,将第二组合执行语句中的第四对象执行语句,确定为属于第三交易的对象执行语句;
第二请求获取单元117,用于获取针对第二交易的第二测试交易请求、以及针对第三交易的第三测试交易请求;
第二用例生成单元118,用于基于第二组合执行语句、第二测试交易请求和第三测试交易请求,生成区块测试用例。
其中,第二语句组合单元115、第二交易确定单元116、第二请求获取单元117和第二用例生成单元118的具体功能实现方式请参见图3对应的实施例中的步骤S101,这里不再进行赘述。
其中,去重模块12,包括:第三参数获取单元125、第三执行单元126、第四参数获取单元127和第四执行单元128;
第三参数获取单元125,用于当第三对象执行语句在区域测试用例中的位置优先级,大于第四对象执行语句在区块测试用例中的位置优先级时,从区块测试用例中的第二测试交易请求中,获取针对第三对象执行语句的第三语句执行参数;
第三执行单元126,用于基于操作去重函数和第三语句执行参数,执行区块测试用例中的第三对象执行语句,为所执行的第三对象执行语句添加初始执行信息;
第四参数获取单元127,用于当对区块测试用例中的第三对象执行语句执行完成时,从区块测试用例中的第三测试交易请求中,获取针对第四对象执行语句的第四语句执行参数;
第四执行单元128,用于根据操作去重函数和第四语句执行参数,执行区块测试用例中的第四对象执行语句,根据为第三对象执行语句添加的初始执行信息,获取对目标对象执行第三对象执行语句的第三对象执行结果,对第三对象执行语句进行语句去重,将第四对象执行语句确定为剩余对象执行语句;第三对象执行结果用于获取对目标对象执行第四对象执行语句的第四对象执行结果。
其中,第三参数获取单元125、第三执行单元126、第四参数获取单元127和第四执行单元128的具体功能实现方式请参见图3对应的实施例中的步骤S101,这里不再进行赘述。
其中,测试结果信息包括测试已去重信息和测试未去重信息;
信息生成模块13,包括:语句数量获取单元131、第一信息确定单元132和第二信息确定单元133;
语句数量获取单元131,用于获取剩余对象执行语句的语句数量;
第一信息确定单元132,用于当语句数量大于语句数量阈值时,确定测试结果信息为测试未去重信息;
第二信息确定单元133,用于当语句数量小于或等于语句数量阈值时,确定测试结果为测试已去重信息。
其中,语句数量获取单元131、第一信息确定单元132和第二信息确定单元133的具体功能实现方式请参见图3对应的实施例中的步骤S103,这里不再进行赘述。
其中,语句数量获取单元131,包括:关系获取子单元1311、关系数量获取子单元1312和数量确定子单元1313;
关系获取子单元1311,用于获取剩余对象执行语句所触发的函数调用关系;
关系数量获取子单元1312,用于获取函数调用关系的调用关系数量;
数量确定子单元1313,用于根据调用关系数量,确定剩余对象执行语句的语句数量。
其中,关系获取子单元1311、关系数量获取子单元1312和数量确定子单元1313的具体功能实现方式请参见图3对应的实施例中的步骤S103,这里不再进行赘述。
其中,关系获取子单元1311,包括:关系检测子单元13111和关系确定子单元13112;
关系检测子单元13111,用于检测已有函数调用关系;已有函数调用关系包括函数调用参数;函数调用参数用于指示已有函数调用关系所调用的对象;
关系确定子单元13112,用于当函数调用参数所指示的已有函数调用关系调用的对象为目标对象时,将已有函数调用关系,确定为剩余对象执行语句所触发的函数调用关系。
其中,关系检测子单元13111和关系确定子单元13112的具体功能实现方式请参见图3对应的实施例中的步骤S103,这里不再进行赘述。
其中,上述装置1还包括:提示信息生成模块14和输出模块15;
提示信息生成模块14,用于当测试结果信息为测试已去重信息时,根据测试已去重信息生成测试通过提示信息;
输出模块15,用于将测试通过提示信息同步至测试客户端,以使测试客户端在客户端页面输出测试通过提示信息。
其中,提示信息生成模块14和输出模块15的具体功能实现方式请参见图3对应的实施例中的步骤S103,这里不再进行赘述。
其中,上述装置1还包括:位置定位模块16、报告生成模块17、调整参数确定模块18和函数调整模块19;
位置定位模块16,用于当测试结果信息为测试未去重信息时,根据测试用例,定位操作去重函数的函数出错位置;
报告生成模块17,用于根据函数出错位置,生成去重出错分析报告;
调整参数确定模块18,用于根据去重出错分析报告,确定针对操作去重函数的函数调整参数;
函数调整模块19,用于基于函数调整参数,调整操作去重函数,得到调整后的操作去重函数。
其中,位置定位模块16、报告生成模块17、调整参数确定模块18和函数调整模块19的具体功能实现方式请参见图3对应的实施例中的步骤S103,这里不再进行赘述。
本申请可以获取智能合约中的至少两个对象执行语句,对至少两个对象执行语句进行组合,生成测试用例;测试用例中的对象执行语句用于指示针对目标对象的对象操作;基于智能合约中的操作去重函数,对测试用例中的对象执行语句进行语句去重,得到目标对象的语句去重后的剩余对象执行语句;根据剩余对象执行语句,生成针对测试用例的测试结果信息。由此可见,本申请提出的装置可以自动生成测试用例,通过智能合约来对该测试用例中的对象执行语句进行语句去重,并且可以通过去重之后所得到的剩余对象执行语句,来得到针对测试用例的测试结果信息,该测试结果信息可以表征智能合约对对象执行语句的语句去重质量。因此,通过本申所请提供的装置,实现了全自动地测试智能合约对对象执行语句的语句去重质量,因此,提高了针对语句去重质量的测试效率。
请参见图9,图9是本申请提供的一种计算机设备的结构示意图。如图9所示,计算机设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,计算机设备1000还可以包括:用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(Display)、键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图9所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
在图9所示的计算机设备1000中,网络接口1004可提供网络通讯功能;而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以实现前文图3所对应实施例中对基于区块链的数据测试方法的描述。应当理解,本申请中所描述的计算机设备1000也可执行前文图8所对应实施例中,对基于区块链的数据测试装置1的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,这里需要指出的是:本申请还提供了一种计算机可读存储介质,且计算机可读存储介质中存储有前文提及的基于区块链的数据测试装置1所执行的计算机程序,且计算机程序包括程序指令,当处理器执行程序指令时,能够执行前文,图3所对应实施例中对基于区块链的数据测试方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,上述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖范围。
Claims (15)
1.一种基于区块链的数据测试方法,其特征在于,包括:
获取智能合约中的至少两个对象执行语句,对所述至少两个对象执行语句进行组合,生成测试用例;所述测试用例中的对象执行语句均属于相同交易或均属于不同交易;所述测试用例中的对象执行语句用于指示针对目标对象的对象操作;
基于所述智能合约中的操作去重函数,对所述测试用例中的对象执行语句进行语句去重,得到所述目标对象的语句去重后的剩余对象执行语句;所述操作去重函数基于双层缓存机制所调用,所述至少两个对象执行语句属于同一个区块中的对象执行语句,所述双层缓存机制用于调用所述操作去重函数基于所述测试用例在对所述区块中每个交易分别所属的对象执行语句进行语句去重后,再对所述区块中所述每个交易之间的对象执行语句进行语句去重,所述剩余对象执行语句为所述至少两个对象执行语句中所述目标对象的时间戳最新的对象执行语句;
根据所述剩余对象执行语句,生成针对所述测试用例的测试结果信息;所述测试结果信息,表征所述智能合约对所述测试用例中的对象执行语句的语句去重质量。
2.根据权利要求1所述的方法,其特征在于,所述测试用例包括交易测试用例;所述至少两个对象执行语句包括第一对象执行语句和第二对象执行语句;
所述对所述至少两个对象执行语句进行组合,生成测试用例,包括:
对所述第一对象执行语句和所述第二对象执行语句进行组合,得到第一组合执行语句;
将所述第一组合执行语句中的所述第一对象执行语句和所述第二对象执行语句,确定为属于第一交易的对象执行语句;
获取针对所述第一交易的第一测试交易请求;
基于所述第一组合执行语句以及所述第一测试交易请求,生成所述交易测试用例。
3.根据权利要求2所述的方法,其特征在于,所述基于所述智能合约中的操作去重函数,对所述测试用例中的对象执行语句进行语句去重,得到语句去重后的剩余对象执行语句,包括:
当所述第一对象执行语句在所述交易测试用例中的位置优先级,大于所述第二对象执行语句在所述交易测试用例中的位置优先级时,从所述交易测试用例中的所述第一测试交易请求中,获取针对所述第一对象执行语句的第一语句执行参数;
基于所述操作去重函数和所述第一语句执行参数,执行所述交易测试用例中的所述第一对象执行语句,为所执行的所述第一对象执行语句添加初始执行信息;
当对所述交易测试用例中的所述第一对象执行语句执行完成时,从所述交易测试用例中的所述第一测试交易请求中,获取针对所述第二对象执行语句的第二语句执行参数;
基于所述操作去重函数和所述第二语句执行参数,执行所述交易测试用例中的所述第二对象执行语句,根据为所述第一对象执行语句添加的初始执行信息,获取对所述目标对象执行所述第一对象执行语句的第一对象执行结果,对所述第一对象执行语句进行语句去重,将所述第二对象执行语句确定为所述剩余对象执行语句;所述第一对象执行结果用于获取对所述目标对象执行所述第二对象执行语句的第二对象执行结果。
4.根据权利要求1所述的方法,其特征在于,所述测试用例包括区块测试用例;所述至少两个对象执行语句包括第三对象执行语句和第四对象执行语句;
所述对所述至少两个对象执行语句进行组合,生成测试用例,包括:
对所述第三对象执行语句和所述第四对象执行语句进行组合,得到第二组合执行语句;
将所述第二组合执行语句中的所述第三对象执行语句,确定为属于第二交易的对象执行语句,将所述第二组合执行语句中的所述第四对象执行语句,确定为属于第三交易的对象执行语句;
获取针对所述第二交易的第二测试交易请求、以及针对所述第三交易的第三测试交易请求;
基于所述第二组合执行语句、所述第二测试交易请求和所述第三测试交易请求,生成所述区块测试用例。
5.根据权利要求4所述的方法,其特征在于,所述基于所述智能合约中的操作去重函数,对所述测试用例中的对象执行语句进行语句去重,得到语句去重后的剩余对象执行语句,包括:
当所述第三对象执行语句在所述区块测试用例中的位置优先级,大于所述第四对象执行语句在所述区块测试用例中的位置优先级时,从所述区块测试用例中的所述第二测试交易请求中,获取针对所述第三对象执行语句的第三语句执行参数;
基于所述操作去重函数和所述第三语句执行参数,执行所述区块测试用例中的所述第三对象执行语句,为所执行的所述第三对象执行语句添加初始执行信息;
当对所述区块测试用例中的所述第三对象执行语句执行完成时,从所述区块测试用例中的所述第三测试交易请求中,获取针对所述第四对象执行语句的第四语句执行参数;
根据所述操作去重函数和所述第四语句执行参数,执行所述区块测试用例中的所述第四对象执行语句,根据为所述第三对象执行语句添加的初始执行信息,获取对所述目标对象执行所述第三对象执行语句的第三对象执行结果,对所述第三对象执行语句进行语句去重,将所述第四对象执行语句确定为所述剩余对象执行语句;所述第三对象执行结果用于获取对所述目标对象执行所述第四对象执行语句的第四对象执行结果。
6.根据权利要求1所述的方法,其特征在于,所述测试结果信息为测试已去重信息或测试未去重信息;
所述根据所述剩余对象执行语句,生成针对所述测试用例的测试结果信息,包括:
获取所述剩余对象执行语句的语句数量;
当所述语句数量大于语句数量阈值时,确定所述测试结果信息为所述测试未去重信息;
当所述语句数量小于或等于所述语句数量阈值时,确定所述测试结果为所述测试已去重信息。
7.根据权利要求6所述的方法,其特征在于,所述获取所述剩余对象执行语句的语句数量,包括:
获取所述剩余对象执行语句所触发的函数调用关系;
获取所述函数调用关系的调用关系数量;
根据所述调用关系数量,确定所述剩余对象执行语句的所述语句数量。
8.根据权利要求7所述的方法,其特征在于,所述获取所述剩余对象执行语句所触发的函数调用关系,包括:
检测已有函数调用关系;所述已有函数调用关系包括函数调用参数;所述函数调用参数用于指示所述已有函数调用关系所调用的对象;
当所述函数调用参数所指示的所述已有函数调用关系调用的对象为所述目标对象时,将所述已有函数调用关系,确定为所述剩余对象执行语句所触发的函数调用关系。
9.根据权利要求6所述的方法,其特征在于,所述方法还包括:
当所述测试结果信息为所述测试已去重信息时,根据所述测试已去重信息生成测试通过提示信息;
将所述测试通过提示信息同步至测试客户端,以使所述测试客户端在客户端页面输出所述测试通过提示信息。
10.根据权利要求6所述的方法,其特征在于,所述方法还包括:
当所述测试结果信息为所述测试未去重信息时,根据所述测试用例,定位所述操作去重函数的函数出错位置;
根据所述函数出错位置,生成去重出错分析报告;
根据所述去重出错分析报告,确定针对所述操作去重函数的函数调整参数;
基于所述函数调整参数,调整所述操作去重函数,得到调整后的操作去重函数。
11.一种基于区块链的数据测试装置,其特征在于,包括:
用例获取模块,用于获取智能合约中的至少两个对象执行语句,对所述至少两个对象执行语句进行组合,生成测试用例;所述测试用例中的对象执行语句均属于相同交易或均属于不同交易;所述测试用例中的对象执行语句用于指示针对目标对象的对象操作;
去重模块,用于基于所述智能合约中的操作去重函数,对所述测试用例中的对象执行语句进行语句去重,得到所述目标对象的语句去重后的剩余对象执行语句;所述操作去重函数基于双层缓存机制所调用,所述至少两个对象执行语句属于同一个区块中的对象执行语句,所述双层缓存机制用于调用所述操作去重函数基于所述测试用例在对所述区块中每个交易分别所属的对象执行语句进行语句去重后,再对所述区块中所述每个交易之间的对象执行语句进行语句去重,所述剩余对象执行语句为所述至少两个对象执行语句中所述目标对象的时间戳最新的对象执行语句;
信息生成模块,根据所述剩余对象执行语句,生成针对所述测试用例的测试结果信息;所述测试结果信息,表征所述智能合约对所述测试用例中的对象执行语句的语句去重质量。
12.根据权利要求11所述的装置,其特征在于,所述测试用例包括交易测试用例;所述至少两个对象执行语句包括第一对象执行语句和第二对象执行语句;
所述用例获取模块,包括:
第一语句组合单元,用于对所述第一对象执行语句和所述第二对象执行语句进行组合,得到第一组合执行语句;
第一交易确定单元,用于将所述第一组合执行语句中的所述第一对象执行语句和所述第二对象执行语句,确定为属于第一交易的对象执行语句;
第一请求获取单元,用于获取针对所述第一交易的第一测试交易请求;
第一用例生成单元,用于基于所述第一组合执行语句以及所述第一测试交易请求,生成所述交易测试用例。
13.根据权利要求11所述的装置,其特征在于,所述测试用例包括区块测试用例;所述至少两个对象执行语句包括第三对象执行语句和第四对象执行语句;
所述用例获取模块,包括:
第二语句组合单元,用于对所述第三对象执行语句和所述第四对象执行语句进行组合,得到第二组合执行语句;
第二交易确定单元,用于将所述第二组合执行语句中的所述第三对象执行语句,确定为属于第二交易的对象执行语句,将所述第二组合执行语句中的所述第四对象执行语句,确定为属于第三交易的对象执行语句;
第二请求获取单元,用于获取针对所述第二交易的第二测试交易请求、以及针对所述第三交易的第三测试交易请求;
第二用例生成单元,用于基于所述第二组合执行语句、所述第二测试交易请求和所述第三测试交易请求,生成所述区块测试用例。
14.一种计算机设备,其特征在于,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行权利要求1-10中任一项所述方法的步骤。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令被处理器执行时,执行权利要求1-10任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010916251.XA CN112069067B (zh) | 2020-09-03 | 2020-09-03 | 基于区块链的数据测试方法、装置及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010916251.XA CN112069067B (zh) | 2020-09-03 | 2020-09-03 | 基于区块链的数据测试方法、装置及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112069067A CN112069067A (zh) | 2020-12-11 |
CN112069067B true CN112069067B (zh) | 2021-09-28 |
Family
ID=73665435
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010916251.XA Active CN112069067B (zh) | 2020-09-03 | 2020-09-03 | 基于区块链的数据测试方法、装置及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112069067B (zh) |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9262477B1 (en) * | 2012-06-21 | 2016-02-16 | Pivotal Software, Inc. | Accuracy testing of query optimizers |
EP3791347A4 (en) * | 2018-05-06 | 2022-05-25 | Strong Force TX Portfolio 2018, LLC | METHODS AND SYSTEMS FOR IMPROVING MACHINES AND SYSTEMS THAT AUTOMATE THE EXECUTION OF DISTRIBUTED LEADER AND OTHER TRANSACTIONS IN SPOT AND FUTURES MARKETS FOR ENERGY, COMPUTING, STORAGE AND OTHER RESOURCES |
CN110633200A (zh) * | 2018-06-25 | 2019-12-31 | 富士通株式会社 | 用于测试智能合约的方法和设备 |
CN110912855A (zh) * | 2018-09-17 | 2020-03-24 | 中国信息通信研究院 | 一种基于渗透性测试用例集的区块链架构安全评估方法及系统 |
CN110162470B (zh) * | 2019-04-28 | 2023-08-18 | 创新先进技术有限公司 | 一种区块链的测试方法和装置 |
CN110737584A (zh) * | 2019-08-30 | 2020-01-31 | 深圳壹账通智能科技有限公司 | 基于区块链的业务数据测试方法、装置及计算机设备 |
SG11202010736YA (en) * | 2019-11-08 | 2020-11-27 | Alipay Hangzhou Inf Tech Co Ltd | System and method for blockchain-based decentralized application development |
-
2020
- 2020-09-03 CN CN202010916251.XA patent/CN112069067B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN112069067A (zh) | 2020-12-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11281644B2 (en) | Blockchain logging of data from multiple systems | |
US9268648B1 (en) | System and method for consistency verification of replicated data in a recovery system | |
US9367598B2 (en) | Merging an out of synchronization indicator and a change recording indicator in response to a failure in consistency group formation | |
US9600393B2 (en) | Testing of application service versions on live data | |
CN107644030B (zh) | 分布式数据库数据同步方法、相关装置及系统 | |
US10496618B2 (en) | Managing data replication in a data grid | |
CN109614262B (zh) | 业务校验方法、装置及计算机可读存储介质 | |
CN107209704A (zh) | 检测丢失的写入 | |
CN106610854A (zh) | 一种模型更新方法及装置 | |
US20150286671A1 (en) | Transaction system | |
US20170371916A1 (en) | Database management device, database management method, and storage medium | |
US20140279943A1 (en) | File system verification method and information processing apparatus | |
CN112579550B (zh) | 一种分布式文件系统的元数据信息同步方法及系统 | |
EP3264254B1 (en) | System and method for a simulation of a block storage system on an object storage system | |
CN114579559A (zh) | 数据同步方法及装置、计算机设备、存储介质 | |
CN112069067B (zh) | 基于区块链的数据测试方法、装置及计算机可读存储介质 | |
CN111078418B (zh) | 操作同步方法、装置、电子设备及计算机可读存储介质 | |
CN111625396B (zh) | 备份数据的校验方法、服务器及存储介质 | |
CN114756408A (zh) | 元数据备份恢复方法、装置、电子设备及存储介质 | |
US9424261B2 (en) | Techniques to take clean database file snapshot in an online database | |
CN112699129A (zh) | 一种数据处理系统、方法及装置 | |
CN111460436A (zh) | 一种基于区块链的非结构化数据操作方法和系统 | |
JP5832592B1 (ja) | データ管理装置 | |
US20230102392A1 (en) | Storage system and management method for storage system | |
CN110147355B (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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40035324 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |