CN111917729A - 动态注入测试方法及装置、相关设备 - Google Patents
动态注入测试方法及装置、相关设备 Download PDFInfo
- Publication number
- CN111917729A CN111917729A CN202010657846.8A CN202010657846A CN111917729A CN 111917729 A CN111917729 A CN 111917729A CN 202010657846 A CN202010657846 A CN 202010657846A CN 111917729 A CN111917729 A CN 111917729A
- Authority
- CN
- China
- Prior art keywords
- block chain
- block
- fault
- nodes
- tolerant
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1408—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic by monitoring network traffic
- H04L63/1425—Traffic logging, e.g. anomaly detection
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/06—Management of faults, events, alarms or notifications
- H04L41/069—Management of faults, events, alarms or notifications using logs of notifications; Post-processing of notifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/50—Testing arrangements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/46—Secure multiparty computation, e.g. millionaire problem
- H04L2209/463—Electronic voting
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
-
- 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)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Retry When Errors Occur (AREA)
Abstract
本公开实施例提供了一种动态注入测试方法及装置、相关设备。该方法包括:在区块链项目工程中的空块异常插桩点,动态注入空块异常逻辑;自动编译经过动态注入后的所述区块链项目工程,生成可执行文件;根据待测试区块链共识机制,确定所述区块链项目工程对应的区块链网络中的容错节点;下发所述可执行文件至所述容错节点;自动触发所述容错节点执行所述可执行文件中的所述空块异常逻辑;触发执行所述区块链网络的自动化用例,获得所述区块链网络的所述待测试区块链共识机制的共识状态。通过本公开实施例的技术方案,能够基于动态注入技术,实现区块链空块异常影响共识容错的自动化测试。
Description
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种动态注入测试方法及装置、电子设备和计算机可读存储介质。
背景技术
区块链系统在正常运行时,在每个区块是会有基础交易的。针对区块链空块异常投票的测试中,为了验证区块链空块异常对共识容错的影响,需要构造没有交易的空块场景。
相关技术中,难以构造参数来模拟空块异常投票,往往需要开发人员协助修改作恶节点(也称之为容错节点)代码,采用手动执行的方式。但是,这样做对区块链源码有侵入性,需要开发人员协助,因此,效率低,自动化程度低,并且精准性差,也没有明确的日志可以追踪。
因此,如何提高验证区块链空块异常是亟待解决的技术问题之一。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解。
发明内容
本公开实施例提供一种动态注入测试方法及装置、电子设备和计算机可读存储介质,可以解决相关技术中存在的验证区块链空块异常对共识容错的影响的测试效率低下、自动化程度低的技术问题。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
本公开实施例提供一种动态注入测试方法,所述方法包括:在区块链项目工程中的空块异常插桩点,动态注入空块异常逻辑;自动编译经过动态注入后的所述区块链项目工程,生成可执行文件;根据待测试区块链共识机制,确定所述区块链项目工程对应的区块链网络中的容错节点;下发所述可执行文件至所述容错节点;自动触发所述容错节点执行所述可执行文件中的所述空块异常逻辑;触发执行所述区块链网络的自动化用例,获得所述区块链网络的所述待测试区块链共识机制的共识状态。
本公开实施例提供一种动态注入测试装置,所述装置包括:空块异常动态注入单元,用于在区块链项目工程中的空块异常插桩点,动态注入空块异常逻辑;可执行文件生成单元,用于自动编译经过动态注入后的所述区块链项目工程,生成可执行文件;容错节点确定单元,用于根据待测试区块链共识机制,确定所述区块链项目工程对应的区块链网络中的容错节点;可执行文件下发单元,用于下发所述可执行文件至所述容错节点;空块异常触发执行单元,用于自动触发所述容错节点执行所述可执行文件中的所述空块异常逻辑;共识状态获得单元,用于触发执行所述区块链网络的自动化用例,获得所述区块链网络的所述待测试区块链共识机制的共识状态。
在本公开的一些示例性实施例中,空块异常动态注入单元包括:区块链项目代码获取单元,用于获取所述区块链项目工程的源代码;定义空块异常插桩点单元,用于分析所述区块链项目工程的源代码,定义需要模拟空块异常的所述空块异常插桩点;空块异常逻辑注入单元,用于导入模拟空块异常代码,在所述空块异常插桩点动态注入所述空块异常逻辑。
在本公开的一些示例性实施例中,可执行文件生成单元包括:空块异常中间文件生成单元,用于激活所述模拟空块异常代码,生成空块异常中间文件;可执行文件生成单元,用于基于携带所述空块异常中间文件的所述区块链项目工程的源代码,自动编译所述区块链项目工程,生成所述可执行文件。
在本公开的一些示例性实施例中,所述待测试区块链共识机制为所述区块链网络中的出块节点能够生成空块的区块链共识机制。
在本公开的一些示例性实施例中,所述待测试区块链共识机制包括拜占庭共识机制,所述区块链网络中包括n个节点,n为大于或等于1的正整数。其中,容错节点确定单元用于确定以下中的至少一项:确定所述区块链网络中的小于n/3个节点作为所述容错节点;确定所述区块链网络中的等于n/3个节点作为所述容错节点;确定所述区块链网络中的大于n/3个节点作为所述容错节点。
在本公开的一些示例性实施例中,共识状态获得单元包括:自动化用例正常执行单元,用于若确定所述区块链网络中的小于或等于n/3个节点作为所述容错节点,则正常执行所述自动化用例;投票信息广播单元,用于获取所述区块链网络中除所述容错节点以外的节点,对出块节点广播的空块的投票信息;共识状态确定单元,用于根据所述投票信息,确定所述共识状态。
在本公开的一些示例性实施例中,共识状态获得单元包括:自动化用例执行失败单元,用于若确定所述区块链网络中的大于n/3个节点作为所述容错节点,则获取自动化用例执行失败信息;区块链网络阻塞单元,用于根据所述自动化用例执行失败信息,确定所述共识状态为所述区块链网络进入阻塞状态。
在本公开的一些示例性实施例中,所述装置还包括:异常运行日志存储单元,用于在自动触发所述容错节点执行所述可执行文件中的所述空块异常逻辑之后,将所述容错节点执行所述空块异常逻辑的结果,存储至所述容错节点对应的异常运行日志中。
在本公开的一些示例性实施例中,所述装置还包括:测试报告生成单元,用于根据所述容错节点对应的异常运行日志,生成包括所述待测试区块共识机制的共识状态的测试报告。
本公开实施例提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如上述实施例中所述的动态注入测试方法。
本公开实施例提供了一种电子设备,包括:至少一个处理器;存储装置,配置为存储至少一个程序,当所述至少一个程序被所述至少一个处理器执行时,使得所述至少一个处理器实现如上述实施例中所述的动态注入测试方法。
在本公开的一些实施例所提供的技术方案中,一方面,通过在区块链项目工程中的空块异常插桩点动态注入空块异常逻辑,无需修改区块链项目工程的源代码,对源代码无侵入;另一方面,通过自动编译经过动态注入后的所述区块链项目工程,生成可执行文件,并根据待测试区块链共识机制,确定所述区块链项目工程对应的区块链网络中的容错节点,之后下发所述可执行文件至所述容错节点,自动触发所述容错节点执行所述可执行文件中的所述空块异常逻辑,接着触发执行所述区块链网络的自动化用例,获得所述区块链网络的所述待测试区块链共识机制的共识状态,实现了自动化测试,提高了测试效率,并且可以覆盖待测试区块链共识机制的各种共识场景。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1示出了本公开实施例提供的分布式系统应用于区块链系统的一个可选的结构示意图;
图2示出了本公开实施例提供的区块结构的一个可选的示意图;
图3示意性示出了根据本公开的一实施例的动态注入测试方法的流程图;
图4示意性示出了根据本公开的一实施例的动态注入测试方法的流程图;
图5示意性示出了根据本公开的一实施例的动态注入测试方法的示意图;
图6示意性示出了根据本公开的一实施例的触发自动化用例执行的示意图;
图7示意性示出了根据本公开的一实施例的动态注入测试装置的框图;
图8示出了适于用来实现本公开实施例的电子设备的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本公开将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
本公开所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本公开的各方面。
附图仅为本公开的示意性图解,图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在至少一个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
本说明书中,用语“一个”、“一”、“该”、“所述”和“至少一个”用以表示存在至少一个要素/组成部分/等;用语“包含”、“包括”和“具有”用以表示开放式的包括在内的意思并且是指除了列出的要素/组成部分/等之外还可存在另外的要素/组成部分/等;用语“第一”、“第二”和“第三”等仅作为标记使用,不是对其对象的数量限制。
首先,对本公开实施例中提及的部分术语进行解释说明。
出块节点:又叫记账节点、Leader节点(主节点)。在区块链的每个打包周期内,需要记账节点将若干交易列表打包成区块结构,并将该区块广播给该区块链中的其他节点共识。记账节点也就是生成区块并发起提案的节点。
BFT(Byzantine Fault Tolerance)共识:拜占庭容错共识。拜占庭容错技术是一类分布式计算领域的容错技术,假设分布式系统拥有n个节点,n为大于或等于1的正整数,并假设整个系统中的拜占庭节点(发生故障的节点,也可称之为作恶节点或容错节点,正常的节点即为非拜占庭节点)数为m个,m为大于或等于0的整数,当满足n≥3m+1时,则整个系统可正常运行,即容许n/3个节点出现异常。这种共识效率高,可满足高频交易量的需求。但当有n/3或以上个节点停止工作后,或者,当有n/3或以上个节点联合作恶时,系统将无法提供服务。
空块(empty block):没有记录交易信息的区块,记账节点扫描当前节点的交易池,当交易池列表为空时,触发超时生成空块。因为区块传递的特性,空块往往只包含一条简单的信息,这条信息存在的目的只是为了让区块可以传递出去。空块也需要广播给其他节点完成例如BFT共识。
共识算法或者共识机制:就是解决对某一提案(目标,投票等各种协作工作),大家达成一致意见的过程。所谓“共识机制”,就是通过特殊节点的投票,在很短的时间内完成对交易的验证和确认;当出现意见不一致时,在没有中心控制的情况下,若干个节点参与决策达成共识,即在互相没有信任基础的个体之间如何建立信任关系。不同的区块链种类需要不同的共识算法来确保区块链上最后的区块能够在任何时候都反应出全网的状态。
P2P(Peer to Peer)网络:对等网络,即对等计算机网络,该网络中的节点角色既可以是客户端,也可以是服务器。即该网络中的每一台计算机既能充当网络服务的请求者,又能对其它计算机的请求做出响应,提供资源、服务和内容。
FailPoint:它是FreeBSD(一种类UNIX操作系统)failpoints的Golang(又称Go,一种计算机编程语言)实现,可以在代码中注入错误或异常行为,用于在各种复杂系统中模拟错误处理,来提高系统的容错性、正确性和稳定性。
REQ:指代软件研发提测流程管理平台,管理软件版本开发、提测(提交测试的简称)、缺陷提交、回归测试、发布等整个生命周期。
下面结合附图对本公开示例实施方式进行详细说明。
本公开实施例涉及的系统可以是由客户端、多个节点(接入网络中的任意形式的电子设备,如服务器、终端设备)通过网络通信的形式连接形成的分布式系统。
以分布式系统为区块链系统为例,参见图1,图1是本公开实施例提供的分布式系统100应用于区块链系统的一个可选的结构示意图,由多个节点(接入网络中的任意形式的电子设备,如服务器、终端设备)和客户端形成,节点之间形成组成的P2P网络,P2P协议是一个运行在传输控制协议(TCP,Transmission Control Protocol)协议之上的应用层协议。在分布式系统中,任何机器如服务器、终端设备都可以加入而成为节点,节点包括硬件层、中间层、操作系统层和应用层。
参见图1示出的区块链系统中各节点的功能,涉及的功能包括:
1)路由,节点具有的基本功能,用于支持节点之间的通信。
节点除具有路由功能外,还可以具有以下功能:
2)应用,用于部署在区块链中,根据实际业务需求而实现特定业务,记录实现功能相关的数据形成记录数据,在记录数据中携带数字签名以表示任务数据的来源,将记录数据发送到区块链系统中的其他节点,供其他节点在验证记录数据来源以及完整性成功时,将记录数据添加到临时区块中。
例如,应用实现的业务包括:
2.1)钱包,用于提供进行电子货币的交易的功能,包括发起交易(即,将当前交易的交易记录发送给区块链系统中的其他节点,其他节点验证成功后,作为承认交易有效的响应,将交易的记录数据存入区块链的临时区块中;当然,钱包还支持查询电子货币地址中剩余的电子货币。
2.2)共享账本,用于提供账目数据的存储、查询和修改等操作的功能,将对账目数据的操作的记录数据发送到区块链系统中的其他节点,其他节点验证有效后,作为承认账目数据有效的响应,将记录数据存入临时区块中,还可以向发起操作的节点发送确认。
2.3)智能合约,计算机化的协议,可以执行某个合约的条款,通过部署在共享账本上的用于在满足一定条件时而执行的代码实现,根据实际的业务需求代码用于完成自动化的交易,例如查询买家所购买商品的物流状态,在买家签收货物后将买家的电子货币转移到商户的地址;当然,智能合约不仅限于执行用于交易的合约,还可以执行对接收的信息进行处理的合约。
3)区块链,包括一系列按照产生的先后时间顺序相互接续的区块(Block),新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链系统中节点提交的记录数据。
参见图2,图2是本公开实施例提供的区块结构(Block Structure)一个可选的示意图,每个区块中包括本区块存储交易记录的哈希值(本区块的哈希值)、以及前一区块的哈希值,各区块通过哈希值连接形成区块链。另外,区块中还可以包括有区块生成时的时间戳等信息。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了相关的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
基于上述相关技术中存在的技术问题,本公开实施例提出了一种动态注入测试方法,以用于至少部分解决上述问题。图3示意性示出了根据本公开的一实施例的动态注入测试方法的流程图。如图3所示,本公开实施例提供的方法可以包括以下步骤。
在步骤S310中,在区块链项目工程中的空块异常插桩点,动态注入空块异常逻辑。
在示例性实施例中,在区块链项目工程中的空块异常插桩点,动态注入空块异常逻辑,可以包括:获取所述区块链项目工程的源代码;分析所述区块链项目工程的源代码,定义需要模拟空块异常的所述空块异常插桩点;导入模拟空块异常代码,在所述空块异常插桩点动态注入所述空块异常逻辑。
在步骤S320中,自动编译经过动态注入后的所述区块链项目工程,生成可执行文件。
在示例性实施例中,自动编译经过动态注入后的所述区块链项目工程,生成可执行文件,可以包括:激活所述模拟空块异常代码,生成空块异常中间文件;基于携带所述空块异常中间文件的所述区块链项目工程的源代码,自动编译所述区块链项目工程,生成所述可执行文件。
在步骤S330中,根据待测试区块链共识机制,确定所述区块链项目工程对应的区块链网络中的容错节点。
在示例性实施例中,所述待测试区块链共识机制为所述区块链网络中的出块节点能够生成空块的区块链共识机制。
具体的,一般联盟链共识方案(例如PBFT(Practical Byzantine FaultTolerance,实用拜占庭容错算法),Raft-BFT(Raft是一种管理复制日志的一致性算法)等)里都有生成空块的可能,POW(Proof of work,工作量证明共识算法)到了出块时间,如果没有交易,也会有空块的可能,其他共识算法也类似。
在示例性实施例中,所述待测试区块链共识机制包括拜占庭共识机制,所述区块链网络中包括n个节点,n为大于或等于1的正整数。其中,根据待测试区块链共识机制,确定所述区块链项目工程对应的区块链网络中的容错节点,可以包括以下中的至少一项:确定所述区块链网络中的小于n/3个节点作为所述容错节点;确定所述区块链网络中的等于n/3个节点作为所述容错节点;确定所述区块链网络中的大于n/3个节点作为所述容错节点。
在步骤S340中,下发所述可执行文件至所述容错节点。
在步骤S350中,自动触发所述容错节点执行所述可执行文件中的所述空块异常逻辑。
在示例性实施例中,在自动触发所述容错节点执行所述可执行文件中的所述空块异常逻辑之后,所述方法还可以包括:将所述容错节点执行所述空块异常逻辑的结果,存储至所述容错节点对应的异常运行日志中。
在步骤S360中,触发执行所述区块链网络的自动化用例,获得所述区块链网络的所述待测试区块链共识机制的共识状态。
本公开实施例中,区块链网络的自动化用例是指正常的区块链测试用例。测试用例是指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。其内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,最终形成文档。测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,用于核实是否满足某个特定软件需求。
在示例性实施例中,触发执行所述区块链网络的自动化用例,获得所述区块链网络的所述待测试区块链共识机制的共识状态,可以包括:若确定所述区块链网络中的小于或等于n/3个节点作为所述容错节点,则正常执行所述自动化用例;获取所述区块链网络中除所述容错节点以外的节点,对出块节点广播的空块的投票信息;根据所述投票信息,确定所述共识状态。
在示例性实施例中,触发执行所述区块链网络的自动化用例,获得所述区块链网络的所述待测试区块链共识机制的共识状态,可以包括:若确定所述区块链网络中的大于n/3个节点作为所述容错节点,则获取自动化用例执行失败信息;根据所述自动化用例执行失败信息,确定所述共识状态为所述区块链网络进入阻塞状态。
在示例性实施例中,所述方法还可以包括:根据所述容错节点对应的异常运行日志,生成包括所述待测试区块共识机制的共识状态的测试报告。
本公开实施方式提供的动态注入测试方法,一方面,通过在区块链项目工程中的空块异常插桩点动态注入空块异常逻辑,无需修改区块链项目工程的源代码,对源代码无侵入;另一方面,通过自动编译经过动态注入后的所述区块链项目工程,生成可执行文件,并根据待测试区块链共识机制,确定所述区块链项目工程对应的区块链网络中的容错节点,之后下发所述可执行文件至所述容错节点,自动触发所述容错节点执行所述可执行文件中的所述空块异常逻辑,接着触发执行所述区块链网络的自动化用例,获得所述区块链网络的所述待测试区块链共识机制的共识状态,实现了自动化测试,提高了测试效率,并且可以覆盖待测试区块链共识机制的各种共识场景。
区块链是分布式账本技术的一种形式,是一种多方共同维护,使用密码学保证传输和访问安全,能够实现数据一致存储、难以篡改、防止抵赖的记账技术。所有的区块都分布在对等网络中,由于它是一个分布式账本,所以它可以在没有服务器管理的情况下存在,其数据质量可以通过数据库复制和计算确认来维护。区块链上的数据被分组在不同的区块中,这些区块会彼此链接并用加密技术来进行保护。区块链本质上是一个不断增长的记录列表,它的结构只允许将数据添加到数据库中,所以更改或删除先前输入的数据是不可能的。因此区块链技术非常适合记录事件、管理记录、处理交易、追踪资产和投票。
在下面的实施例中,均以待测试区块链共识机制为BFT共识为例进行举例说明,但本公开的保护范围并不限定于此,其可以应用于任意一种可能生成空块的区块链共识机制。
本公开实施例中,区块链的生命周期如下:
1.客户端发送交易给节点,节点通过P2P网络广播交易到其他节点;
2.共识机制随机选出记账节点;
3.记账节点将若干交易列表打包组装成区块结构,并广播给其他节点,若交易列表为空,则打包成空块广播出去;
4.其他节点收到区块后,验证区块内的交易,并广播投票信息;
5.针对该区块达成BFT共识后,提交该区块到区块链存储层,开始下一轮选举和共识。
在基于BFT共识的区块链网络中,当交易列表为空时,会生成空块并广播出去,其他节点收到空块进行验证,若验证空块的结构正常,真实情况也是没有交易,则可以投“赞成票”;或者,若验证空块的结构正常,但真实情况是有交易,则可以投“反对票”,也对空块的结构进行校验,当校验不通过时,说明涉及到篡改节点代码,进而影响空块结构,则可以对“空块异常”抛出错误。
正常情况下,当节点对空块投反对票或赞成票时,各个节点收集对空块的投票信息,验证对空块投赞成票的票数是否大于2n/3,如果大于2n/3,则区块链达成BFT共识,提交空块到本节点。当当前节点有篡改会造成当前节点异常退出,则该当前节点会阻塞并不广播投票信息,其他节点也就会收集不到这个当前节点的投票信息。若发生篡改的节点数量导致其他节点无法收集到2n/3的投票信息是,整个区块链网络就会阻塞,即如果对空块投赞成票的票数小于2n/3,则区块链完成不了BFT共识,区块链运行状态异常并阻塞。
本公开实施例可以利用动态注入来验证空块这种不好构造的场景对拜占庭容错共识的影响。针对区块链“空块异常”投票的动态注入测试方法的流程图如图4所示,可以包括以下步骤。
在步骤S410中,区块链产品提测。
具体地,步骤S410可以进一步包括以下步骤。
在步骤S411中,开发人员开发区块链产品,完成区块链产品的区块链项目工程,生成该区块链项目工程的源代码。
在步骤S412中,开发人员将区块链项目工程的各个模块提测到REQ。
在步骤S413中,REQ平台将区块链项目工程的各个模块分发给审核人员。
在步骤S414中,审核通过后,进入测试流程。
提测后,进入步骤S420中,在步骤S420中,对区块链产品进行异常测试。
具体地,步骤S420可以进一步包括以下步骤。
在步骤S421中,动态注入“空块异常”逻辑,以便后续模拟“空块异常”投票。
在步骤S422中,自动编译注入“空块异常”逻辑的区块链项目工程,生成可执行文件,并将生成的可执行文件下发至需要模拟“空块异常”的容错节点。
在步骤S423中,自动触发容错节点的“空块异常”投票的BFT场景运行。
在步骤S424中,触发执行自动化用例。
执行自动化用例后,进入步骤S430,在步骤S430中,发布区块链产品。
具体地,步骤S430可以进一步包括以下步骤。
在步骤S431中,分析BFT共识结果和各个节点的执行日志(包括容错节点的异常运行日志)。
在步骤S432中,根据上述分析结果,生成测试报告。
在步骤S433中,发布区块链产品上线。
在区块链产品迭代周期内,开发人员将开发好的区块链项目工程提测到REQ平台,之后触发测试执行。测试人员在完成基本的功能测试(例如上链操作/查询操作/合约执行操纵等)之后,开始展开异常测试,针对节点“空块异常”投票的场景的自动化测试可采用如图5所示的流程执行。
首先,区块链“空块异常”投票自动化测试平台从例如Git(一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目)上拉取区块链项目工程。分析区块链项目工程的源代码,导入FailPoint,针对需要模拟“空块异常”的代码处自定义空块异常插桩点(例如FailPoint-inject插桩点),注入空块异常逻辑,例如:
然后激活FailPoint代码,生成中间文件。例如可以采取以下激活指令:$GOPATH/src/github.com/pingcap/failpoint/bin/failpoint-ctl enable,生成例如如下文件:
-rwxr-xr-x 1 root root 338 Mar 5 00:00binding_failpoint_bingd_.go
-rw-r--r--1 root root 1258 Mar 4 17:47 config.go
drwxr-xr-x 2 root root 4096 Mar 3 14:51 increment
drwxr-xr-x 2 root root 4096 Mar 3 14:51 mempool
drwxr-xr-x 2 root root 4096 Mar 3 14:51 tpcommon
-rwxr-xr-x 1 root root 7627 Mar 5 00:00 txpool_impl.go
-rw-r--r--1 root root 7676 Mar 4 23:53 txpool_impl.go_failpoint_stash_
-rw-r--r--1 root root 11298 Mar 3 14:51 txpool_impl_test.go
-rwxr-xr-x 1 root root 19856 Mar 5 00:00 txpool_server.go
-rw-r--r--1 root root 19842 Mar 4 23:53 txpool_server.go_failpoint_stash_
其中以下这三个文件是区块链项目工程经过异常注入后生成的中间文件,用来恢复注入,还原成注入前的源代码:
-rwxr-xr-x 1 root root 338 Mar 5 00:00 binding_failpoint_bingd_.go
-rw-r--r--1 root root 7676 Mar 4 23:53 txpool_impl.go_failpoint_stash
-rw-r--r--1 root root 19842 Mar 4 23:53 txpool_server.go_failpoint_stash_
例如可通过以下指令清除中间文件:
$GOPATH/src/github.com/pingcap/failpoint/bin/failpoint-ctl enable
之后,自动编译区块链项目工程,对于携带空块异常插桩点的区块链项目工程进行自动编译,生成可执行文件,例如二进制文件。
向区块链“空块异常”投票自动化测试平台提交容错节点的机器信息,例如容错节点的IP(Internet Protocol,网际互联协议)等信息,本公开对此不作限定,只要能够唯一标识各个容错节点即可。
例如,可以选择区块链网络中的单节点作为容错节点,执行“空块异常”,则提交该单节点的机器信息。再例如,如果选择多节点执行(模拟各种BFT共识场景,例如“大于2n/3”、“等于2n/3”、“小于2n/3”)“空块异常”,则配置多节点的机器信息。这里的容错节点是指区块链网络中,被选择执行“空块异常”逻辑的节点。
本公开实施例中,大于2n/3的BFT共识场景是指确定的容错节点的个数小于n/3,即区块链网络中的节点可能收集到大于2n/3个投赞成票的投票信息;等于2n/3的BFT共识场景是指确定的容错节点的个数等于n/3,即区块链网络中的节点可能收集到等于2n/3个投赞成票的投票信息;小于2n/3的BFT共识场景是指确定的容错节点的个数大于n/3,即区块链网络中的节点不可能收集到大于或等于2n/3个投赞成票的投票信息。“大于2n/3”和“等于2n/3”的BFT共识场景,节点可能可以完成BFT共识,而小于2n/3的BFT共识场景,节点不可能完成BFT共识,区块链网络会阻塞。
之后,下发上述可执行文件到需要处理“空块异常”的容错节点上。
区块链“空块异常”投票自动化测试平台自动触发空块异常执行,可采用环境变量或者代码驱动的方式,自动触发“空块异常”的执行,并且将执行状态日志记录到节点指定的目录下,方便后续查询。例如,图示中,假设指定节点A、节点B、节点C和节点D作为容错节点,则检测区块链节点A,可以将区块链节点A执行空块异常逻辑的结果存储至节点A的异常运行日志中;检测区块链节点B,可以将区块链节点B执行空块异常逻辑的结果存储至节点B的异常运行日志中;检测区块链节点C,可以将区块链节点C执行空块异常逻辑的结果存储至节点C的异常运行日志中;检测区块链节点D,可以将区块链节点D执行空块异常逻辑的结果存储至节点D的异常运行日志中。
以采用修改环境变量的方式自动触发“空块异常”投票的激活执行为例,可以采用以下激活指令:
GO_FAILPOINTS="github.com/package/blocknullPanic=return(true)"nohup./yourproject&
其中package是注入异常代码所在文件的package(包)名,blocknullPanic是“空块异常”的故障名,yourproject是区块链项目工程的可执行文件。
然后,在区块链自动化平台上触发自动化用例的执行。区块链自动化平台是执行正常的自动化用例的平台,如正常地执行上链操作/查询操作等自动化用例,空块异常投票逻辑由之前注入异常的容错节点来做。
例如,如图6所示,以运行区块链正常的“上链操作”为例,向指定的节点发送PushTransaction(推送事物,是区块信息写入的入口,在区块链上的任何有效操作,都代表着有transaction被执行了。例如创建账户的时候,会通过PushTransaction写到区块信息中,进行转账也会通过PushTransaction写到区块信息中)的http(HyperText TransferProtocol,超文本传输协议)请求,图6是基于PyCharm(一种Python IDE(IntegratedDevelopment Environment,集成开发环境),带有可以帮助用户在使用Python语言开发时提高其效率的工具)执行用例的IDE环境。
区块链自动化平台可以分析自动化用例的执行结果,分析是否满足BFT共识,获得BFT共识状态。
例如,假设总共4个节点(A节点、B节点、C节点和D节点)构成区块链网络,如果模拟单节点“空块异常”投票,导致A节点作恶,但是BFT共识机制允许在4个节点构成的区块链网络中有一个容错节点,所以整个区块链服务依然正常运行,自动化用例执行正常。但是如果模拟节点A和B同时执行“空块异常”投票,这样就不满足BFT共识,最终导致整个区块链网络不可用,自动化用例执行失败,区块链网络进入阻塞状态。
具体的,分析BFT共识状态,当模拟不满足BFT的容错节点时,还是以上述一共4个节点为例,两个节点正常,两个执行“空块异常”投票的容错节点,则BFT不满足“大于2n/3”条件,达成不了共识,返回自动化用例执行失败信息,例如如下:
{"id":"20200304123148074","jsonrpc":"2.0","result":{"retCode":7006,"retMsg":"add tx/blktimeout","blockHeight":0,"gasUsed":0,"hash":"054a537f330caba630fddba71e12936e43d0749849155594663a1005d0e1b738","blockTime":0,"index":0,"totalIndex":0,"fee":0}}
区块链自动化平台总结上一步的分析结果,生成相应的测试报告,方便测试人员定位问题。
本公开实施方式提供的动态注入测试方法,可以用于自动检测区块链空块异常对区块链拜占庭容错共识的影响。其中,一方面,在测试阶段,可以利用FailPoint动态注入技术,在需要模拟“空块异常”的代码处自定义空块异常插桩点,自动扫描区块链项目工程的源代码,基于FailPoint动态插入“空块异常”逻辑,对源代码无侵入,且可以自动编译区块链项目工程,生成经过注入后的区块链项目工程的可执行文件。另一方面,可以自动部署可执行文件,可将可执行文件自定义下发到各个容错节点,可覆盖“大于2n/3”、“等于2n/3”、“小于2n/3”等各种BFT共识场景,自动化程度高,扩展性强,无需开发人员介入。同时,还可以采用代码驱动或环境变量的形式自动触发“空块异常”执行,配合自动化用例,可自动检测区块链网络的BFT共识状态。此外,还能基于自动化测试思想,在“空块异常”执行完后,触发测试报告的生成,将“空块异常”对区块链网络BFT共识的影响情况进行统计报告输出。
图7示意性示出了根据本公开的一实施例的动态注入测试装置的框图。如图7所示,本公开实施例提供的动态注入测试装置700可以包括:空块异常动态注入单元710、可执行文件生成单元720、容错节点确定单元730、可执行文件下发单元740、空块异常触发执行单元750以及共识状态获得单元760。
空块异常动态注入单元710可以用于在区块链项目工程中的空块异常插桩点,动态注入空块异常逻辑。可执行文件生成单元720可以用于自动编译经过动态注入后的所述区块链项目工程,生成可执行文件。容错节点确定单元730可以用于根据待测试区块链共识机制,确定所述区块链项目工程对应的区块链网络中的容错节点。可执行文件下发单元740可以用于下发所述可执行文件至所述容错节点。空块异常触发执行单元750可以用于自动触发所述容错节点执行所述可执行文件中的所述空块异常逻辑。共识状态获得单元760可以用于触发执行所述区块链网络的自动化用例,获得所述区块链网络的所述待测试区块链共识机制的共识状态。
本公开实施方式提供的动态注入测试装置,一方面,通过在区块链项目工程中的空块异常插桩点动态注入空块异常逻辑,无需修改区块链项目工程的源代码,对源代码无侵入;另一方面,通过自动编译经过动态注入后的所述区块链项目工程,生成可执行文件,并根据待测试区块链共识机制,确定所述区块链项目工程对应的区块链网络中的容错节点,之后下发所述可执行文件至所述容错节点,自动触发所述容错节点执行所述可执行文件中的所述空块异常逻辑,接着触发执行所述区块链网络的自动化用例,获得所述区块链网络的所述待测试区块链共识机制的共识状态,实现了自动化测试,提高了测试效率,并且可以覆盖待测试区块链共识机制的各种共识场景。
在示例性实施例中,空块异常动态注入单元710可以包括:区块链项目代码获取单元,可以用于获取所述区块链项目工程的源代码;定义空块异常插桩点单元,可以用于分析所述区块链项目工程的源代码,定义需要模拟空块异常的所述空块异常插桩点;空块异常逻辑注入单元,可以用于导入模拟空块异常代码,在所述空块异常插桩点动态注入所述空块异常逻辑。
在示例性实施例中,可执行文件生成单元720可以包括:空块异常中间文件生成单元,可以用于激活所述模拟空块异常代码,生成空块异常中间文件;可执行文件生成单元,可以用于基于携带所述空块异常中间文件的所述区块链项目工程的源代码,自动编译所述区块链项目工程,生成所述可执行文件。
在示例性实施例中,所述待测试区块链共识机制可以为所述区块链网络中的出块节点能够生成空块的区块链共识机制。
在示例性实施例中,所述待测试区块链共识机制可以包括拜占庭共识机制,所述区块链网络中可以包括n个节点,n为大于或等于1的正整数。其中,容错节点确定单元730可以用于确定以下中的至少一项:确定所述区块链网络中的小于n/3个节点作为所述容错节点;确定所述区块链网络中的等于n/3个节点作为所述容错节点;确定所述区块链网络中的大于n/3个节点作为所述容错节点。
在示例性实施例中,共识状态获得单元760可以包括:自动化用例正常执行单元,可以用于若确定所述区块链网络中的小于或等于n/3个节点作为所述容错节点,则正常执行所述自动化用例;投票信息广播单元,可以用于获取所述区块链网络中除所述容错节点以外的节点,对出块节点广播的空块的投票信息;共识状态确定单元,可以用于根据所述投票信息,确定所述共识状态。
在示例性实施例中,共识状态获得单元760可以包括:自动化用例执行失败单元,可以用于若确定所述区块链网络中的大于n/3个节点作为所述容错节点,则获取自动化用例执行失败信息;区块链网络阻塞单元,可以用于根据所述自动化用例执行失败信息,确定所述共识状态为所述区块链网络进入阻塞状态。
在示例性实施例中,动态注入测试装置700还可以包括:异常运行日志存储单元,可以用于在自动触发所述容错节点执行所述可执行文件中的所述空块异常逻辑之后,将所述容错节点执行所述空块异常逻辑的结果,存储至所述容错节点对应的异常运行日志中。
在示例性实施例中,动态注入测试装置700还可以包括:测试报告生成单元,可以用于根据所述容错节点对应的异常运行日志,生成包括所述待测试区块共识机制的共识状态的测试报告。
本公开实施例提供的动态注入测试装置中的各个单元的具体实现可以参照上述动态注入测试方法中的内容,在此不再赘述。
下面参考图8,其示出了适于用来实现本申请实施例的电子设备800的结构示意图。电子设备800可以是终端设备或者服务器。
其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。
终端设备可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、可穿戴智能设备、虚拟现实设备、增强现实设备等,但并不局限于此。
图8示出的电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图8所示,电子设备800包括中央处理单元(Central Processing Unit,CPU)801,其可以根据存储在只读存储器(Read-Only Memory,ROM)802中的程序或者从储存部分808加载到随机访问存储器(Random Access Memory,RAM)803中的程序而执行各种适当的动作和处理。在RAM 803中,还存储有电子设备800操作所需的各种程序和数据。CPU801、ROM802以及RAM 803通过总线804彼此相连。输入/输出(I/O)接口805也连接至总线804。
以下部件连接至I/O接口805:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分807;包括硬盘等的储存部分808;以及包括诸如LAN(Local Area Network,局域网络)卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至I/O接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入储存部分808。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被中央处理单元(CPU)801执行时,执行本申请的系统中限定的上述功能。
需要说明的是,本申请所示的计算机可读存储介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有至少一个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读存储介质,该计算机可读存储介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含至少一个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
作为另一方面,本申请还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读存储介质承载有至少一个程序,当上述至少一个程序被一个该设备执行时,使得该设备可实现功能包括:在区块链项目工程中的空块异常插桩点,动态注入空块异常逻辑;自动编译经过动态注入后的所述区块链项目工程,生成可执行文件;根据待测试区块链共识机制,确定所述区块链项目工程对应的区块链网络中的容错节点;下发所述可执行文件至所述容错节点;自动触发所述容错节点执行所述可执行文件中的所述空块异常逻辑;触发执行所述区块链网络的自动化用例,获得所述区块链网络的所述待测试区块链共识机制的共识状态。
需要理解的是,在本公开附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台电子设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本公开实施方式的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (12)
1.一种动态注入测试方法,其特征在于,包括:
在区块链项目工程中的空块异常插桩点,动态注入空块异常逻辑;
自动编译经过动态注入后的所述区块链项目工程,生成可执行文件;
根据待测试区块链共识机制,确定所述区块链项目工程对应的区块链网络中的容错节点;
下发所述可执行文件至所述容错节点;
自动触发所述容错节点执行所述可执行文件中的所述空块异常逻辑;
触发执行所述区块链网络的自动化用例,获得所述区块链网络的所述待测试区块链共识机制的共识状态。
2.根据权利要求1所述的动态注入测试方法,其特征在于,在区块链项目工程中的空块异常插桩点,动态注入空块异常逻辑,包括:
获取所述区块链项目工程的源代码;
分析所述区块链项目工程的源代码,定义需要模拟空块异常的所述空块异常插桩点;
导入模拟空块异常代码,在所述空块异常插桩点动态注入所述空块异常逻辑。
3.根据权利要求2所述的动态注入测试方法,其特征在于,自动编译经过动态注入后的所述区块链项目工程,生成可执行文件,包括:
激活所述模拟空块异常代码,生成空块异常中间文件;
基于携带所述空块异常中间文件的所述区块链项目工程的源代码,自动编译所述区块链项目工程,生成所述可执行文件。
4.根据权利要求1所述的动态注入测试方法,其特征在于,所述待测试区块链共识机制为所述区块链网络中的出块节点能够生成空块的区块链共识机制。
5.根据权利要求1至4任一项所述的动态注入测试方法,其特征在于,所述待测试区块链共识机制包括拜占庭共识机制,所述区块链网络中包括n个节点,n为大于或等于1的正整数;其中,根据待测试区块链共识机制,确定所述区块链项目工程对应的区块链网络中的容错节点,包括以下中的至少一项:
确定所述区块链网络中的小于n/3个节点作为所述容错节点;
确定所述区块链网络中的等于n/3个节点作为所述容错节点;
确定所述区块链网络中的大于n/3个节点作为所述容错节点。
6.根据权利要求5所述的动态注入测试方法,其特征在于,触发执行所述区块链网络的自动化用例,获得所述区块链网络的所述待测试区块链共识机制的共识状态,包括:
若确定所述区块链网络中的小于或等于n/3个节点作为所述容错节点,则正常执行所述自动化用例;
获取所述区块链网络中除所述容错节点以外的节点,对出块节点广播的空块的投票信息;
根据所述投票信息,确定所述共识状态。
7.根据权利要求5所述的动态注入测试方法,其特征在于,触发执行所述区块链网络的自动化用例,获得所述区块链网络的所述待测试区块链共识机制的共识状态,包括:
若确定所述区块链网络中的大于n/3个节点作为所述容错节点,则获取自动化用例执行失败信息;
根据所述自动化用例执行失败信息,确定所述共识状态为所述区块链网络进入阻塞状态。
8.根据权利要求1所述的动态注入测试方法,其特征在于,在自动触发所述容错节点执行所述可执行文件中的所述空块异常逻辑之后,所述方法还包括:
将所述容错节点执行所述空块异常逻辑的结果,存储至所述容错节点对应的异常运行日志中。
9.根据权利要求8所述的动态注入测试方法,其特征在于,还包括:
根据所述容错节点对应的异常运行日志,生成包括所述待测试区块共识机制的共识状态的测试报告。
10.一种动态注入测试装置,其特征在于,包括:
空块异常动态注入单元,用于在区块链项目工程中的空块异常插桩点,动态注入空块异常逻辑;
可执行文件生成单元,用于自动编译经过动态注入后的所述区块链项目工程,生成可执行文件;
容错节点确定单元,用于根据待测试区块链共识机制,确定所述区块链项目工程对应的区块链网络中的容错节点;
可执行文件下发单元,用于下发所述可执行文件至所述容错节点;
空块异常触发执行单元,用于自动触发所述容错节点执行所述可执行文件中的所述空块异常逻辑;
共识状态获得单元,用于触发执行所述区块链网络的自动化用例,获得所述区块链网络的所述待测试区块链共识机制的共识状态。
11.一种计算机可读存储介质,存储有计算机可执行指令,其特征在于,所述计算机可执行指令用于执行如权利要求1至9任一权利要求所述的方法。
12.一种电子设备,其特征在于,包括:
至少一个处理器;
存储装置,配置为存储至少一个程序,当所述至少一个程序被所述至少一个处理器执行时,使得所述至少一个处理器实现如权利要求1至9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010657846.8A CN111917729B (zh) | 2020-07-09 | 2020-07-09 | 动态注入测试方法及装置、相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010657846.8A CN111917729B (zh) | 2020-07-09 | 2020-07-09 | 动态注入测试方法及装置、相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111917729A true CN111917729A (zh) | 2020-11-10 |
CN111917729B CN111917729B (zh) | 2023-04-07 |
Family
ID=73226340
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010657846.8A Active CN111917729B (zh) | 2020-07-09 | 2020-07-09 | 动态注入测试方法及装置、相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111917729B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112633879A (zh) * | 2020-12-18 | 2021-04-09 | 上海万向区块链股份公司 | 应用于区块链中能够在无交易时不出空块的共识系统及方法 |
CN117118986A (zh) * | 2023-10-25 | 2023-11-24 | 腾讯科技(深圳)有限公司 | 基于区块链的容错验证方法、装置、设备、介质及产品 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104834590A (zh) * | 2014-02-11 | 2015-08-12 | 腾讯科技(深圳)有限公司 | 软件测试方法和系统 |
CN109617759A (zh) * | 2018-12-04 | 2019-04-12 | 中钞信用卡产业发展有限公司杭州区块链技术研究院 | 区块链系统稳定性测试方法、装置、设备及存储介质 |
WO2019113016A1 (en) * | 2017-12-04 | 2019-06-13 | Dan Kikinis | System and method for performance testing of scalable distributed network transactional databases |
CN110046091A (zh) * | 2019-03-12 | 2019-07-23 | 阿里巴巴集团控股有限公司 | 一种自动测试方法和装置 |
CN110162470A (zh) * | 2019-04-28 | 2019-08-23 | 阿里巴巴集团控股有限公司 | 一种区块链的测试方法和装置 |
CN110781082A (zh) * | 2019-10-14 | 2020-02-11 | 腾讯科技(深圳)有限公司 | 接口的测试用例的生成方法及装置、介质和设备 |
CN110868337A (zh) * | 2019-11-15 | 2020-03-06 | 腾讯科技(深圳)有限公司 | 容错共识机制测试方法、装置、存储介质和计算机设备 |
CN111327490A (zh) * | 2020-01-20 | 2020-06-23 | 腾讯科技(深圳)有限公司 | 区块链的拜占庭容错检测方法及相关装置 |
CN111352835A (zh) * | 2020-02-25 | 2020-06-30 | 腾讯科技(深圳)有限公司 | 一种智能合约的测试方法、装置、设备及存储介质 |
-
2020
- 2020-07-09 CN CN202010657846.8A patent/CN111917729B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104834590A (zh) * | 2014-02-11 | 2015-08-12 | 腾讯科技(深圳)有限公司 | 软件测试方法和系统 |
WO2019113016A1 (en) * | 2017-12-04 | 2019-06-13 | Dan Kikinis | System and method for performance testing of scalable distributed network transactional databases |
CN109617759A (zh) * | 2018-12-04 | 2019-04-12 | 中钞信用卡产业发展有限公司杭州区块链技术研究院 | 区块链系统稳定性测试方法、装置、设备及存储介质 |
CN110046091A (zh) * | 2019-03-12 | 2019-07-23 | 阿里巴巴集团控股有限公司 | 一种自动测试方法和装置 |
CN110162470A (zh) * | 2019-04-28 | 2019-08-23 | 阿里巴巴集团控股有限公司 | 一种区块链的测试方法和装置 |
CN110781082A (zh) * | 2019-10-14 | 2020-02-11 | 腾讯科技(深圳)有限公司 | 接口的测试用例的生成方法及装置、介质和设备 |
CN110868337A (zh) * | 2019-11-15 | 2020-03-06 | 腾讯科技(深圳)有限公司 | 容错共识机制测试方法、装置、存储介质和计算机设备 |
CN111327490A (zh) * | 2020-01-20 | 2020-06-23 | 腾讯科技(深圳)有限公司 | 区块链的拜占庭容错检测方法及相关装置 |
CN111352835A (zh) * | 2020-02-25 | 2020-06-30 | 腾讯科技(深圳)有限公司 | 一种智能合约的测试方法、装置、设备及存储介质 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112633879A (zh) * | 2020-12-18 | 2021-04-09 | 上海万向区块链股份公司 | 应用于区块链中能够在无交易时不出空块的共识系统及方法 |
CN112633879B (zh) * | 2020-12-18 | 2022-11-04 | 上海万向区块链股份公司 | 应用于区块链中能够在无交易时不出空块的共识系统及方法 |
CN117118986A (zh) * | 2023-10-25 | 2023-11-24 | 腾讯科技(深圳)有限公司 | 基于区块链的容错验证方法、装置、设备、介质及产品 |
CN117118986B (zh) * | 2023-10-25 | 2024-02-06 | 腾讯科技(深圳)有限公司 | 基于区块链的容错验证方法、装置、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111917729B (zh) | 2023-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7384965B2 (ja) | ブロックチェーンシステム内におけるフィードバックを統合したエージェントベースチューリング完全なトランザクション | |
Guerraoui et al. | The consensus number of a cryptocurrency | |
Nizamuddin et al. | Blockchain-based framework for protecting author royalty of digital assets | |
CN111782551B (zh) | 针对区块链项目的测试方法、装置及计算机设备 | |
Demir et al. | Security smells in smart contracts | |
CN111949531B (zh) | 区块链网络的测试方法、装置、介质及电子设备 | |
US11270030B2 (en) | System and method for consensus management | |
Sukhwani | Performance modeling & analysis of hyperledger fabric (permissioned blockchain network) | |
CN111917729B (zh) | 动态注入测试方法及装置、相关设备 | |
CN116155771A (zh) | 网络异常测试方法、装置、设备、存储介质和程序 | |
Tsai et al. | Beagle: A new framework for smart contracts taking account of law | |
Zhang et al. | Fuzzing microservices in industry: Experience of applying evomaster at meituan | |
Soud et al. | A fly in the ointment: an empirical study on the characteristics of Ethereum smart contract code weaknesses | |
CN112015826A (zh) | 基于区块链的智能合约安全性检测方法及相关设备 | |
Antal et al. | Distributed Ledger Technology Review and Decentralized Applications Development Guidelines. Future Internet 2021, 13, 62 | |
Hyland et al. | Ten myths about blockchain consensus | |
De Angelis | Assessing security and performance of blockchain systems and consensus protocols: taxonomies, methodologies and benchmarking procedures | |
Kulkarni | Framework for Design and Development of Blockchain Application Using Smart Contracts | |
Buterchi et al. | Dapp for rating | |
Alam et al. | Utilizing hyperledger fabric based private blockchain and ipfs to secure educational certificate management | |
Kulkarni | Framework for Blockchain Based Decentralized Ecommerce Application Using Smart Contracts | |
Conceição | Validation of Smart Contracts Through Automated Tooling | |
Cai et al. | In-Depth Interpretation of Ethereum | |
Heiberg et al. | Use Case Validation | |
de Carvalho Conceicao | Validation of Smart Contracts Through Automated Tooling |
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 |