CN117251354A - 应用于区块链***的异常测试方法、装置和计算机设备 - Google Patents
应用于区块链***的异常测试方法、装置和计算机设备 Download PDFInfo
- Publication number
- CN117251354A CN117251354A CN202210649099.2A CN202210649099A CN117251354A CN 117251354 A CN117251354 A CN 117251354A CN 202210649099 A CN202210649099 A CN 202210649099A CN 117251354 A CN117251354 A CN 117251354A
- Authority
- CN
- China
- Prior art keywords
- abnormal
- logic code
- blockchain system
- node
- test
- 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
- 230000005856 abnormality Effects 0.000 title claims description 25
- 238000010998 test method Methods 0.000 title description 6
- 238000012360 testing method Methods 0.000 claims abstract description 258
- 230000002159 abnormal effect Effects 0.000 claims abstract description 169
- 238000002347 injection Methods 0.000 claims abstract description 67
- 239000007924 injection Substances 0.000 claims abstract description 67
- 230000006399 behavior Effects 0.000 claims description 96
- 238000000034 method Methods 0.000 claims description 78
- 230000009471 action Effects 0.000 claims description 28
- 238000004088 simulation Methods 0.000 claims description 26
- 238000004590 computer program Methods 0.000 claims description 15
- 206010063659 Aversion Diseases 0.000 claims description 10
- 230000008569 process Effects 0.000 claims description 7
- 238000007619 statistical method Methods 0.000 claims description 7
- 230000007246 mechanism Effects 0.000 claims description 6
- 230000000875 corresponding effect Effects 0.000 description 48
- 238000010586 diagram Methods 0.000 description 20
- 230000006870 function Effects 0.000 description 11
- 230000005540 biological transmission Effects 0.000 description 7
- 230000000903 blocking effect Effects 0.000 description 7
- 238000012545 processing Methods 0.000 description 7
- 206010061619 Deformity Diseases 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 230000003213 activating effect Effects 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 239000000243 solution Substances 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 206010000117 Abnormal behaviour Diseases 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000013100 final test Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 230000003211 malignant effect Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
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/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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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)
- Test And Diagnosis Of Digital Computers (AREA)
Abstract
本申请公开了一种应用于区块链***的异常测试方法、装置和计算机设备,涉及区块链技术领域。测试设备在区块链***的原始逻辑代码中注入异常逻辑代码,生成异常注入后的逻辑代码;其中,异常逻辑代码是用于模拟作恶行为的逻辑代码;将异常注入后的逻辑代码发送给区块链***中的至少一个节点设备;向区块链***中的目标节点设备发送用例执行请求,用例执行请求用于请求目标节点设备基于异常注入后的逻辑代码,执行测试用例;接收目标节点设备发送的执行日志,执行日志中记录有所述测试用例的执行结果。通过将异常逻辑代码和用例结合起来,自动化地进行异常测试,降低了测试成本,自动化程度较高,测试周期较短。
Description
技术领域
本申请实施例涉及区块链技术领域,特别涉及一种应用于区块链***的异常测试方法、装置和计算机设备。
背景技术
区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证其不可篡改和不可伪造的分布式账本。在区块链领域中涉及对作恶行为的测试。
在相关技术中,为了模拟作恶行为,一般采用网络抓包的形式,利用抓包工具过滤区块链协议数据,篡改提案信息,模拟作恶行为。
然而,上述方式中需要提前了解区块链协议数据,并且存在网络拆包、分包、组包和数据包加密的技术风险,自动化程度低且工作量大。
发明内容
本申请实施例提供了一种应用于区块链***的异常测试方法、装置和计算机设备。所述技术方案如下:
根据本申请实施例的一个方面,提供了一种应用于区块链***的异常测试方法,所述方法由测试设备执行,所述方法包括:
在所述区块链***的原始逻辑代码中注入异常逻辑代码,生成异常注入后的逻辑代码;其中,所述异常逻辑代码是用于模拟作恶行为的逻辑代码;
将所述异常注入后的逻辑代码发送给所述区块链***中的至少一个节点设备;
向所述区块链***中的目标节点设备发送用例执行请求,所述用例执行请求用于请求所述目标节点设备基于所述异常注入后的逻辑代码,执行测试用例;
接收所述目标节点设备发送的执行日志,所述执行日志中记录有所述测试用例的执行结果。
根据本申请实施例的一个方面,提供了一种应用于区块链***的异常测试方法,所述区块链***包括多个节点设备,所述方法由所述多个节点设备中的目标节点设备执行,所述方法包括:
接收测试设备发送的异常注入后的逻辑代码,所述异常注入后的逻辑代码是在所述区块链***的原始逻辑代码中注入异常逻辑代码后生成的,所述异常逻辑代码是用于模拟作恶行为的逻辑代码;
接收所述测试设备发送的用例执行请求,所述用例执行请求用于请求所述目标节点设备基于所述异常注入后的逻辑代码,执行测试用例;
根据所述用例执行请求,基于所述异常注入后的逻辑代码执行所述测试用例;
向所述测试设备发送所述测试用例的执行日志,所述执行日志中记录有所述测试用例的执行结果。
根据本申请实施例的一个方面,提供了一种应用于区块链***的异常测试装置,所述装置包括:
代码注入模块,用于在所述区块链***的原始逻辑代码中注入异常逻辑代码,生成异常注入后的逻辑代码;其中,所述异常逻辑代码是用于模拟作恶行为的逻辑代码;
代码发送模块,用于将所述异常注入后的逻辑代码发送给所述区块链***中的至少一个节点设备;
请求发送模块,用于向所述区块链***中的目标节点设备发送用例执行请求,所述用例执行请求用于请求所述目标节点设备基于所述异常注入后的逻辑代码,执行测试用例;
日志接收模块,用于接收所述目标节点设备发送的执行日志,所述执行日志中记录有所述测试用例的执行结果。
根据本申请实施例的另一个方面,提供了一种应用于区块链***的异常测试装置,所述装置包括:
代码接收模块:用于接收测试设备发送的异常注入后的逻辑代码,所述异常注入后的逻辑代码是在所述区块链***的原始逻辑代码中注入异常逻辑代码后生成的,所述异常逻辑代码是用于模拟作恶行为的逻辑代码;
请求接收模块,用于接收所述测试设备发送的用例执行请求,所述用例执行请求用于请求目标节点设备基于所述异常注入后的逻辑代码,执行测试用例;
用例执行模块,用于根据所述用例执行请求,基于所述异常注入后的逻辑代码执行所述测试用例;
日志发送模块,用于向所述测试设备发送所述测试用例的执行日志,所述执行日志中记录有所述测试用例的执行结果。
根据本申请实施例的一个方面,提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有计算机程序,所述计算机程序由所述处理器加载并执行以实现上述测试设备侧的方法,或上述目标节点设备侧的方法。
根据本申请实施例的一个方面,提供了一种计算机可读存储介质,所述可读存储介质中存储有计算机程序,所述计算机程序由处理器加载并执行以实现上述测试设备侧的方法,或上述目标节点设备侧的方法。
根据本申请实施例的一个方面,提供了一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该终端设备执行上述测试设备侧的方法,或上述目标节点设备侧的方法。
本申请实施例提供的技术方案可以包括如下有益效果:
通过在区块链***的源代码中注入作恶行为对应的异常逻辑代码,生成异常注入后的逻辑代码,将异常注入后的逻辑代码发送给节点设备,节点设备基于异常注入后的逻辑代码来执行测试用例,使得用例可以和异常逻辑代码结合起来,对于不同的用例可以通过驱动不同的作恶行为对应的异常逻辑代码,来模拟多种异常场景,而不必对于每个用例都进行一次异常逻辑代码的注入,降低了测试成本,自动化程度较高。
附图说明
图1是本申请一个实施例提供的分布式***应用于区块链***的示意图;
图2是本申请一个实施例提供的应用于区块链***的异常测试方法的流程图;
图3是本申请另一个实施例提供的应用于区块链***的异常测试方法的流程图;
图4是本申请一个实施例提供的异常逻辑代码注入的示意图;
图5是本申请另一个实施例提供的应用于区块链***的异常测试方法的流程图;
图6是本申请另一个实施例提供的应用于区块链***的异常测试方法的流程图;
图7是本申请另一个实施例提供的应用于区块链***的异常测试方法的流程图;
图8是本申请一个实施例提供的中间文件的示意图;
图9是本申请一个实施例提供的用例执行请求的示意图;
图10是本申请一个实施例提供的应用于区块链***的异常测试方法的框图;
图11是本申请一个实施例提供的应用于区块链***的异常测试方法的具体实施环境的示意图;
图12是本申请另一个实施例提供的应用于区块链***的异常测试方法的具体实施环境的示意图;
图13是本申请一个实施例提供的应用于区块链***的异常测试装置的框图;
图14是本申请另一个实施例提供的应用于区块链***的异常测试装置的框图;
图15是本申请另一个实施例提供的应用于区块链***的异常测试装置的框图;
图16是本申请另一个实施例提供的应用于区块链***的异常测试装置的框图;
图17是本申请一个实施例提供的计算机设备的结构框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在介绍本申请技术方案之前,先对本申请涉及的一些背景技术知识进行介绍说明。以下相关技术作为可选方案与本申请实施例的技术方案可以进行任意结合,其均属于本申请实施例的保护范围。本申请实施例包括以下内容中的至少部分内容。
记账节点:又叫出块节点、Leader(领导)节点,在区块链中,每个打包周期内,需要记账节点将若干交易列表打包成区块结构,并广播给其他节点共识,记账节点也就是生成区块并发起提案的节点。
区块链:一种由多方共同维护,使用密码学保证传输和访问安全,能够实现数据一致存储、难以篡改、防止抵赖的记账技术,也称为分布式账本技术。
BFT(Byzantine Fault Tolerance,拜占庭容错)共识:拜占庭容错技术是一类分布式计算领域的容错技术,假设分布式***拥有n台节点,并假设整个***拜占庭节点不超过m台(n≥3m+1),则整个***可正常运行,即容许n/3个节点出现异常。
提案:在区块链生命周期的开始,记账节点扫描当前节点的交易池,当交易池列表不为空时,触发生成区块提案,提案消息包括区块高度、区块头、merkle(默克尔)根、交易信息等,提案消息广播给其他节点后完成BFT共识。
共识算法:就是解决对某一提案(目标,投票等各种协作工作),大家达成一致意见的过程。
FailPoint(故障模拟工具):是FreeBSD(一种类尤尼斯操作***)failpoints(故障模拟工具)的Golang(Go语言)实现,可以在代码中注入错误或异常行为,用于各种复杂***中模拟错误处理来提高***的容错性、正确性和稳定性。
REQ(软件研发提测流程管理平台):用于管理软件版本开发、提测、缺陷提交、回归测试、发布整个生命周期。
本申请实施例涉及的***可以是由测试设备(测试设备可以是接入网络中的任意形式的计算机设备,如服务器、用户终端设备)、多个节点(每个节点对应到一个节点设备,节点设备可以是接入网络中的任意形式的计算机设备,如服务器、用户终端设备)通过网络通信的形式连接形成的分布式***。
以分布式***为区块链***为例,参见图1,图1是本申请实施例提供的分布式***100应用于区块链***的一个可选的结构示意图,由多个节点200和至少一个测试设备300形成,节点200之间形成组成的点对点(P2P,Peer To Peer)网络,P2P协议是一个运行在传输控制协议(TCP,Transmission Control Protocol)协议之上的应用层协议。在分布式***中,任何机器如服务器、终端设备都可以加入而成为节点,节点包括硬件层、中间层、操作***层和应用层。
对于区块链***中的每个节点,均具有与其对应的节点标识,而且区块链***中的每个节点均可以存储有区块链***中其他节点的节点标识,以便后续根据其他节点的节点标识,将生成的区块广播至区块链***中的其他节点。每个节点中可维护一个如下表所示的节点标识列表,将节点名称和节点标识对应存储至该节点标识列表中。其中,节点标识可为IP(Internet Protocol,网络之间互联的协议)地址以及其他任一种能够用于标识该节点的信息,表1中仅以IP地址为例进行说明。
表1
节点名称 | 节点标识 |
节点1 | 117.xxx.xxx.xxx |
节点2 | 117.xxx.xxx.xxx |
… | … |
节点N | 119.xxx.xxx.xxx |
参见图1示出的区块链***中各节点的功能,涉及的功能包括:
1)路由,节点具有的基本功能,用于支持节点之间的通信。
节点除具有路由功能外,还可以具有以下功能:
2)应用,用于部署在区块链中,根据实际业务需求而实现特定业务,记录实现功能相关的数据形成记录数据,在记录数据中携带数字签名以表示任务数据的来源,将记录数据发送到区块链***中的其他节点,供其他节点在验证记录数据来源以及完整性成功时,将记录数据添加到临时区块中。
3)区块链,包括一系列按照产生的先后时间顺序相互接续的区块(Block),新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链***中节点提交的记录数据。
在一些实施例中,测试设备是客户端,客户端发送交易给节点,节点通过P2P网络广播交易到其他节点,共识机制随机选出记账节点,记账节点将若干交易列表打包组装成区块结构,生成区块提案消息,并广播给其他节点,若交易列表为空,则打包成空块广播出去;其他节点收到区块后,验证区块内的交易,并广播对提案的投票消息;针对该区块达成BFT共识后,提交该区块到区块链存储层,开始下一轮选举和共识。在典型的基于BFT共识的区块链网络中,由记账节点加载交易池的交易列表,构造区块提案后,将提案广播给其他节点,其他节点收到区块提案后进行验证,可以投赞成票或反对票,当节点对区块提案投反对票时,各个节点收集对提案的投票信息,验证对区块提案投赞成票的票数是否大于2/3节点数,如果大于则提交区块到本节点,如果小于2/3节点数,则区块链完成不了BFT共识,区块链运行状态异常,并阻塞。当网络处于中间人攻击的不安全状态下,可能会对消息进行篡改,进而影响共识状态。正是因为中间人可能会攻击网络,因为出现了针对区块链作恶行为的测试。
在一些实施例中,为了模拟中间人攻击,采用网络抓包的形式,利用抓包工具获取数据包,过滤掉协议数据,篡改其中的提案信息(包括构造非法提案,中间人真实签名等等),达到篡改攻击的目的。然而,这种实现方式工作量大,需提前了解区块链协议数据,并且存在网络拆包、分包、组包和package(数据包)加密的技术风险,这种异常测试方法自动化程度低,工作量大,精准性差,也没有明确的日志可以查询。同时,还存在丢失数据包的风险。
在一些实施例中,为了模拟中间人攻击,采用静态注入的形式进行异常测试。将异常逻辑代码注入区块链原始逻辑代码,直接进行编译,模拟作恶行为,但是这种静态的异常测试方式对于每一个用例都必须进行一次异常逻辑代码的注入以及代码的编译,自动化程度较低,与用例的结合性较差,成本相对较高。也正因为对于每个用例都需要重新注入异常逻辑代码,所以触发用例执行所需要的时间较长。
基于此,本申请实施例提供了一种应用于区块链***的异常测试方法,通过将异常逻辑代码注入到区块链的源代码,并对其进行编译生成可执行文件,并将可执行文件发送至每一个节点设备,节点设备可以调用异常逻辑代码的API(Application ProgramInterface,应用程序编程接口),来驱动异常逻辑代码,当节点设备执行用例时,基于异常驱动后的可执行文件,执行用例,当用例执行完毕之后,节点设备停止调用异常逻辑代码的API。也就是说,对于每一个用例,节点设备都可以通过调用异常逻辑代码的API来自动化地驱动目标异常逻辑代码,并且在用例执行完毕之后,还可以停止调用异常逻辑代码的API。因此,本申请实施例提供的技术方案,与用例的结合性较好,自动化程度较高,准确性较高。
请参考图2,其示出了本申请一个实施例提供的应用于区块链***的异常测试方法的流程图。该方法可应用于图1所示的分布式***中,该方法各步骤的执行主体可以是测试设备。该方法可以包括如下几个步骤(310~340)中的至少一个步骤。
步骤310,在区块链***的原始逻辑代码中注入异常逻辑代码,生成异常注入后的逻辑代码;其中,所述异常逻辑代码是用于模拟作恶行为的逻辑代码。
作恶行为:在区块链***中存在中间人(第三方)攻击,这些攻击行为可以统称为作恶行为。作恶行为包括但不限于以下至少一种:篡改提案信息、模拟中间人签名、构造非法提案等等。在一些实施例中,每种作恶行为对应于不同的异常逻辑代码。
在一些实施例中,测试设备获取到区块链***的原始逻辑代码,并将用于模拟作恶行为的逻辑代码(异常逻辑代码)注入到原始逻辑代码中,生成异常注入后的逻辑代码。
在一些实施例中,异常注入后的逻辑代码是原始逻辑代码+异常逻辑代码的形式;在一些实施例中,异常注入后的逻辑代码不是简单的原始逻辑代码+异常逻辑代码的形式,而是对于原始逻辑代码+异常逻辑代码再次进行编译之后得到的。
步骤320,将异常注入后的逻辑代码发送给区块链***中的至少一个节点设备。
在一些实施例中,区块链***中包括多个节点设备,将异常注入后的逻辑代码发送给区块链***中的多个节点设备。可选地,将异常注入后的逻辑代码发送给区块链***中的全部节点设备。可选地,将异常注入后的逻辑代码发送给区块链***中的特定部分的节点设备。
在一些实施例中,区块链***中包括a节点设备、b节点设备、c节点设备,可选地,将异常注入后的逻辑代码发送给区块链***中的a节点设备、b节点设备、c节点设备。可选地,将异常注入后的逻辑代码发送给区块链***中的a节点设备、b节点设备、c节点设备中的任意一个设备。可选地,将异常注入后的逻辑代码发送给区块链***中的a节点设备、b节点设备、c节点设备中的任意两个设备。
在一些实施例中,为了模拟“篡改提案信息”这一作恶行为,将“篡改提案信息”这一作恶行为对应的异常逻辑代码注入到区块链***的原始逻辑代码中,生成异常注入后的逻辑代码,并将异常注入后的逻辑代码发送给区块链***中的一半数量的节点设备。
在一些实施例中,为了模拟“构造非法提案”这一作恶行为,将“构造非法提案”这一作恶行为对应的异常逻辑代码注入到区块链***的原始逻辑代码中,生成异常注入后的逻辑代码,并将异常注入后的逻辑代码发送给区块链***中的全部节点设备。
步骤330,向区块链***中的目标节点设备发送用例执行请求,用例执行请求用于请求目标节点设备基于异常注入后的逻辑代码,执行测试用例。
测试用例:对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。在一些实施例中,测试用例是对区块链***进行测试任务的描述。在一些实施例中,用例是一种读写操作,可选地,测试用例是查询任务,可选地,测试用例是合约部署任务。
目标节点设备是区块链***中的至少一个节点设备。在一些实施例中,区块链***中包括a节点设备、b节点设备、c节点设备,可选地,目标节点设备是a节点设备,测试用例是查询区块链***中的节点数量,测试设备向区块链***中的a节点设备发送用例执行请求,用于请求a节点设备基于异常注入后的逻辑代码,执行“查询区块链***中的节点数量”这一测试用例。可选地,目标节点设备是b节点设备,测试用例是在区块链***中部署合约h,测试设备向区块链***中的b节点设备发送用例执行请求,用于请求b节点设备基于异常注入后的逻辑代码,执行“在区块链***中部署合约h”这一测试用例。在一些实施例中,根据区块链***的待测试任务,生成测试用例。可选地,当区块链***需要执行查询任务时,查询任务也就是待测试任务,根据查询任务生成测试用例。可选地,当区块链***要进行合约部署时,合约部署也就是待测试任务,根据合约部署任务生成测试用例。
步骤340,接收目标节点设备发送的执行日志,执行日志中记录有测试用例的执行结果。
执行日志反映节点在执行测试用例时具体的运行情况。测试设备接收目标节点设备发送的执行日志,在一些实施例中,测试设备可以根据执行日志的具体记录分析每个节点中是否出现运行错误。
在一些实施例中,测试设备接收a节点设备发送的执行日志,执行日志中记录有“查询区块链***中的节点数量”这一测试用例的执行结果。在一些实施例中,测试设备接收b节点设备发送的执行日志,执行日志中记录有“在区块链***中部署合约h”这一测试用例的执行结果。
本申请实施例提供的技术方案,通过在区块链***的原始代码中注入异常逻辑代码,并将异常注入后的逻辑代码发送给节点设备,并且给目标节点设备发送用例执行请求,请求目标节点设备基于异常注入后的逻辑代码执行测试用例,使得可以让区块链***中的不同的节点设备基于注入的不同的异常逻辑代码执行不同的测试用例,提高了异常注入的灵活性以及精确性。进一步地,目标节点设备还能将测试用例的执行结果发送给测试设备,使得测试设备能够根据执行日志分析具体的区块链节点情况,排除故障。
请参考图3,其示出了本申请另一个实施例提供的应用于区块链***的异常测试方法的流程图。该方法可应用于图1所示的分布式***中,该方法各步骤的执行主体可以是测试设备。该方法可以包括如下几个步骤(410~480)中的至少一个步骤。
步骤410,根据异常逻辑代码对应的作恶行为,确定原始逻辑代码中的插桩点。
插桩点就是需要注入异常逻辑代码的位置。原始逻辑代码是区块链***的运行代码,每个作恶行为也对应不同的位置,在注入异常逻辑代码时,也需要注意代码的位置,在合适的位置注入异常逻辑代码,才不会引起区块链***运行的混乱。在一些实施例中,作恶行为是“篡改提案”,在原始逻辑代码中找到提案的位置,将提案所在的位置确定为插桩点。
步骤420,在插桩点注入异常逻辑代码,生成异常注入后的逻辑代码。
在一些实施例中,区块链***的原始逻辑代码中需要模拟多个作恶行为,因此需要注入多个异常逻辑代码。在一些实施例中,需要模拟三个作恶行为,因此在区块链原始逻辑代码中有三个插桩点,每个插桩点注入不同作恶行为对应的异常逻辑代码,生成异常注入后的逻辑代码。
在一些实施例中,作恶行为是“篡改提案信息”,在原始逻辑代码中找到提案的位置,将提案所在的位置确定为插桩点,并在插桩点注入“篡改提案”对应的异常逻辑代码。参考图4,其示出了一种可能的异常逻辑代码注入的示意图。400是截取的原始代码中的一段(图4中的代码仅作为示例,并不是实际的代码),其中401表示的是注入的“篡改提案信息”对应的异常逻辑代码,401所在的位置也就是“篡改提案信息”对应的异常逻辑代码在原始逻辑代码400中的插桩点。
步骤430,对异常注入后的逻辑代码进行编译,生成可执行文件。
在一些实施例中,可执行文件是通过编译之后能够被节点设备所运行的文件。在一些实施例中,节点设备可以驱动可执行文件中的不同作恶行为对应的异常逻辑代码。
步骤440,将可执行文件发送给区块链***中的至少一个节点设备。
在一些实施例中,区块链***中包括a节点设备、b节点设备、c节点设备,可选地,将可执行文件发送给区块链***中的全部节点设备,也即发送给a节点设备、b节点设备、c节点设备。可选地,将可执行文件发送给区块链***中的部分节点设备,可选地,将可执行文件发送给区块链***中的a节点设备和b节点设备。
步骤450,根据异常模拟场景,从至少一个节点设备中,确定模拟作恶行为的目标节点设备。
在异常模拟场景为单节点异常场景的情况下,从至少一个节点设备中,确定模拟作恶行为的一个节点设备,作为目标节点设备,即此时目标节点设备的数量为一个;或者,在异常模拟场景为多节点异常场景的情况下,从至少一个节点设备中,确定模拟作恶行为的多个节点设备,作为目标节点设备,即此时目标节点设备的数量为多个。
在一些实施例中,异常模拟场景为单节点异常场景。区块链***中包括a节点设备、b节点设备、c节点设备。将可执行文件发送给区块链***中的全部节点设备,也即a节点设备、b节点设备、c节点设备,从a节点设备、b节点设备、c节点设备中确定一个节点设备作为目标节点设备。
在一些实施例中,异常模拟场景为多节点异常场景。区块链***中包括a节点设备、b节点设备、c节点设备。将可执行文件发送给区块链***中的全部节点设备,也即a节点设备、b节点设备、c节点设备,从a节点设备、b节点设备、c节点设备中确定多个节点设备作为目标节点设备。可选地,多节点异常场景是两个节点异常场景,也即从a节点设备、b节点设备、c节点设备中确定两个节点设备作为目标节点设备。
在一些实施例中,异常模拟场景为多节点异常场景。根据区块链***中参与测试用例执行的节点设备的总数量,确定模拟作恶行为的节点设备的数量N,N为大于1的整数。从至少一个节点设备中,确定N个节点设备,作为目标节点设备。在可能的实施例中,确定模拟作恶行为的节点设备的数量为2,将可执行文件发送给6个节点设备,从6个节点设备中确定出2个需要模拟作恶行为的节点设备作为目标节点设备。
在一些实施例中,根据区块链***中参与所述测试用例执行的节点设备的总数量和共识达成条件,确定模拟作恶行为的节点设备的数量。其中,共识达成条件是指区块链***所采用的投票共识机制针对节点设备的数量要求。在一些实施例中,基于拜占庭共识场景中作恶节点的数量小于节点设备的总数量的三分之一的场景,共识达成条件是指作恶节点的数量小于节点设备的总数量的三分之一,确定模拟作恶行为的节点设备的数量小于参与所述测试用例执行的节点设备的总数量的三分之一。在一些实施例中,基于拜占庭共识场景中作恶节点大于节点设备的总数量的三分之二的场景,共识达成条件是指作恶节点的数量大于节点设备的总数量的三分之二,确定模拟作恶行为的节点设备的数量大于参与所述测试用例执行的节点设备的总数量的三分之二。在一些实施例中,基于拜占庭共识场景中作恶节点的数量小于节点设备的总数量的三分之二且大于节点设备的总数量的三分之一的场景,共识达成条件是指作恶节点的数量大于节点设备的总数量的三分之一而小于节点设备的总数量的三分之二,确定模拟作恶行为的节点设备的数量小于参与所述测试用例执行的节点设备的总数量的三分之二而大于总数量的三分之一。
在一些实施例中,为了模拟拜占庭共识场景中作恶节点的数量小于节点设备的总数量的三分之一的场景,将可执行文件发送给3N+1个节点设备,从3N+1个节点设备中确定出N个目标节点设备,用于模拟作恶行为。在一些实施例中,为了模拟拜占庭共识场景中作恶节点的数量大于节点设备的总数量三分之二的场景,从3N+1个节点设备中确定出2N+1个目标节点设备,用于模拟作恶行为。在一些实施例中,为了模拟拜占庭共识场景中作恶节点小于节点设备的总数量三分之二且大于节点设备的总数量的三分之一的场景,从3N+1个节点设备中确定出小于2N+1且大于N个的目标节点设备,用于模拟作恶行为。可选地,参与所述测试用例执行的节点设备的总数量为100,为了模拟拜占庭共识场景中作恶节点的数量小于节点设备的总数量的三分之一的场景,将30个节点设备确定为目标节点设备,为了模拟拜占庭共识场景中作恶节点大于节点设备的总数量的三分之二的场景,将70个节点设备确定为目标节点设备。为了模拟拜占庭共识场景中作恶节点的数量小于节点设备的总数量的三分之二且大于节点设备的总数量的三分之一的场景,将50个节点设备确定为目标节点设备。
在一些实施例中,对于所有的节点设备配置设备信息。在一些实施例中,设备信息是节点设备标识。每一个节点设备都配置有设备信息,基于配置好的设备信息将可执行文件下发给至少一个节点设备。基于确定好的模拟作恶的目标节点设备,根据其设备信息,可以进一步有指向性地触发作恶行为对应的异常逻辑代码。
本申请实施例提供的技术方案,可以使得区块链***中的部分节点设备作为目标节点设备,对于目标节点设备来模拟作恶行为,也即可以控制对于任意设备进行模拟作恶行为,实现了较高程度的异常测试的自动化。
步骤460,从多种不同的作恶行为中,确定目标节点设备需要模拟的目标作恶行为。
目标作恶行为是多种不同的作恶行为中的至少一种,在一些实施例中,目标作恶行为是篡改提案信息、模拟中间人签名、构造非法提案等中的至少一种。在一些实施例中,目标作恶行为是“篡改提案信息”。在一些实施例中,为了使得目标节点设备能够驱动“篡改提案信息”这一作恶行为对应的异常逻辑代码,测试设备向目标节点设备还发送一个指示信息,所述指示信息用于指示目标节点设备驱动何种作恶行为对应的异常逻辑代码。在一些实施例中,指示信息随着步骤470中的用例执行请求一起发送给目标节点设备,在一些实施例中,指示信息先由测试设备发送给目标节点设备,随后测试设备才发送不包含指示信息的用例执行请求。本申请实施例对于指示信息的类型以及发送的时间先后顺序不作限定。
本申请实施例提供的技术方案,通过先将多个作恶行为对应的异常逻辑代码注入到区块链***的源代码,并且生成可以被节点设备执行的可执行文件,同时测试设备也可以通过发送指示信息的方式来指定区块链***需要模拟的目标作恶行为,也即同时注入多个作恶行为,但并不都进行模拟,而是进一步通过指定的方式,来使得区块链设备模拟对应的作恶行为,本申请对于指示信息的形式不作限定,可以是文字形式也可以是对于每段异常逻辑代码进行标号,以发送标号的形式来指示测试设备模拟对应的作恶行为。当一种作恶行为模拟结束之后,还可以停止模拟该作恶行为,在测试设备下一次发送指示信息时,继续模拟其他作恶行为。
与相关技术不同的是,相关技术中对于每种作恶行为的模拟都是即时的,也即模拟完一种作恶行为之后,如果还想继续模拟第二种作恶行为,需要将第二种作恶行为的异常逻辑代码重新注入到区块链***的源代码中,再次进行编译,生成可以被区块链***执行的文件,因此本申请提供的技术方案用来进行异常测试所需要花费的时间更少,测试周期更短。
进一步地,相关技术中还通过抓包工具对于数据包进行拆包、重新组包、发送篡改后的数据包的方式来进行模拟作恶行为,此种方式需要较多次的加密解密工作,在编解码过程很可能丢失部分数据,导致最终的测试结果不准确,而本申请实施例提供的技术方案,通过一次性注入多种作恶行为对应的异常逻辑代码,在模拟不同作恶行为的时候,由测试设备给区块链***中的目标节点设备发送指示信息,指示目标节点设备模拟目标作恶行为,而不需要每次都进行编解码工作,因此本申请实施例提供的技术方案,其异常测试的准确度相对较高。
步骤470,向区块链***中的目标节点设备发送用例执行请求,用例执行请求中还包括目标作恶行为的指示信息。
在一些实施例中,目标作恶行为的指示信息包括在用例执行请求中,由测试设备发送给目标节点设备。
步骤480,接收目标节点设备发送的执行日志,执行日志中记录有测试用例的执行结果。
在可能的实施例中,根据区块链***中参与测试用例执行的各个节点设备分别上报的执行日志,对各个节点设备针对测试用例的执行结果进行统计分析。根据统计分析的结果,生成测试报告。
在一些实施例中,将可执行文件发送给3N+1个节点设备,从3N+1个节点设备中确定出N个目标节点设备,用于模拟作恶行为。在一些实施例中,接收N个目标节点设备发送的执行日志,也同时接收其他节点发送的执行日志,并且还获取整个区块链的BFT共识场景的结果。在一些实施例中,整个区块链的BFT共识场景的结果是指判断区块链在设置了N个目标节点设备模拟作恶之后整个区块链处于畅通状态还是阻塞状态,畅通状态是指整个区块链***可以正常运行,而阻塞状态是指区块链***无法正常运行。在获取了整个区块链的BFT共识场景的结果之后,若区块链处于阻塞状态,则获取每个目标节点设备的执行日志。因为目标节点设备仅占运行节点设备的不到三分之一的数量,按照预期,整个区块链的BFT共识场景的结果应该是畅通的,但是如果出现了阻塞的情况,则说明节点中出现了其他问题,那么基于每个节点设备的执行日志,可以定位到具体发生问题的节点设备以及对应的程序,进而可以对程序进行修改,得到修改后的区块链的原始逻辑代码。
在一些实施例中,从3N+1个节点设备中确定出2N+1个目标节点设备,用于模拟作恶行为。按照预期,当区块链***中出现了2/3以上多数的模拟作恶的目标节点设备,则整个区块链***处于阻塞状态。若最终的整个区块链的BFT共识场景的结果是阻塞状态,则符合预期,同时可以进一步查询每个目标节点设备的执行日志,判断是否和预期的作恶行为相匹配。
在一些实施例中,从3N+1个节点设备中确定出小于2N+1且大于N个的目标节点设备,用于模拟作恶行为。同样的,可以根据整个区块链的BFT共识场景的结果以及每个节点设备的执行日志,进行统计分析,确定最终出现问题的节点设备,判断是否出现了有其他作恶行为的节点,并生成测试报告。
在一些实施例中,目标节点设备的确定方式是随机确定的。在一些实施例中,测试设备随机从3N+1个节点设备中确定出N个目标节点设备,并且根据确定出来的N个目标节点设备的节点标识,向对应的目标节点设备发送指示信息,用于指示目标节点设备调用指定作恶行为对应的异常逻辑代码。
本申请实施例提供的技术方案,通过覆盖了所有的拜占庭共识场景(目标节点设备数量大于总节点设备数量的2/3,目标节点设备数量小于总节点设备数量的1/3,以及二者之间),同时可以指定具体的作恶行为,将用例与异常结合起来,可以在区块链中自动化地注入异常,节约了异常测试的成本,同时提高了异常测试的自动化程度。
请参考图5,其示出了本申请另一个实施例提供的应用于区块链***的异常测试方法的流程图。该方法可应用于图1所示的分布式***中,该方法各步骤的执行主体可以是节点对应的节点设备。该方法可以包括如下几个步骤(510~540)中的至少一个步骤。
步骤510,接收测试设备发送的异常注入后的逻辑代码,异常注入后的逻辑代码是在区块链***的原始逻辑代码中注入异常逻辑代码后生成的,异常逻辑代码是用于模拟作恶行为的逻辑代码。
具体的异常注入后的逻辑代码在上文实施例中已作了较为详细的说明,在此不作赘述。
步骤520,接收测试设备发送的用例执行请求。
具体的用例执行请求在上文实施例中已作了较为详细的说明,在此不作赘述。
步骤530,根据用例执行请求,基于异常注入后的逻辑代码执行测试用例。
在一些实施例中,测试用例是所述用例执行请求中的用例信息生成的。在一些实施例中,当用例执行请求是请求执行“查询区块链***中的节点数量”这一用例,则根据“查询区块链***中的节点数量”这一用例信息,生成测试用例,并将测试用例发送给目标节点设备。在一些实施例中,当用例执行请求是请求执行“在区块链***中部署合约h”这一用例,则根据“在区块链***中部署合约h”这一用例信息,生成测试用例,并将测试用例发送给目标节点设备。
在一些实施例中,目标节点设备先接收到指示信息,根据指示信息驱动相应的作恶行为对应的异常逻辑代码,基于异常注入后的并且驱动异常后的逻辑代码,执行测试用例。也即,在执行用例时,目标节点设备运行的逻辑代码是已经驱动异常之后的代码。
在一些实施例中,用例执行请求中包括指示信息,目标节点设备接收用例执行请求后,根据用例执行请求中的指示信息确定需要驱动的目标作恶行为对应的异常逻辑代码。在一些实施例中,指示信息是指示运行的“篡改提案信息”这一作恶行为的信息,目标节点设备接受用例执行请求后,根据用例执行请求中的指示信息确定需要驱动的目标作恶行为“篡改提案信息”对应的异常逻辑代码。
步骤540,向测试设备发送测试用例的执行日志,执行日志中记录有测试用例的执行结果。
具体的执行日志在上文实施例中已作了较为详细的说明,在此不作赘述。
本申请实施例提供的技术方案,通过目标节点设备接收测试设备发送的注入异常后的逻辑代码,并且根据用例执行请求,运行注入异常后的逻辑代码,使得用例和异常逻辑代码可以自动化的结合,自动化程度较高,精度较高,成本较低,测试周期较短。
请参考图6,其示出了本申请另一个实施例提供的应用于区块链***的异常测试方法的流程图。该方法可应用于图1所示的分布式***中,该方法各步骤的执行主体可以是目标节点对应的目标节点设备。该方法可以包括如下几个步骤(610~660)中的至少一个步骤。
步骤610,接收测试设备发送的异常注入后的逻辑代码。
步骤620,接收测试设备发送的用例执行请求。
步骤630,根据用例执行请求,调用异常逻辑代码对应的API。
在一些实施例中,每个作恶行为对应一段异常逻辑代码,而每一段异常逻辑代码也对应一个API,也即每个作恶行为对应的异常逻辑代码都提供了一个程序接口,使得目标节点设备可以通过API访问到具体的作恶行为对应的异常逻辑代码。API代表着异常逻辑代码对外提供服务的能力。在一些实施例中,基于异常逻辑代码对应的API,可以通过HTTP(HyperText Transfer Protocol,超文本传输协议)以及代码段名称,访问到对应的异常逻辑代码。
步骤640,在执行测试用例的过程中,通过API驱动异常逻辑代码执行测试用例。
在一些实施例中,目标作恶行为是“篡改提案信息”,在目标节点设备在接收到这样的指示信息之后,通过API驱动“篡改提案信息”对应的异常逻辑代码,使得在用例执行之前,在目标节点设备运行的代码是注入“篡改提案信息”这一作恶行为的。也即,当用例执行时,目标节点设备中已经模拟好了“篡改提案信息”这一异常。
步骤650,向测试设备发送测试用例的执行日志,执行日志中记录有测试用例的执行结果。
步骤660,在测试用例执行完成之后,停止调用异常逻辑代码对应的API。
在一些实施例中,当测试用例执行完成之后,停止调用异常逻辑代码对应的API,也就是说此时在目标节点设备中运行的代码是未曾启动异常的代码,这也就意味着可以在测试其他异常的时候,能够再次调用API驱动其他异常逻辑代码。通俗一点来说,在每次异常测试结束之后,代码中的异常代码归零,当下次测试异常时,再次调用对应的代码段。
本申请实施例提供的技术方案,通过在区块链的原始代码中注入多种异常逻辑代码,并且根据需要测试的不同的作恶行为,调用不同的异常逻辑代码对应的API接口,来驱动不同的异常逻辑代码,使得无需每次用例执行都执行一次异常注入,也无需在模拟不同作恶行为时都在原始逻辑代码中重新注入异常逻辑代码,使得作恶行为的模拟更加方便快捷,用例与异常测试的结合更加自动化,相应的异常测试的成本也较低。
请参考图7,其示出了本申请另一个实施例提供的应用于区块链***的异常测试方法的流程图。该方法可应用于图1所示的分布式***中。该方法可以包括如下几个步骤(S1~S13)中的至少一个步骤。
步骤S1,测试设备根据异常逻辑代码对应的作恶行为,确定原始逻辑代码中的插桩点。
从GIT(管理代码的仓库)上拉取区块链项目工程,针对需要模拟作恶行为的代码处注入FailPoint-inject插桩点。
步骤S2,测试设备在插桩点注入异常逻辑代码,生成异常注入后的逻辑代码。
步骤S3,测试设备对异常注入后的逻辑代码进行编译,生成可执行文件。
通过enable命令,激活FailPoint代码,生成中间文件,激活指令:“xxxxxxxxxxxxxxxx”(仅作为示例,并不是实际的代码),生成中间文件。对如图4注入的异常逻辑代码,得到的中间文件如图8中的800所示(图8中的代码仅作为示例,并不是实际的代码)。图8中的801和802对应图4中401的两段代码对应的中间文件。可通过指令:“yyyyyyyyyyyyyyy”(仅作为示例,并不是实际的代码)清除中间文件。
基于携带“篡改提案proposal”中间文件的代码,自动编译项目工程,生成二进制文件也即可执行文件。
步骤S4,测试设备向目标节点设备发送可执行文件。
在一些实施例中,将可执行文件下发至区块链***中的所有节点设备。
步骤S5,根据异常模拟场景,从至少一个节点设备中,确定模拟作恶行为的目标节点设备。
在一些实施例中,按照不同BFT共识场景,将可执行文件到目标节点设备。
步骤S6,从多种不同的作恶行为中,确定目标节点设备需要模拟的目标作恶行为。
在一些实施例中,选择“篡改提案信息”作为目标作恶行为。
步骤S7,测试设备向目标节点设备发送用例执行请求,用例执行请求用于请求目标节点设备基于异常注入后的逻辑代码,执行测试用例,用例执行请求中还包括目标作恶行为的指示信息。
步骤S8,目标节点设备根据目标作恶行为的指示信息,从异常逻辑代码中确定与目标作恶行为相关的目标异常逻辑代码。
步骤S9,目标节点设备调用目标异常逻辑代码对应的API。
步骤S10,目标节点设备在执行测试用例的过程中,通过API驱动异常逻辑代码执行测试用例。
采用API驱动的方式自动触发“篡改提案”场景的激活开启激活API:http://xx.xx.xx.xxx.xxx/xxxx/yourproject/package/proposal_nil_error(仅作为示例,并不是实际的代码)。其中package是注入异常逻辑代码所在文件的数据包名,proposal_nil_error是“篡改提案信息”的故障名,yourproject是可执行文件。
参考图9,图9中900是测试设备发送的用例执行请求的示意图。其中,图9仅显示一部分(图9中的代码仅作为示例,并不是实际的代码)。901是启动异常场景时,测试设备给目标节点设备发送的指示信息,用于指示目标节点设备启动“篡改提案信息”这一作恶行为。902是具体的用例执行请求。
步骤S11,目标节点设备向测试设备发送执行日志。
自动化用例执行前,API驱动异常场景,并且将执行状态日志记录到节点指定的目录下,方便后续查询。
步骤S12,目标节点设备停止调用异常逻辑代码对应的API。
图9中903是关闭异常的请求,目标节点设备接收到请求之后停止调用异常逻辑代码对应的API。
步骤S12和S11没有先后之分。
步骤S13,测试设备生成测试报告。
测试设备分析BFT共识状态,当模拟不满足BFT的容错节点时,比如一共4个节点,两个正常节点,两个“篡改提案信息”攻击节点,则BFT不满足正常节点数“大于2/3节点数”条件,达成不了共识,返回错误信息,如下:{″id″:″yyyyyyyyy″,″yyyyyy″:″yy″,″yyy″:{″yyyyyy}}(仅作为示例,并不是实际的代码)。
在一些实施例中,总共4个节点设备构成区块链网络,如果模拟单节点中间人“篡改提案信息”攻击,导致A节点作恶,但是BFT共识机制允许在4个节点构成的区块链网络中有一个容错节点,所以整个区块链服务依然正常运行,自动化用例执行正常,但是如果模拟节点A和B同时执行“篡改提案”攻击,这样就不满足BFT共识,最终导致整个区块链网络不可用,自动化用例执行失败,区块链进入阻塞状态。
在一些实施例中,测试设备总结上一步的分析结果,生成相应的测试报告,方便测试人员定位问题。
请参考图10,其示出了本申请一个实施例提供的应用于区块链***的异常测试方法的框图。
如图10中方法流程1000所示,测试设备动态将异常逻辑代码注入到区块链***的源代码中,并自动进行编译,同时提交节点设备的设备信息,将编译后的可执行文件下发至节点设备,节点设备利用API驱动异常场景也即目标作恶行为,同时将测试用例发送至节点设备,目标节点设备将异常运行日志记载在执行日志中,在用例执行完毕之后,生成测试报告,并且停止调用API驱动异常场景。
请参考图11,其示出了本申请一个实施例提供的应用于区块链***的异常测试方法的具体实施环境的示意图。
如图11中方法流程1100所示,区块链产品提测中,首先开发区块链产品,将各个模块提测到REQ中,REQ平台发布源代码,审核通过之后,进入测试流程。
提测之后,进行异常测试,动态注入“作恶行为”代码也即异常逻辑代码,在进行自动编译及下发之后,利用目标节点设备调用API驱动异常场景也即目标作恶行为。目标节点设备接收到测试设备发送的用例执行请求以及测试用例,执行自动化用例,在用例执行完毕之后,停止调用API驱动异常场景。
在用例执行完之后,同时分析BFT共识结果和用例执行日志,生成测试报告,基于测试报告调整区块链源代码,最终发布调整后的区块链源代码。
请参考图12,其示出了本申请另一个实施例提供的应用于区块链***的异常测试方法的具体实施环境的示意图。
在实施环境1200中,总共分为两大部分。
一部分是异常注入和编译。从GIT中拉取区块链***的源代码,通过多层的编译之后,确定插桩点,并将作恶行为对应的异常逻辑代码注入到源代码中,根据Enable命令生成中间文件,经过二进制编码之后得到可执行文件,将可执行文件下发至节点设备中。
另一部分是异常执行和恢复。在执行用例之前,确定需要触发异常的目标节点设备,通过目标节点设备发送API请求给HTTP,实施目标作恶行为,驱动异常场景。在异常场景开启之后,执行用例,在用例执行完毕之后,停止调用API驱动异常场景。
下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
请参考图13,其示出了本申请一个实施例提供的应用于区块链***的异常测试装置的框图。该装置具有实现上述测试设备侧执行的方法示例的功能,所述功能可以由硬件实现,也可以由硬件执行相应的软件实现。该装置可以实现成为测试设备,或者,实现成为测试设备中的一部分。如图13所示,该装置1300可以包括:代码注入模块1310、代码发送模块1320、请求发送模块1330和日志接收模块1340。
所述代码注入模块1310,用于在所述区块链***的原始逻辑代码中注入异常逻辑代码,生成异常注入后的逻辑代码;其中,所述异常逻辑代码是用于模拟作恶行为的逻辑代码。
所述代码发送模块1320,用于将所述异常注入后的逻辑代码发送给所述区块链***中的至少一个节点设备。
所述请求发送模块1330,用于向所述区块链***中的目标节点设备发送用例执行请求,所述用例执行请求用于请求所述目标节点设备基于所述异常注入后的逻辑代码,执行测试用例。
所述日志接收模块1340,用于接收所述目标节点设备发送的执行日志,所述执行日志中记录有所述测试用例的执行结果。
在一些实施例中,所述代码发送模块1320,用于对所述异常注入后的逻辑代码进行编译,生成可执行文件。
所述代码发送模块1320,用于将所述可执行文件发送给所述区块链***中的所述至少一个节点设备。
在一些实施例中,所述代码注入模块1310,用于根据所述异常逻辑代码对应的所述作恶行为,确定所述原始逻辑代码中的插桩点。
所述代码注入模块1310,用于在所述插桩点注入所述异常逻辑代码,生成所述异常注入后的逻辑代码。
在一些实施例中,如图14所示,所述装置还包括节点设备确定模块1350。
所述节点设备确定模块1350,用于根据异常模拟场景,从所述至少一个节点设备中,确定模拟所述作恶行为的所述目标节点设备。
在一些实施例中,如图14所示,所述节点设备确定模块1350包括单节点设备确定单元1352和多节点设备确定单元1354。
所述单节点设备确定单元1352,用于在所述异常模拟场景为单节点异常场景的情况下,从所述至少一个节点设备中,确定模拟所述作恶行为的一个节点设备,作为所述目标节点设备。或者,所述多节点设备确定单元1354,用于在所述异常模拟场景为多节点异常场景的情况下,从所述至少一个节点设备中,确定模拟所述作恶行为的多个节点设备,作为所述目标节点设备。
在一些实施例中,所述多节点设备确定单元1354,用于在所述异常模拟场景为多节点异常场景的情况下,根据所述区块链***中参与所述测试用例执行的节点设备的总数量和共识达成条件,确定模拟所述作恶行为的节点设备的数量N,N为大于1的整数;其中,所述共识达成条件是指所述区块链***所采用的投票共识机制针对节点设备的数量要求。
所述多节点设备确定单元1354,用于从所述至少一个节点设备中,确定N个节点设备,作为所述目标节点设备。
在一些实施例中,所述异常逻辑代码用于模拟多种不同的作恶行为。
在一些实施例中,如图14所示,所述装置还包括作恶行为确定模块1360。
所述作恶行为确定模块1360,用于从所述多种不同的作恶行为中,确定所述目标节点设备需要模拟的目标作恶行为;其中,所述用例执行请求中还包括所述目标作恶行为的指示信息。
在一些实施例中,如图14所示,所述装置还包括测试用例生成模块1370。
所述测试用例生成模块1370,用于根据所述区块链***的待测试任务,生成所述测试用例。
所述测试用例生成模块1370,还用于向所述区块链***中参与所述测试用例执行的节点设备发送所述测试用例。
在一些实施例中,如图14所示,所述装置还包括测试报告生成模块1380。
所述测试报告生成模块1380,用于根据所述区块链***中参与所述测试用例执行的各个节点设备分别上报的执行日志,对各个所述节点设备针对所述测试用例的执行结果进行统计分析。
所述测试报告生成模块1380,还用于根据所述统计分析的结果,生成测试报告。
请参考图15,其示出了本申请另一个实施例提供的应用于区块链***的异常测试装置的框图。该装置具有实现上述目标节点设备侧执行的方法示例的功能,所述功能可以由硬件实现,也可以由硬件执行相应的软件实现。该装置可以实现成为目标节点设备,或者,实现成为目标节点设备中的一部分。如图15所示,该装置1500可以包括:代码接收模块1510、请求接收模块1520、用例执行模块1530和日志发送模块1540。
所述代码接收模块1510,用于接收测试设备发送的异常注入后的逻辑代码,所述异常注入后的逻辑代码是在所述区块链***的原始逻辑代码中注入异常逻辑代码后生成的,所述异常逻辑代码是用于模拟作恶行为的逻辑代码。
所述请求接收模块1520,用于接收所述测试设备发送的用例执行请求,所述用例执行请求用于请求所述目标节点设备基于所述异常注入后的逻辑代码,执行测试用例。
所述用例执行模块1530,用于根据所述用例执行请求,基于所述异常注入后的逻辑代码执行所述测试用例。
所述日志发送模块1540,用于向所述测试设备发送所述测试用例的执行日志,所述执行日志中记录有所述测试用例的执行结果。
在一些实施例中,如图16所示,所述用例执行模块1530包括接口调用单元1532和代码驱动单元1534。
所述接口调用单元1532,用于根据所述用例执行请求,调用所述异常逻辑代码对应的API。
所述代码调用单元1534,用于在执行所述测试用例的过程中,通过所述API驱动所述异常逻辑代码执行所述测试用例。
在一些实施例中,所述异常逻辑代码用于模拟多种不同的作恶行为,所述用例执行请求中还包括所述多种不同的作恶行为中目标作恶行为的指示信息。
在一些实施例中,所述接口调用单元,用于根据所述目标作恶行为的指示信息,从所述异常逻辑代码中确定与所述目标作恶行为相关的目标异常逻辑代码;
所述接口调用单元,用于调用所述目标异常逻辑代码对应的API。
在一些实施例中,所述接口调用单元还用于在所述测试用例执行完成之后,停止调用所述异常逻辑代码对应的API。
在一些实施例中,如图16所示,所述装置还包括用例接收模块1550。
所述用例接收模块1550,用于接收所述测试设备发送的所述测试用例,所述测试用例是根据所述区块链***的待测试任务。
需要说明的是,上述实施例提供的装置,在实现其功能时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的装置与方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图17示出了本申请一个示例性实施例提供的计算机设备的结构框图。
通常,计算机设备1700包括有:处理器1701和存储器1702。
处理器1701可以包括一个或多个处理核心,比如4核心处理器、17核心处理器等。处理器1701可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(FieldProgrammable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器1701也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器1701可以在集成有GPU,GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器1701还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器1702可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是有形的和非暂态的。存储器1702还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器1702中的非暂态的计算机可读存储介质存储有计算机程序,该计算机程序由处理器1701加载并执行以实现上述测试设备侧的异常测试方法,或目标节点设备侧的异常测试方法。
本领域技术人员可以理解,图17中示出的结构并不构成对计算机设备1700的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
在示例性实施例中,还提供了一种计算机可读存储介质,所述存储介质中存储有计算机程序,所述计算机程序在被处理器执行时以实现上述测试设备侧的异常测试方法,或目标节点设备侧的异常测试方法。
可选地,该计算机可读存储介质可以包括:ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)、SSD(Solid State Drives,固态硬盘)或光盘等。其中,随机存取存储器可以包括ReRAM(Resistance Random Access Memory,电阻式随机存取存储器)和DRAM(Dynamic Random Access Memory,动态随机存取存储器)。
在示例性实施例中,还提供了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序存储在计算机可读存储介质中。终端设备的处理器从所述计算机可读存储介质中读取所述计算机程序,所述处理器执行所述计算机程序,使得所述终端设备执行上述测试设备侧的异常测试方法,或目标节点设备侧的异常测试方法。
应当理解的是,在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。另外,本文中描述的步骤编号,仅示例性示出了步骤间的一种可能的执行先后顺序,在一些其它实施例中,上述步骤也可以不按照编号顺序来执行,如两个不同编号的步骤同时执行,或者两个不同编号的步骤按照与图示相反的顺序执行,本申请实施例对此不作限定。
以上所述仅为本申请的示例性实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (19)
1.一种应用于区块链***的异常测试方法,其特征在于,所述方法由测试设备执行,所述方法包括:
在所述区块链***的原始逻辑代码中注入异常逻辑代码,生成异常注入后的逻辑代码;其中,所述异常逻辑代码是用于模拟作恶行为的逻辑代码;
将所述异常注入后的逻辑代码发送给所述区块链***中的至少一个节点设备;
向所述区块链***中的目标节点设备发送用例执行请求,所述用例执行请求用于请求所述目标节点设备基于所述异常注入后的逻辑代码,执行测试用例;
接收所述目标节点设备发送的执行日志,所述执行日志中记录有所述测试用例的执行结果。
2.根据权利要求1所述的方法,其特征在于,所述将所述异常注入后的逻辑代码发送给所述区块链***中的至少一个节点设备,包括:
对所述异常注入后的逻辑代码进行编译,生成可执行文件;
将所述可执行文件发送给所述区块链***中的所述至少一个节点设备。
3.根据权利要求1所述的方法,其特征在于,所述在所述区块链***的原始逻辑代码中注入异常逻辑代码,生成异常注入后的逻辑代码,包括:
根据所述异常逻辑代码对应的所述作恶行为,确定所述原始逻辑代码中的插桩点;
在所述插桩点注入所述异常逻辑代码,生成所述异常注入后的逻辑代码。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据异常模拟场景,从所述至少一个节点设备中,确定模拟所述作恶行为的所述目标节点设备。
5.根据权利要求4所述的方法,其特征在于,所述根据异常模拟场景,从所述至少一个节点设备中,确定模拟所述作恶行为的所述目标节点设备,包括:
在所述异常模拟场景为单节点异常场景的情况下,从所述至少一个节点设备中,确定模拟所述作恶行为的一个节点设备,作为所述目标节点设备;
或者,
在所述异常模拟场景为多节点异常场景的情况下,从所述至少一个节点设备中,确定模拟所述作恶行为的多个节点设备,作为所述目标节点设备。
6.根据权利要求5所述的方法,其特征在于,所述在所述异常模拟场景为多节点异常场景的情况下,从所述至少一个节点设备中,确定模拟所述作恶行为的多个节点设备,作为所述目标节点设备,包括:
在所述异常模拟场景为多节点异常场景的情况下,根据所述区块链***中参与所述测试用例执行的节点设备的总数量和共识达成条件,确定模拟所述作恶行为的节点设备的数量N,N为大于1的整数;其中,所述共识达成条件是指所述区块链***所采用的投票共识机制针对节点设备的数量要求;
从所述至少一个节点设备中,确定N个节点设备,作为所述目标节点设备。
7.根据权利要求1所述的方法,其特征在于,所述异常逻辑代码用于模拟多种不同的作恶行为;
所述方法还包括:
从所述多种不同的作恶行为中,确定所述目标节点设备需要模拟的目标作恶行为;
其中,所述用例执行请求中还包括所述目标作恶行为的指示信息。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据所述区块链***的待测试任务,生成所述测试用例;
向所述区块链***中参与所述测试用例执行的节点设备发送所述测试用例。
9.根据权利要求1所述的方法,其特征在于,所述接收所述目标节点设备发送的执行日志之后,还包括:
根据所述区块链***中参与所述测试用例执行的各个节点设备分别上报的执行日志,对各个所述节点设备针对所述测试用例的执行结果进行统计分析;
根据所述统计分析的结果,生成测试报告。
10.一种应用于区块链***的异常测试方法,其特征在于,所述区块链***包括多个节点设备,所述方法由所述多个节点设备中的目标节点设备执行,所述方法包括:
接收测试设备发送的异常注入后的逻辑代码,所述异常注入后的逻辑代码是在所述区块链***的原始逻辑代码中注入异常逻辑代码后生成的,所述异常逻辑代码是用于模拟作恶行为的逻辑代码;
接收所述测试设备发送的用例执行请求,所述用例执行请求用于请求所述目标节点设备基于所述异常注入后的逻辑代码,执行测试用例;
根据所述用例执行请求,基于所述异常注入后的逻辑代码执行所述测试用例;
向所述测试设备发送所述测试用例的执行日志,所述执行日志中记录有所述测试用例的执行结果。
11.根据权利要求10所述的方法,其特征在于,所述根据所述用例执行请求,基于所述异常注入后的逻辑代码执行所述测试用例,包括:
根据所述用例执行请求,调用所述异常逻辑代码对应的应用程序编程接口API;
在执行所述测试用例的过程中,通过所述API驱动所述异常逻辑代码执行所述测试用例。
12.根据权利要求11所述的方法,其特征在于,所述异常逻辑代码用于模拟多种不同的作恶行为,所述用例执行请求中还包括所述多种不同的作恶行为中目标作恶行为的指示信息;
所述根据所述用例执行请求,调用所述异常逻辑代码对应的应用程序编程接口API,包括:
根据所述目标作恶行为的指示信息,从所述异常逻辑代码中确定与所述目标作恶行为相关的目标异常逻辑代码;
调用所述目标异常逻辑代码对应的API。
13.根据权利要求11所述的方法,其特征在于,所述方法还包括:
在所述测试用例执行完成之后,停止调用所述异常逻辑代码对应的API。
14.根据权利要求10所述的方法,其特征在于,所述方法还包括:
接收所述测试设备发送的所述测试用例,所述测试用例是根据所述区块链***的待测试任务生成的。
15.一种应用于区块链***的异常测试装置,其特征在于,所述装置包括:
代码注入模块,用于在所述区块链***的原始逻辑代码中注入异常逻辑代码,生成异常注入后的逻辑代码;其中,所述异常逻辑代码是用于模拟作恶行为的逻辑代码;
代码发送模块,用于将所述异常注入后的逻辑代码发送给所述区块链***中的至少一个节点设备;
请求发送模块,用于向所述区块链***中的目标节点设备发送用例执行请求,所述用例执行请求用于请求所述目标节点设备基于所述异常注入后的逻辑代码,执行测试用例;
日志接收模块,用于接收所述目标节点设备发送的执行日志,所述执行日志中记录有所述测试用例的执行结果。
16.一种应用于区块链***的异常测试装置,其特征在于,所述装置包括:
代码接收模块:用于接收测试设备发送的异常注入后的逻辑代码,所述异常注入后的逻辑代码是在所述区块链***的原始逻辑代码中注入异常逻辑代码后生成的,所述异常逻辑代码是用于模拟作恶行为的逻辑代码;
请求接收模块,用于接收所述测试设备发送的用例执行请求,所述用例执行请求用于请求目标节点设备基于所述异常注入后的逻辑代码,执行测试用例;
用例执行模块,用于根据所述用例执行请求,基于所述异常注入后的逻辑代码执行所述测试用例;
日志发送模块,用于向所述测试设备发送所述测试用例的执行日志,所述执行日志中记录有所述测试用例的执行结果。
17.一种计算机设备,其特征在于,所述计算机设备包括处理器和存储器,所述存储器中存储有计算机程序,所述计算机程序由所述处理器加载并执行以实现如权利要求1至9任一项所述的方法,或实现如权利要求10至14任一项所述的方法。
18.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序由处理器加载并执行以实现如权利要求1至9任一项所述的方法,或实现如权利要求10至14任一项所述的方法。
19.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机指令,所述计算机指令存储在计算机可读存储介质中,处理器从所述计算机可读存储介质读取并执行所述计算机指令,以实现如权利要求1至9任一项所述的方法,或实现如权利要求10至14任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210649099.2A CN117251354A (zh) | 2022-06-09 | 2022-06-09 | 应用于区块链***的异常测试方法、装置和计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210649099.2A CN117251354A (zh) | 2022-06-09 | 2022-06-09 | 应用于区块链***的异常测试方法、装置和计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117251354A true CN117251354A (zh) | 2023-12-19 |
Family
ID=89129986
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210649099.2A Pending CN117251354A (zh) | 2022-06-09 | 2022-06-09 | 应用于区块链***的异常测试方法、装置和计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117251354A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117435507A (zh) * | 2023-12-20 | 2024-01-23 | 天津华来科技股份有限公司 | 自适应通用退避测试方法及*** |
-
2022
- 2022-06-09 CN CN202210649099.2A patent/CN117251354A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117435507A (zh) * | 2023-12-20 | 2024-01-23 | 天津华来科技股份有限公司 | 自适应通用退避测试方法及*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102606945B1 (ko) | 블록체인 기술과 디지털 트윈을 결합하기 위한 컴퓨터 구현 시스템 및 방법 | |
Guerraoui et al. | The consensus number of a cryptocurrency | |
CN110597925B (zh) | 一种基于区块链的跨链数据处理方法及装置 | |
Mahajan et al. | Consistency, availability, and convergence | |
CN112073269B (zh) | 区块链网络测试方法、装置、服务器及存储介质 | |
Padgham et al. | Model-based test oracle generation for automated unit testing of agent systems | |
CN111782551B (zh) | 针对区块链项目的测试方法、装置及计算机设备 | |
CN110782251B (zh) | 一种基于智能合约自动化部署区块链网络的方法 | |
CN107241315B (zh) | 银行网关接口的接入方法、装置及计算机可读存储介质 | |
CN111949531B (zh) | 区块链网络的测试方法、装置、介质及电子设备 | |
CN112631846A (zh) | 一种故障演练方法、装置、计算机设备及存储介质 | |
CN107077412A (zh) | 单层或n层应用的自动化根本原因分析 | |
JP2012150805A (ja) | システムアプリケーション処理に関連する詐欺を検出するシステムおよび方法 | |
CN116155771A (zh) | 网络异常测试方法、装置、设备、存储介质和程序 | |
US20220141240A1 (en) | Computer-implemented method and blockchain system for detecting an attack on a computer system or computer network | |
CN111679978B (zh) | 一种程序测试方法、程序测试装置、电子设备及存储介质 | |
CN114328217A (zh) | 应用的测试方法、装置、设备、介质及计算机程序产品 | |
CN113950679A (zh) | 使用预言机共识来验证测量数据集 | |
EP4147416B1 (en) | Blockchain-based accountable distributed computing system | |
CN117251354A (zh) | 应用于区块链***的异常测试方法、装置和计算机设备 | |
Bouchenak et al. | From autonomic to self-self behaviors: The jade experience | |
CN116915516B (zh) | 软件跨云交付方法、中转服务器、目标云及存储介质 | |
CN114090683A (zh) | 基于联盟治理的智能合约管理方法、设备及存储介质 | |
Sunyé et al. | Model-based testing of global properties on large-scale distributed systems | |
CN111917729A (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 |