区块链性能的测试方法和装置、电子设备和存储介质与流程

文档序号:30738413发布日期:2022-07-13 05:06阅读:179来源:国知局
区块链性能的测试方法和装置、电子设备和存储介质与流程

1.本公开涉及测试技术,尤其是一种区块链性能的测试方法和装置、电子设备和存储介质。


背景技术:

[0002]“星火
·
链网”是基于区块链技术打造的一条许可公有链,是实现“星火
·
链网”这一国家级区块链与工业互联网协同创新新型基础设施的关键技术。其中,“星火
·
链网”的底层为bif-core(blockchain infrastructure & facility core,区块链基础设施和设备核心)区块链,该bif-core区块链的数据依赖于bid(blockchain-based identifier,以区块链为基础的标识符)分布式标识符。该区块链包括多个区块,该区块链具有多个共识节点和普通节点。
[0003]
随着上链数据量的不断增加,这就对bif-core区块链的效率、容错与健壮性提出了更高的要求,目前市面上还没有针对bif-core区块链性能的测试方法。因此,亟待一种针对bif-core区块链的测试方法。


技术实现要素:

[0004]
本公开实施例提供一种区块链性能的测试方法和装置、电子设备和存储介质,以解决现有技术中没有针对bif-core区块链的测试方法的问题。
[0005]
本公开实施例的一个方面,提供了一种区块链性能的测试方法,包括:根据待测试区块链的数据生成规则,生成测试数据和多个数据发送账户;从所述多个数据发送账户中,获取第一并发量对应的数量的数据发送账户作为测试账户;在预设时长内,以各测试账户向所述待测试区块链的至少一个共识节点发送所述测试数据;响应于所述待测试区块链反馈的断言数据表征完成状态,执行所述向所述待测试区块链的至少一个共识节点发送所述测试数据的操作;响应于所述待测试区块链反馈的断言数据表征缓存池满载状态,向所述待测试区块链的至少一个共识节点发送预设数据;得到测试结果数据;根据所述测试结果数据,确定所述待测试区块链的性能数据。
[0006]
可选地,在本公开上述任一实施例的方法中,还包括:响应于所述待测试区块链反馈的断言数据表征异常状态,停止执行所述向所述待测试区块链的至少一个共识节点发送所述测试数据的操作。
[0007]
可选地,在本公开上述任一实施例的方法中,还包括:响应于所述待测试区块链的性能数据大于或等于预设性能数据,获取第二并发量,将所述第二并发量作为所述第一并发量,执行所述从所述多个数据发送账户中,获取第一并发量对应的数量的数据发送账户作为测试账户的操作,其中,所述第二并发量大于所述第一并发量。
[0008]
可选地,在本公开上述任一实施例的方法中,所述根据所述测试结果数据,确定所述待测试区块链的性能数据,包括:获取所述待测试区块链测试前的特征数据;根据所述待测试区块链测试前的特征数据和所述测试结果数据,确定所述待测试区块链的性能数据,
其中,所述待测试区块链的性能数据包括平均出块时间、每秒事务处理量和每秒查询率中的一种或几种。
[0009]
可选地,在本公开上述任一实施例的方法中,所述待测试区块链测试前的特征数据包括测试前区块高度、测试前处理完成任务的总量、测试前最后区块的生成时间和测试开始时间中的一种或几种;所述测试结果数据包括测试后区块高度、测试后处理完成任务的总量、测试中最新区块的生成时间、测试结束时间、查询成功的请求总数、查询失败的请求总数和查询请求总数中的一种或几种;所述根据所述待测试区块链测试前的特征数据和所述测试结果数据,确定所述待测试区块链的性能数据,包括:根据所述测试中最新区块的生成时间、所述测试前最后区块的生成时间、所述测试前区块高度和所述测试后区块高度,确定所述平均出块时间;根据所述测试后处理完成任务的总量、所述测试前处理完成任务的总量、所述测试中最新区块的生成时间和所述测试前最后区块的生成时间,确定所述每秒事务处理量;响应于所述查询失败的请求总数与所述查询请求总数的比值小于或等于预设阈值,根据所述查询成功的请求总数、所述测试结束时间和所述测试开始时间,确定所述每秒查询率。
[0010]
可选地,在本公开上述任一实施例的方法中,还包括:响应于所述待测试区块链反馈的断言数据表征完成状态,增加所述各测试账户的nonce值;响应于所述待测试区块链反馈的断言数据表征缓存池满载状态,不增加所述各测试账户的nonce值。
[0011]
根据本公开实施例的另一个方面,提供了一种区块链性能的测试装置,包括:生成模块,用于根据待测试区块链的数据生成规则,生成测试数据和多个数据发送账户;获取模块,用于从所述多个数据发送账户中,获取第一并发量对应的数量的数据发送账户作为测试账户;测试模块,用于在预设时长内,以各测试账户向所述待测试区块链的至少一个共识节点发送所述测试数据;响应于所述待测试区块链反馈的断言数据表征完成状态,执行所述向所述待测试区块链的至少一个共识节点发送所述测试数据的操作;响应于所述待测试区块链反馈的断言数据表征缓存池满载状态,向所述待测试区块链的至少一个共识节点发送预设数据;结果数据获取模块,用于得到测试结果数据;确定模块,用于根据所述测试结果数据,确定所述待测试区块链的性能数据。
[0012]
可选地,在本公开上述任一实施例的装置中,所述测试模块还用于:响应于所述待测试区块链反馈的断言数据表征异常状态,停止执行所述向所述待测试区块链的至少一个共识节点发送所述测试数据的操作。
[0013]
根据本公开实施例的再一个方面,提供了一种电子设备,包括:存储器,用于存储计算机程序;处理器,用于执行所述存储器中存储的计算机程序,且所述计算机程序被执行时,实现上述任一所述的测试方法。
[0014]
根据本公开实施例的又一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时,实现上述任一所述的测试方法。
[0015]
本公开实施例提供了一种区块链性能的测试方法和装置、电子设备和存储介质,其中,方法包括:根据待测试区块链的数据生成规则,生成测试数据和多个数据发送账户;从多个数据发送账户中,获取第一并发量对应的数量的数据发送账户作为测试账户;在预设时长内,以各测试账户向所述待测试区块链的至少一个共识节点发送测试数据;响应于待测试区块链反馈的断言数据表征完成状态,执行向所述待测试区块链的至少一个共识节
点发送所述测试数据的操作;响应于待测试区块链反馈的断言数据表征缓存池满载状态,向待测试区块链的至少一个共识节点发送预设数据;得到测试结果数据;根据测试结果数据,确定待测试区块链的性能数据。由此,本公开实施例中,通过各测试账户在预设时长内向待测试区块链的共识节点发送测试数据,得到测试结果数据,并根据测试结果数据,确定待测试区块链的性能数据,实现了对区块链的性能的高效准确的测试。另外,本公开实施例中,在向待测试区块链发送测试数据时,根据上一次发送测试数据或预设数据后,待测试区块链反馈的断言数据,确定该次发送的内容,实现了根据待测试区块链的状态,及时调整发送给共识节点的数据,提高了对待测试区块链的性能的测试的准确性,避免了在待测试区块链的缓存池满载时,继续给待测试区块链发送测试数据,导致测试结果偏差较大的情况。
[0016]
下面通过附图和实施例,对本公开的技术方案做进一步的详细描述。
附图说明
[0017]
构成说明书的一部分的附图描述了本公开的实施例,并且连同描述一起用于解释本公开的原理。
[0018]
参照附图,根据下面的详细描述,可以更加清楚地理解本公开,其中:图1为本公开实施例的区块链性能的测试方法一个实施例的流程图;图2为本公开实施例的区块链性能的测试方法另一个实施例的流程图;图3为本公开实施例的步骤s500的流程图;图4为本公开实施例区块链性能的测试装置一个实施例的结构示意图;图5为本公开电子设备一个应用实施例的结构示意图。
具体实施方式
[0019]
现在将参照附图来详细描述本公开的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。
[0020]
本领域技术人员可以理解,本公开实施例中的“第一”、“第二”等术语仅用于区别不同步骤、设备或模块等,既不代表任何特定技术含义,也不表示它们之间的必然逻辑顺序。
[0021]
还应理解,在本公开实施例中,“多个”可以指两个或两个以上,“至少一个”可以指一个、两个或两个以上。
[0022]
还应理解,对于本公开实施例中提及的任一部件、数据或结构,在没有明确限定或者在前后文给出相反启示的情况下,一般可以理解为一个或多个。
[0023]
另外,本公开中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本公开中字符“/”,一般表示前后关联对象是一种“或”的关系。
[0024]
还应理解,本公开对各个实施例的描述着重强调各个实施例之间的不同之处,其相同或相似之处可以相互参考,为了简洁,不再一一赘述。
[0025]
同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
[0026]
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。
[0027]
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
[0028]
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
[0029]
本公开实施例可以应用于终端设备、计算机系统、服务器等电子设备,其可与众多其它通用或专用计算系统环境或配置一起操作。适于与终端设备、计算机系统、服务器等电子设备一起使用的众所周知的终端设备、计算系统、环境和/或配置的例子包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统﹑大型计算机系统和包括上述任何系统的分布式云计算技术环境,等等。
[0030]
终端设备、计算机系统、服务器等电子设备可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
[0031]
图1示出本公开实施例中区块链性能的测试方法的流程示意图。本实施例可应用在电子设备上,如图1所示,本实施例的区块链性能的测试方法包括如下步骤:步骤s100,根据待测试区块链的数据生成规则,生成测试数据和多个数据发送账户。
[0032]
其中,待测试区块链包括多个区块,待测试区块链具有多个共识节点和多个普通节点,普通节点用于交易处理、交易查询、交易数据存储等,共识节点除了用于完成普通节点的交易处理、交易查询、交易数据存储等以外,还用于达成共识以完成待测试区块链的账本更新。
[0033]
根据待测试区块链的数据生成规则生成可以多个测试数据,测试数据可以为交易数据、查询交易请求等。示例性的,可以采用shell脚本、nodejs脚本或jmeter脚本同时创建多个测试数据。
[0034]
数据发送账户用于将测试数据发送给待测试区块链的共识节点。可以预先创建多个初始账户,对多个初始账户进行初始化上链处理,以使待测试区块链可以接收和发送数据给多个初始账户,将经过初始化上链处理后的多个初始账户作为数据发送账户,每一数据发送账户可以包括:id(identity,身份)标识、公钥和私钥。
[0035]
示例性的,待测试区块链可以为bif-core(blockchain infrastructure & facility core,区块链基础设施和设备核心)区块链, bif-core区块链的数据依赖于bid(blockchain-based identifier,区块链基础标识符)分布式标识符。
[0036]
bif-core区块链按层次结构可以分为数据层、网络层、共识层、激励层、合约层和应用层。数据层、网络层和共识层三者构成了区块链层级的底层基础,也是区块链必不可少的三个元素,缺少任何一个都无法称之为真正的区块链技术。
[0037]
数据层(data layer)为区块链四大核心技术中的数据结构,即“区块+链”的结构;从还没有记录交易信息的创世区块起,直到当前仍一直在新添加的区块,构成的链式结构中包含了哈希值、随机数、认证交易的时间戳、交易信息数据、公钥和私钥等,是整个区块链技术中最底层的数据结构。网络层(network layer)为区块链四大核心技术中的分布式存储,主要是点对点机制、数据传播机制和数据验证机制;分布式算法以及加密签名等都在网络层中实现,区块链上的各个节点通过这种方式来保持联系,共同维护整个区块链账本,例如闪电网络、雷电网络等第二层支付协议。共识层(consensus layer)为区块链四大核心技术中的共识机制,主要包括共识算法机制,目前支持pbft(practical byzantine fault tolerance,能够容忍拜占庭错误)算法、vbft(vrifiable byzantine fault tolerant,可验证拜占庭容错)共识机制。激励层(actuator layer)包括激励机制和分配制度;在区块链中一般指挖矿奖励,通过奖励一部分数字资产从而激励矿工去验证交易信息,从而维持挖矿活动以及区块链账本更新的持续进行;另外,还会制定一些相关制度,奖惩分明,激励记账节点,惩罚恶意节点。合约层(contract layer)与智能合约有关;把代码写到合约里,就可以自定义约束条件,不需要第三方信任背书,到时间立即实时操作;当然除了智能合约,是区块链作为信任机器的重要层级,还有一些别的脚本代码、侧链应用等。应用层(application layer)为应用场景,类似于手机上的各种 app,即区块链的各种应用场景,例如以太坊等就是区块链的应用项目,这个层面包括未来区块链应用落地的各个方面。
[0038]
可以离线批量创建多个初始账户,例如,可以离线批量创建1000个初始账户,并保存成文件source_account_1000.txt,利用待测试区块链的创世账户对多个初始账户进行初始化上链处理,以使待测试区块链的共识节点和普通节点均可以接收和发送数据给该多个初始账户,经创世账户进行初始化上链处理后的初始账户的id标识为bid标识。其中,创世账户用于对初始账户初始化上链处理,创世账户的id标识为bid标识,bid标识是基于w3c的did(decentralized identifier,分布式标识)标准开发的分布式标识, bid标识支持39-57位变长编码方式,可以有效适应各种业务场景,兼容各类设备。例如,bid标识的结构形式可以为:id:bid:byol:zf2ll97sienhanyptw1ma5rbbppm;其中,id:bid表示前缀,byol表示共识码(即ac号(accession number)),z表示加密类型,f表示编码类型,2ll97sienhanyptw1ma5rbbppm表示后缀。共识码表示该bid标识所标识的账户所属区块链。
[0039]
步骤s200,从多个数据发送账户中,获取第一并发量对应的数量的数据发送账户作为测试账户。
[0040]
其中,可以预先设置第一并发量,第一并发量对应的数量可以根据实际需求设定。并发量为同时访问区块链的用户的数量。将同时访问待测试区块链的测试账户的数量称为第一并发量。可以随机或根据预设筛选规则等,从由步骤s100生成的多个数据发送账户中筛选出第一并发量对应数量的数据发送账户作为测试账户。测试账户用于向待测试区块链的共识节点发送测试数据。
[0041]
步骤s300,在预设时长内,以各测试账户向待测试区块链的至少一个共识节点发送测试数据;响应于待测试区块链反馈的断言数据表征完成状态,执行向待测试区块链的至少一个共识节点发送所述测试数据的操作;响应于待测试区块链反馈的断言数据表征缓
存池满载状态,向待测试区块链的至少一个共识节点发送预设数据。
[0042]
其中,各测试账户可以向待测试区块链的一个或多个共识节点发送测试数据。预设时长可以根据实际测试需求设定。预设数据可以为空数据,例如,可以为空交易数据,即交易数额为0的交易数据。任一共识节点可以接收一个或多个测试账户发送的测试数据。
[0043]
在预设时长内,各测试账户将测试数据发送给待测试区块链的至少一个共识节点,待测试区块链反馈断言数据;当反馈的断言数据表征完成状态,表示待测试区块链以对测试数据处理完成,此时各测试账户继续向共识节点发送测试数据;当反馈的断言数据表征缓存池满载状态,表示待测试区块链的缓存池已经满载,各测试账户向共识节点发送预设数据,直至待测试区块链反馈的断言数据表征完成状态后,各测试账户向至少一个共识节点发送测试数据。缓存池用于缓存测试数据或预设数据。
[0044]
示例性的,可以选择多个设置在共识节点的账户作为接收账户,接收账户用于接收测试账户发送的测试数据和/或预设数据,其中,测试账户和接收账户为不同账户。可以通过待测区块链反馈的error code确定断言数据,例如,当反馈的error code为0时,此时断言数据表征完成状态,当反馈的error code为160时,此时断言数据表征缓存池满载状态。
[0045]
步骤s400,得到测试结果数据。
[0046]
其中,在预设时长后,即对待测试区块链测试完成,获取待测试区块链的测试结果数据。测试结果数据可以包括测试后区块高度、测试后处理完成任务的总量、测试中最新区块的生成时间等。
[0047]
步骤s500,根据测试结果数据,确定待测试区块链的性能数据。
[0048]
其中,性能数据可以包括待测试区块链的平均出块时间(time,t),每秒事物处理量(transaction per second,tps)、每秒查询率(queriesper second,qps)等。可以根据待测试区块链的测试结果数据,计算待测试区块链的性能数据。
[0049]
性能数据还可以包括待测试区块链的资源消耗数据,例如,资源消耗数据可以包括:程序占用cpu使用率、内存占用率,程序占用i/o率等。其中,可以top指令查看cpu的参数,如,us(用户态使用的cpu时间百分比)、sy(系统态使用的cpu时间百分比)、wa(cpu等待io完成时间百分比)等,根据cpu的参数确定程序占用cpu使用率,可以通过iostat命令查看i/o(input/output,输入/输出)的参数,如每秒读取的扇区数(rsec/s)、每秒写入的扇区数(wsec/s)等,根据i/o的参数确定程序占用i/o率。可以通过top指令查看内存占用率。
[0050]
本公开实施例中,通过各测试账户在预设时长内向待测试区块链的共识节点发送测试数据,得到测试结果数据,并根据测试结果数据,确定待测试区块链的性能数据,实现了对区块链的性能的高效准确的测试。另外,本公开实施例中,在向待测试区块链发送测试数据时,根据上一次发送测试数据或预设数据后,待测试区块链反馈的断言数据,确定该次发送的内容,实现了根据待测试区块链的状态,及时调整发送给共识节点的数据,提高了对待测试区块链的性能的测试的准确性,避免了在待测试区块链的缓存池满载时,继续给待测试区块链发送测试数据,导致测试结果偏差较大的情况。
[0051]
在一个可选实施例中,区块链性能的测试方法还包括:响应于待测试区块链反馈的断言数据表征异常状态,停止执行向待测试区块链的至少一个共识节点发送测试数据的操作。
[0052]
其中,异常状态表征待测试区块为异常状态。在预设时长内,各测试账户将测试数据发送给待测试区块链的至少一个共识节点,待测试区块链反馈断言数据,当反馈的断言数据表征异常状态,即表征待测试区块链异常,例如,无法连接待测试区块链、待测试区块链中有区块处于工作异常状态等,此时,各测试账户停止向待测试区块链的共识节点发送测试数据。同时,当待测试区块链反馈的断言数据为异常状态时还可以发出报警信息提示待测试区块链异常。
[0053]
示例性的,可以通过待测区块链反馈的error code确定断言数据,例如,当反馈的error code为非0和160的其他数字时,确定断言数据表征异常状态。
[0054]
本公开实施例中,在待测试区块链反馈的断言数据为异常状态时,及时停止向待测试区块链发送测试数据,避免了在待测试区块链异常时还继续向待测试区块链发送测试数据,对待测试区块链测试,导致的资源浪费。
[0055]
在一个可选实施例中,如图2所示,区块链性能的测试方法还包括:步骤s600,将待测试区块链的性能数据与预设性能数据比较。
[0056]
其中,预设性能数据可以为预设平均出块时间或预设tps。预设性能数据可以根据实际需求设置。示例性的,当预设性能数据为预设tps时,将待测试区块链的性能数据中的tps与预设tps比较。
[0057]
步骤s700,响应于待测试区块链的性能数据大于或等于预设性能数据,获取第二并发量,将第二并发量作为第一并发量,执行从多个数据发送账户中,获取第一并发量对应的数量的数据发送账户作为测试账户的操作。
[0058]
其中,第二并发量大于第一并发量。可以预设多个第二并发量,多个第二并发量中的每一第二并发量对应的数量大于第一并发量对应的数量。多个第二并发量中各第二并发量对应的数量增加设置,可以按照每一第二并发量对应的数量依次增加排序。当待测试区块链的性能数据大于或等于预设性能数据时,获取多个第二并发量中排序最靠前的第二并发量作为第一并发量,执行步骤s200以及步骤s200以后的步骤,对待测试区块链继续测试。
[0059]
示例性的,预先设置3个第二并发量,其分别为第二并发量a、第二并发量b和第二并发量c;第二并发量a对应的数量为400,第二并发量b对应的数量为600,第二并发量c对应的数量为800。第二并发量a、第二并发量b和第二并发量c的排序为第二并发量a排序第一、第二并发量b排序第二和第二并发量c排序第三。当待测试区块链的性能数据大于或等于预设性能数据时,获取第二并发量a作为第一并发量执行步骤s200以及步骤s200以后的步骤。
[0060]
响应于待测试区块链的性能数据小于预设性能数据,停止对待测区块链测试。
[0061]
本公开实施例中,通过设置大于第一并发量的第二并发量,在待测试区块链的性能数据大于或等于预设性能数据时,将第二并发量作为第一并发量对待测区块链进行测试,实现了自动对待测试区块链在不同并发量下的性能测试。另外,由于使用不同的并发量对待测试区块链进行测试,得到待测试区块链的多个性能数据,为后续改进或调整区块链提供了丰富的数基础。同时,由于每次测试时,获取的第二并发量对应的数量都大于第一并发量对应的数量,因此可以得到满足预设性能数据下的待测试区块链可以承受的最大并发量,进一步为后续对区块链的改进和研究提供了可靠的参考数据。
[0062]
在一个可选实施例中,如图3所示,步骤500可以包括:s510,获取待测试区块链测试前的特征数据。
[0063]
其中,在对待测试区块链测试前,获取待测试区块链的特征数据。待测试区块链的特征数据用于表征待测试区块链的性能。可以通过查询待测试区块链的性能参数得到待测试区块链测试前的特征数据。
[0064]
s520,根据待测试区块链测试前的特征数据和测试结果数据,确定待测试区块链的性能数据。
[0065]
其中,待测试区块链的性能数据包括平均出块时间、tps和qps中的一种或几种。
[0066]
在一个可选实施例中,待测试区块链测试前的特征数据包括测试前区块高度、测试前处理完成任务的总量、测试前最后区块的生成时间和测试开始时间中的一种或几种;其中,测试前区块高度可以为测试前待测试区块链的区块高度;测试前处理完成任务的总量可以为测试前待测试区块链处理完成任务的总量;测试前最后区块的生成时间可以为测试前待测试区块链的最后区块生成时的时间戳;测试开始时间可以为待测试区块链开始测试的时间,即测试开始时的系统时间戳。
[0067]
测试结果数据包括:测试后区块高度、测试后处理完成任务的总量、测试中最新区块的生成时间、测试结束时间、查询成功的请求总数、查询失败的请求总数和查询请求总数中的一种或几种;其中,测试后区块高度可以为测试后待测试区块链的区块高度;测试后处理完成任务的总量可以为测试结束后待测试区块链处理完成任务的总量;测试中最新区块的生成时间可以为测试过程中最后一个区块生成时的时间戳;测试结束时间为待测试区块链测试结束的时间,即测试结束时系统时间戳;查询成功的请求总数可以为测试结束后待测试区块链中查询成功的请求总数;查询失败的请求总数可以为测试结束后待测试区块链中查询失败的请求总数;查询请求总数可以为测试结束后待测试区块中查询请求总数。
[0068]
步骤s520可以包括:根据测试中最新区块的生成时间、测试前最后区块的生成时间、测试前区块高度和测试后区块高度,确定平均出块时间。
[0069]
其中,可以根据公式(1)确定平均出块时间。
[0070]
t= (et-st)/(eh-sh)

(1);其中,t为平均出块时间,et为测试中最新区块的生成时间,st为测试前最后区块的生成时间,eh为测试后区块高度,sh为测试前区块高度。
[0071]
根据测试后处理完成任务的总量、测试前处理完成任务的总量、测试中最新区块的生成时间和测试前最后区块的生成时间,确定每秒事务处理量。
[0072]
其中,可以根据公式(2)确定每秒事务处理量。
[0073]
tps=(etc-stc)/(et-st)

(2);其中,tps为每秒事务处理量,etc为测试后处理完成任务的总量,stc为测试前处理完成任务的总量,et为测试中最新区块的生成时间,st为测试前最后区块的生成时间。
[0074]
响应于查询失败的请求总数与查询请求总数的比值小于或等于预设阈值,根据查询成功的请求总数、测试结束时间和测试开始时间,确定每秒查询率。
[0075]
其中,预设阈值可以根据测试的实际需求设置。在查询失败的请求总数与查询请求总数的比值小于或等于预设阈值时,可以根据公式(3)确定每秒查询率。
[0076]
(ec/tc)≤预设阈值(例如预设阈值为0.05%)时,qps=qc/(eqt-sqt)

(3);其中,qps为每秒查询率,qc为查询成功的请求总数,eqt为测试结束时间,sqt为测
试开始时间,ec查询失败的请求总数,tc为查询请求总数。
[0077]
示例性的,当测试数据为交易查询请求时,待测试区块链测试前的特征数据包括:测试开始时间;测试结果数据包括:测试结束时间、查询成功的请求总数、查询失败的请求总数和查询请求总数,待测试区块链的性能数据包括每秒查询率。
[0078]
当测试数据为交易数据时,待测试区块链测试前的特征数据包括:测试前区块高度、测试前处理完成任务的总量和测试前最后区块的生成时间;测试结果数据包括:测试后区块高度、测试后处理完成任务的总量和测试中最新区块的生成时间;待测试区块链的性能数据包括:每秒事务处理量和平均出块时间。
[0079]
在一个可选实施例中,区块链性能的测试方法还包括:响应于待测试区块链反馈的断言数据表征完成状态,增加各测试账户的nonce值;响应于待测试区块链反馈的断言数据表征缓存池满载状态,不增加各测试账户的nonce值。
[0080]
其中,nonce值用于表示测试账户的账户属性,主要用于表示和记录测试账户发送测试数据的数量,每一测试账户具有一个nonce值,测试账户每向待测试区块链的共识节点发送一个测试数据且反馈的断言数据表征完成状态时,该测试账户的nonce值加一,每个测试账户的nonce值必需连续。在对待测区块链测试前,查询测试账户的nonce值,例如,可以通过各测试账户的地址查询各测试账户的nonce值,nonce值可以key-value形式存储到全局变量中(key 是测试账户的地址,value是nonce值)。可以创建一个nonce计数器用于在测试过程中,对各测试账户的nonce值进行计数处理,例如,在测试过程中,当测试账户向待测试区块链的共识节点发送测试数据,待测试区块链反馈的断言数据表征完成状态,此时nonce计数器给测试账户的nonce值加一。
[0081]
当待测试区块链反馈的断言数据表征完成状态,此时表示待测试区块链处理完成测试账户发送的测试数据,此时增加测试账户的nonce值,例如,可以每接收到一次反馈的断言数据表征完成状态后,各测试账户的nonce值加一;当待测试区块链反馈的断言数据表征缓存池满载状态,表示待测试区块链的缓存池已满,此时不增加测试账户的nonce值,例如,可以在接收到反馈的断言数据表征缓存池满载状态后,各测试账户的nonce值加零。
[0082]
本公开实施例中,在反馈的断言数据表征完成状态时,增加测试账户的nonce值,有效的保证测试账户的nonce值的准确性,为后续通过nonce值统计待测试区块链处理完成的测试数据数量以及其他待测试区块链的其他性能数据提供了准确数据。
[0083]
在一个可选实施例中,在对待测试区块链测试前,可以先配置待测试区块链的测试环境。
[0084]
示例性的,可以采用双物理机模式进行测试,用于测试的待测试区块链的共识节点可以为四个共识节点。该四个共识分别分布在两台物理机上。在两台物理机中的任意一台物理机上设置虚拟的试压机,虚拟的试压机用于向待测试区块链的共识节点发送测试数据或预设数据。四个共识节点中,两个共识节点的加密方式可以为国密sm2,另两个共识节点的加密方式可以采用ed25519算法。
[0085]
还可以设置测试账户的循环次数,该循环次数为测试账户可以发送测试数据和/或预设数据的总量。也可以对断言数据和/或哈希值的反馈时长进行超时设置,当待测试区块链的反馈断言数据和/或哈希值的反馈时长超过超时设置中的设置时长时,反馈报错。
[0086]
图4示出本公开实施例中区块链性能的测试装置的框图。如图4所示,该实施例区
块链性能的测试装置包括:生成模块800,用于根据待测试区块链的数据生成规则,生成测试数据和多个数据发送账户;获取模块810,用于从所述多个数据发送账户中,获取第一并发量对应的数量的数据发送账户作为测试账户;测试模块820,用于在预设时长内,以各测试账户向所述待测试区块链的至少一个共识节点发送所述测试数据;响应于所述待测试区块链反馈的断言数据表征完成状态,执行所述向所述待测试区块链的至少一个共识节点发送所述测试数据的操作;响应于所述待测试区块链反馈的断言数据表征缓存池满载状态,向所述待测试区块链的至少一个共识节点发送预设数据;结果数据获取模块830,用于得到测试结果数据;确定模块840,用于根据所述测试结果数据,确定所述待测试区块链的性能数据。
[0087]
可选地,所述测试模块820还用于响应于所述待测试区块链反馈的断言数据表征异常状态,停止执行所述向所述待测试区块链的至少一个共识节点发送所述测试数据的操作。
[0088]
可选地,测试方装置还包括:第一响应模块(图中未示出),用于响应于所述待测试区块链的性能数据大于或等于预设性能数据,获取第二并发量,将所述第二并发量作为所述第一并发量,执行所述从所述多个数据发送账户中,获取第一并发量对应的数量的数据发送账户作为测试账户的操作,其中,所述第二并发量大于所述第一并发量。
[0089]
可选地,所述确定模块840包括:获取子模块(图中未示出),用于获取所述待测试区块链测试前的特征数据;确定子模块(图中未示出),用于根据所述待测试区块链测试前的特征数据和所述测试结果数据,确定所述待测试区块链的性能数据,其中,所述待测试区块链的性能数据包括平均出块时间、每秒事务处理量和每秒查询率中的一种或几种。
[0090]
可选地,测试方装置还包括:所述待测试区块链测试前的特征数据包括测试前区块高度、测试前处理完成任务的总量、测试前最后区块的生成时间和测试开始时间中的一种或几种;所述测试结果数据包括测试后区块高度、测试后处理完成任务的总量、测试中最新区块的生成时间、测试结束时间、查询成功的请求总数、查询失败的请求总数和查询请求总数中的一种或几种;所述确定子模块还用于:根据所述测试中最新区块的生成时间、所述测试前最后区块的生成时间、所述测试前区块高度和所述测试后区块高度,确定所述平均出块时间;根据所述测试后处理完成任务的总量、所述测试前处理完成任务的总量、所述测试中最新区块的生成时间和所述测试前最后区块的生成时间,确定所述每秒事务处理量;响应于所述查询失败的请求总数与所述查询请求总数的比值小于或等于预设阈值,根据所述查询成功的请求总数、所述测试结束时间和所述测试开始时间,确定所述每秒查询率。
[0091]
可选地,测试装置还包括:第二响应模块(图中未示出),用于响应于所述待测试区块链反馈的断言数据表征完成状态,增加所述各测试账户的nonce值;
第三响应模块(图中未示出),用于响应于所述待测试区块链反馈的断言数据表征缓存池满载状态,不增加所述各测试账户的nonce值。
[0092]
另外,本公开实施例还提供了一种电子设备,包括:存储器,用于存储计算机程序;处理器,用于执行所述存储器中存储的计算机程序,且所述计算机程序被执行时,实现本公开上述任一实施例所述的区块链性能的测试方法。
[0093]
如图5所示,电子设备包括一个或多个处理器和存储器。
[0094]
处理器可以是中央处理单元(cpu)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备中的其他组件以执行期望的功能。
[0095]
存储器可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(ram)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(rom)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器可以运行所述程序指令,以实现上文所述的本公开的各个实施例的区块链性能的测试方法以及/或者其他期望的功能。
[0096]
在一个示例中,电子设备还可以包括:输入装置和输出装置,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。
[0097]
此外,该输入设备还可以包括例如键盘、鼠标等等。
[0098]
该输出装置可以向外部输出各种信息,包括确定出的距离信息、方向信息等。该输出设备可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
[0099]
当然,为了简化,图5中仅示出了该电子设备中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备还可以包括任何其他适当的组件。
[0100]
除了上述方法和设备以外,本公开的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述部分中描述的根据本公开各种实施例的区块链性能的测试方法中的步骤。
[0101]
所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如java、c++等,还包括常规的过程式程序设计语言,诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
[0102]
此外,本公开的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述部分中描述的根据本公开各种实施例的区块链性能的测试方法中的步骤。
[0103]
所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的
例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。
[0104]
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。
[0105]
以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本公开的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本公开为必须采用上述具体的细节来实现。
[0106]
本说明书中各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似的部分相互参见即可。对于系统实施例而言,由于其与方法实施例基本对应,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0107]
本公开中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
[0108]
可能以许多方式来实现本公开的方法和装置。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的方法和装置。用于所述方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的方法的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的方法的程序的记录介质。
[0109]
还需要指出的是,在本公开的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。
[0110]
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本公开。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本公开的范围。因此,本公开不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
[0111]
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本公开的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1