掌桥专利:专业的专利平台
掌桥专利
首页

区块链网络中的测试方法、装置及测试设备

文献发布时间:2023-06-19 09:30:39


区块链网络中的测试方法、装置及测试设备

技术领域

本申请涉及区块链技术领域,尤其涉及一种区块链网络中的测试方法、装置及测试设备。

背景技术

区块链是一种多方共同维护,使用密码学保证传输和访问安全,能够实现数据一致存储、难以篡改、防止抵赖的记账技术,也就是分布式账本技术。最近的研究表明区块链可能成为未来几年互联网应用的一个底层技术,会应用于各行各业的各种项目中比如商品溯源。

区块链在不同行业中应用时,需要基于区块链技术开发相应的区块链产品或者相应的区块链项目(区块链产品和区块链项目可以统称为区块链服务),以及部署相应的区块链网络。为了保证区块链能够更好地为用户提供服务,在区块链产品或者区块链项目投入到区块链网络中使用之前,需要在区块链网络中对区块链产品或者区块链项目进行测试。因此,在区块链技术领域中,如何进行区块链服务测试成为当今关注的重点问题。

发明内容

本发明实施例提供了一种区块链网络中的测试方法、装置及测试设备,可提高在区块链网络中对区块链服务测试的完备性和便捷性。

一方面,本发明实施例提供了一种区块链网络中的测试方法,所述区块链网络包括M个节点,M为大于1的整数;每个节点中均部署有用于提供区块链服务的区块链代码,所述区块链代码中包含桩代码,所述方法包括:

在基于测试用例集对所述区块链服务进行测试的过程中,当存在代码覆盖信息收集事件时,获取当前时刻所述M个节点中每个节点对应的代码覆盖信息;其中,节点m对应的代码覆盖信息是所述节点m通过运行所述节点m中部署的所述区块链代码包含的所述桩代码收集到的,m大于等于1且小于等于M;

根据所述M个节点中每个节点对应的代码覆盖信息确定当前时刻所述区块链网络的联合代码覆盖率,并基于所述联合代码覆盖率对所述区块链服务进行测试管理。

一方面,本发明实施例提供了一种区块链网络中的测试装置,所述区块链网络包括M个节点,M为大于1的整数;每个节点中均部署有用于提供区块链服务的区块链代码,所述区块链代码中包含桩代码,所述装置包括:

获取单元,用于在基于测试用例集对所述区块链服务进行测试的过程中,当存在代码覆盖信息收集事件时,获取当前时刻所述M个节点中每个节点对应的代码覆盖信息;其中,节点m对应的代码覆盖信息是所述节点m通过运行所述节点m中部署的所述区块链代码包含的所述桩代码收集到的,m大于等于1且小于等于M;

处理单元,用于根据所述M个节点中每个节点对应的代码覆盖率信息确定当前时刻所述区块链网络的联合代码覆盖率,并基于所述联合代码覆盖率对所述区块链服务进行测试管理。

在一个实施例中,所述区块链代码包括至少一个代码模块,所述每个节点对应的代码覆盖信息包括每个节点中部署的所述区块链代码已被运行的代码模块;所述处理单元在根据所述M个节点中每个节点对应的代码覆盖信息确定当前时刻所述区块链网络的联合代码覆盖率时,执行如下步骤:

将各个节点中部署的所述区块链代码已被运行的代码模块进行取并集运算,得到在所述区块链网络中所述区块链代码已被运行的代码模块;基于所述至少一个代码模块的总数量和在所述区块链网络中所述区块链代码已被运行的代码模块的第一数量,确定当前时刻所述区块链网络的联合代码覆盖率。

在一个实施例中,所述代码覆盖信息收集事件是指接收到用于触发覆盖信息收集的代码指令;或者,所述代码覆盖率信息收集事件是指检测到所述测试用例集中任意一个测试用例执行完成。

在一个实施例中,所述测试装置还包括显示单元,所述显示单元用于:若检测到查看节点n中代码覆盖率的代码指令,则显示所述节点n中代码覆盖率,n大于等于1且小于等于M;所述节点n中代码覆盖率是基于所述节点n中部署的所述区块链代码已被运行的代码模块的数量,和所述区块链代码包括的至少一个代码模块的总数量确定的。

在一个实施例中,所述处理单元,用于根据所述联合代码覆盖率生成所述区块链网络对应的覆盖率报告,所述覆盖率报告包括已添加标记的区块链代码,所述已添加标记的区块链代码中已被运行的代码模块中代码内容以第一形式进行标记,未被运行的代码模块中代码内容以第二形式进行标记。

在一个实施例中,所述代码覆盖信息收集事件是指接收到用于触发覆盖信息收集的代码指令,且所述代码指令是在所述测试用例集中的目标测试用例执行完成时接收到的;或者,所述代码覆盖信息收集事件是指检测到所述目标测试用例执行完成;

所述处理单元,还用于:建立所述目标测试用例和在所述区块链网络中所述区块链代码已被运行的代码模块之间的对应关系;根据所述对应关系优化所述目标测试用例,以使基于优化后的目标测试用户对所述区块链服务进行测试时,在所述区块链网络中所述区块链代码已被运行的代码模块的数量大于所述第一数量。

在一个实施例中,所述测试装置还包括存储单元,所述存储单元用于将所述对应关系存储到用于构建测试用例的参考信息集中,所述参考信息集包括多组测试用例和在所述区块链网络中所述区块链代码已被运行的代码模块之间的对应关系;

所述处理单元,还用于基于所述参考信息集构建新的测试用例,以使基于所述新的测试用例对所述区块链服务进行测试时,在所述区块链网络中所述区块链代码中的目标代码模块被运行。

在一个实施例中,所述获取单元,还用于:获取所述M个节点中每个节点对应的节点属性信息;所述处理单元,还用于根据所述每个节点对应的节点属性信息将携带所述桩代码的所述区块链代码部署在每个节点中。

在一个实施例中,所述处理单元在基于所述联合代码覆盖率对所述区块链服务进行测试管理时,执行如下步骤:若所述联合代码覆盖率大于或等于代码覆盖率阈值,则确定对所述区块链服务测试完成,并停止对所述区块链服务的测试。

一方面,本发明实施例提供了一种测试设备,其特征在于,包括:处理器,适于实现一条或多条计算机程序;以及计算机存储介质,所述计算机存储介质存储有一条或多条计算机程序,所述一条或多条计算机程序适于由所述处理器加载并执行:

在基于测试用例集对所述区块链服务进行测试的过程中,当存在代码覆盖信息收集事件时,获取当前时刻所述M个节点中每个节点对应的代码覆盖信息;其中,节点m对应的代码覆盖信息是所述节点m通过运行所述节点m中部署的所述区块链代码包含的所述桩代码收集到的,m大于等于1且小于等于M;

根据所述M个节点中每个节点对应的代码覆盖信息确定当前时刻所述区块链网络的联合代码覆盖率,并基于所述联合代码覆盖率对所述区块链服务进行测试管理。

一方面,本发明实施例提供了一种计算机存储介质,其特征在于,所述计算机存储介质中存储有计算机程序,所述计算机程序被处理器执行时,用于执行如下步骤:

在基于测试用例集对所述区块链服务进行测试的过程中,当存在代码覆盖信息收集事件时,获取当前时刻所述M个节点中每个节点对应的代码覆盖信息;其中,节点m对应的代码覆盖信息是所述节点m通过运行所述节点m中部署的所述区块链代码包含的所述桩代码收集到的,m大于等于1且小于等于M;

根据所述M个节点中每个节点对应的代码覆盖信息确定当前时刻所述区块链网络的联合代码覆盖率,并基于所述联合代码覆盖率对所述区块链服务进行测试管理。

一方面,本发明实施例提供了一种计算机程序产品或计算机程序,所述计算机程序产品包括计算机程序,所述计算机程序存储在计算机存储介质中;测试设备的处理器从所述计算机存储介质中读取所述计算机程序,所述处理器执行所述计算机程序,使得测试设备执行:

在基于测试用例集对所述区块链服务进行测试的过程中,当存在代码覆盖信息收集事件时,获取当前时刻所述M个节点中每个节点对应的代码覆盖信息;其中,节点m对应的代码覆盖信息是所述节点m通过运行所述节点m中部署的所述区块链代码包含的所述桩代码收集到的,m大于等于1且小于等于M;

根据所述M个节点中每个节点对应的代码覆盖信息确定当前时刻所述区块链网络的联合代码覆盖率,并基于所述联合代码覆盖率对所述区块链服务进行测试管理。

本发明实施例中,区块链网络包括M个节点,每个节点中均部署有用于提供区块链服务的区块链代码,该区块链代码中携带了桩代码,随着每个节点中区块链代码的运行,桩代码也运行,桩代码的运行可以实时收集相应节点中区块链代码的代码覆盖信息。在基于测试用例集对区块链网络中的区块链服务进行测试的过程中,当存在代码覆盖信息收集事件时,获取当前时刻M个节点中每个节点对应的代码覆盖信息;进一步的,根据M个节点中每个节点对应的代码覆盖信息确定当前时刻区块链网络的联合代码覆盖率,并基于所述联合代码覆盖率对所述区块链服务进行测试管理。

在上述的测试方法中,在测试进行的过程中可以随时收集区块链网络中的代码覆盖率,实现了实时查看区块链代码的运行情况,与现有技术中需要等待测试安全退出后才可查看代码覆盖率相比,提高了测试的便捷性。另外,由于区块链网络是一种分布式的网络,各个节点都是相互有关联的,而不是独立的,本发明实施例中联合代码覆盖率是基于各个节点的代码覆盖信息确定的,能够更为准确地反映分布式网络中区块链代码的运行情况,从而可以提高对区块链服务测试的完备性以及准确性。

附图说明

为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1a是本发明实施例提供的一种区块链网络的结构示意图;

图1b是本发明实施例提供的一种区块链的结构图的示意图;

图2是本发明实施例提供的一种区块链网络中的测试方法的流程示意图;

图3是本发明实施例提供的一种启动测试用例集的示意图;

图4是本发明实施例提供的一种goc功能指令的示意图;

图5是本发明实施例提供的另一种区块链网络中的测试方法的流程示意图;

图6是本发明实施例提供的一种覆盖率生成报告的示意图;

图7是本发明实施例提供的一种go语言的编辑窗口;

图8a是本发明实施例提供的另一种区块链网络的示意图;

图8b是本发明实施例提供的一种区块链网络中的测试方法示意图;

图8c是本发明实施例提供的另一种区块链网络中的测试方法示意图;

图9是本发明实施例提供的一种区块链网络中的测试装置的结构示意图;

图10是本发明实施例提供的一种测试设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。

区块链是一种多方共同维护,使用密码学保证传输和访问安全,能够实现数据一致存储、难以篡改、防止抵赖的记账技术,也就是分布式账本技术。基于区块链技术的区块链网络可以理解成一个数据共享系统,该数据共享系统用于进行节点与节点之间的数据共享。

参见图1a,为本发明实施例提供的一种区块链网络的结构示意图。图1a所示的区块链网络中,100表示区块链网络,区块链网络100中可包括多个节点101,多个节点101可以是接入区块链网络100中的终端设备或者服务器。其中,所述终端可以是智能收集、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表、智能车载等。所述服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。

在一个实施例中,区块链网络100中每个节点101在进行正常工作时可以接收输入到区块链网络100中的信息,并基于接收到的输入信息维护区块链网络内的共享数据。为了保证区块链网络内的信息互通,区块链网络中的每个节点101之间可以存在信息连接,节点中间可以通过上述信息连接进行信息传输。例如,当区块链网络中的任意节点101接收到输入信息时,区块链网络中的其他节点101便根据共识算法获取该输入信息,将该输入信息作为共享数据中的数据进行存储,使得区块链网络中全部节点101上存储的数据均一致。

对于区块链网络中的每个节点101,均具有与其对应的节点标识,而且区块链网络中的每个节点101均可以存储有区块链网络中其他节点101的节点标识,以便后续根据其他节点101中可维护一个如下表所述的节点标识列表,将节点名称和节点标识对应存储至节点标识列表中。其中,节点标识可以为IP(Internet Protocol,网络之间互联的协议)地址以及其他任一种能够用于标识该节点的信息,表1中仅以IP地址为例进行说明。

表1

在一个实施例中,区块链网络中的每个节点中均存储一条相同的区块链。区块链由多个区块组成,参见图1b为本发明实施例提供的一种区块链的结构示意图。图1b所示的区块链中可以包括多个区块比如区块1、区块2以及区块3.每个区块中包括本区块的哈希值,以及前一个区块的哈希值,各个区块通过哈希值进行连接形成区块链。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了相关的信息,用于验证其信息的有效性(防伪)和生成下一个区块。

在一个实施例中,区块链网络的结构可以理解成一个P2P网络。P2P网络又叫对等网络,该网络中的节点角色既可以是客户端也可以是服务器。P2P网络中每一台设备既能充当网络服务的请求者,又可以对其他设备的请求作出响应、提供资源、服务和内容。区块链的生命周期如下:区块链网络中的节点接收到用户提交的交易(用户提交的交易也即前文所述的输入到区块链网络中的信息),该节点通过P2P网络广播交易到其他节点;共识机制随机选出记账节点,记账节点又叫做出块节点或者背书节点;记账节点将若干交易进行打包组装成待验证的区块,并将该待验证的区块广播给其他节点;其他节点收到待验证的区块后,验证区块内的交易,并对待验证的区块进行投票,然后将投票信息进行广播;某个节点根据来自其他节点的投票信息对该区块进行共识验证;对该区块的共识验证通过后,提交该区块到区块链存储层以使区块链存储层将该区块添加到区块链上,然后开始下一个区块的生成和共识。

在区块链网络中,为了达到多中心、不可篡改的目的,区块链网络中的多节点需要满足一定的容错机制,比如拜占庭容错机制,也即在多节点构成的区块链网络中,若存在某个节点宕机、内存溢出或者作恶,整个区块链网络也是可以正常运行的。

只有区块链网络正常运行,依附于区块链网络中的区块链服务才能正常运行。反之,即使区块链网络能够正常运行,也不能保证部署在区块链网络中的区块链服务正常运行。因此,在开发一个区块链服务后,需要在区块链网络中对其进行测试,测试其能够在区块链网络中正常运行后方可发布上线。目前在对区块链服务的测试过程中,通常采用代码覆盖率作为测试完备性的评估手段之一,代码覆盖率是软件测试中描述程序源代码被测试执行的比例和程度。代码覆盖率是由系统化软件测试所衍生的方式,基本的代码覆盖率准则有函数覆盖率、指令覆盖率、判断覆盖率、条件覆盖率以及条件/判断覆盖率。

传统的针对软件程序代码覆盖率的收集方式,通常是采用程序语言配套的覆盖率收集工具,比如C++的Grov,Java的Jacoco,以及Go语言的GoCov等。这些工具需要被测程序安全退出才能收集到代码覆盖率,无法实现实时收集,而且现有技术中通常收集的只是单机软件业务覆盖率,无法统计向区块链这种分布式系统的联合覆盖率。

基于此,本发明实施例提供了一种区块链网络中的测试方案,区块链网络包括M个节点,每个节点中均部署有用于提供区块链服务的区块链代码,该区块链代码中携带了桩代码,随着每个节点中区块链代码的运行,桩代码也运行,桩代码的运行可以实时收集相应节点中区块链代码的代码覆盖信息。在基于测试用例集对区块链网络中的区块链服务进行测试的过程中,当存在代码覆盖信息收集事件时,获取当前时刻M个节点中每个节点对应的代码覆盖信息;进一步的,根据M个节点中每个节点对应的代码覆盖信息确定当前时刻区块链网络的联合代码覆盖率,并基于所述联合代码覆盖率对所述区块链服务进行测试管理。

在上述测试方法中,在测试进行的过程中可以随时收集区块链网络的代码覆盖率,实现了实时查看区块链代码的运行情况,与现有技术中需要等待测试安全退出后才可查看代码覆盖率相比,提高了测试的便捷性。另外,由于区块链网络是一种分布式的网络,各个节点都是相互有关联的,而不是独立的,本发明实施例中联合代码覆盖率是基于各个节点的代码覆盖信息确定的,能够更为准确地反映分布式网络中区块链代码的运行情况,从而可以提高测试的完备性以及准确性。

基于上述的区块链网络的测试方案,本发明实施例提供了一种区块链网络中的测试方法。参见图2,为本发明实施例提供的一种区块链网络中的测试方法的流程示意图。图2所示的区块链网络中的测试方法应用在区块链网络中,所述区块链网络包括M个节点,M个节点的每个节点中均部署有用于提供区块链服务的区块链代码,所述区块链代码中包括桩代码。

图2所示的测试方法可由测试设备执行,具体可由测试设备的处理器执行。所述测试设备可以是终端或者是服务器。其中,所述终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表、智能车载等;所述服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。图2所示的区块链网络中的测试方法可包括如下步骤:

步骤S201、在基于测试用例集对区块链服务进行测试的过程中,当存在代码覆盖信息收集事件时,获取当前时刻M个节点中每个节点对应的代码覆盖信息。

在一个实施例中,测试用例集中可包括多个测试用例,这些测试用例可以是测试人员事先写好的、用来测试区块链服务的。测试用例集的执行是通过运行测试脚本触发的。可选的,参见图3,为本发明实施例提供的一种启动测试用例集的示意图。由图3可知,启动测试用例集的测试脚本放置流水线中,当区块链代码被提交到代码管理开源平台git时,触发流水线的执行,也就触发测试用例集中每个测试用例的执行。测试用例集中的多个测试用例是逐一被输入到区块链网络中的,一个测试用例可以理解为提交到区块链网络中的一个业务或者说一个交易。

在一个实施例中,区块链网络的M个节点的各个节点中部署有相同的、用于提供区块链服务的区块链代码。每个节点中的区块链代码可以是测试设备在构建了区块链网络后,根据各个节点的节点属性信息部署到各个节点中的。具体实现中,获取M个节点中每个节点对应的节点属性信息;根据每个节点对应的节点属性信息将所述携带桩代码的所述区块链代码部署在每个节点中。其中,每个节点的节点属性信息可以包括国际互联协议(Internet Protocol,IP)地址、端口号、用户名以及用户密码,所述用户密码可以是加密存储的。测试设备根据每个节点的节点属性信息向每个节点中部署区块链代码。

在一个实施例中,随着测试用例集中测试用例的执行,区块链网络中每个节点通过运行各自部署的区块链代码执行每个测试用例。随着各个节点中区块链代码的执行,区块链代码中携带的桩代码也运行,每个节点通过运行桩代码可以实时统计该节点中区块链代码的代码覆盖信息。具体实现中,每个节点的桩代码可以在一个测试用例执行完成时统计一次该节点对应的代码覆盖信息,后一次统计的代码覆盖信息和前一次统计的代码覆盖信息进行取并集运算,运算结果作为最新统计的代码覆盖信息。在检测到代码覆盖信息收集事件时,每个节点将截至到当前时刻已统计的覆盖信息上报给测试设备。

在一个实施例中,所述代码覆盖信息收集事件可以指接收到用于触发覆盖信息收集的代码指令,比如goc server。换句话说,本发明实施例中能够实现各个节点实时统计代码覆盖信息以及向测试设备上报统计到的代码覆盖信息是基于go语言的覆盖率工具goc实现的。在本发明实施例中,go覆盖率工具goc在设计上抛弃了老的go test-c-cover模式,而是直接与go tool cover工具交互,避免因go test 命令引入的一系列弊端。Goc没有选择自己做插桩,也是考虑go语言的兼容性,以及性能问题,毕竟go tool cover工具,原生采用结构体来定义counter收集器,每个文件都有单独的结构体,性能性对比较可靠。

在一个实施例中,覆盖率工具goc包括的一些功能指令可如图4所示。例如,图4中build用来编译被测代码如图4中400所示,生成带有插桩版本的二进制程序,在具体应用中可以通过代码指令goc build启动对被测代码的编译功能;再如,profile用于实时显示被测节点的代码覆盖信息如图4中401所示,在具体应用时可以通过代码指令goc profile来启动该功能;又如,server用来实现启动覆盖信息收集如图4中402所示,在具体应用时,可以通过代码指令goc server来启动该功能。

在其他实施例中,所述代码覆盖信息收集事件还可以指检测到所述测试用例集中的任意一个测试用例执行完成。具体实现中,测试设备可预先设置,当任意一个测试用例执行完成时,便收集各个节点的代码覆盖信息,根据各个节点的代码覆盖信息统计区块链网络的联合代码覆盖率。

在一个实施例中,所述区块链代码可包括至少一个代码模块,每个节点对应的代码覆盖信息可以包括每个节点中部署的区块链代码已被运行的代码模块,比如区块链代码包括代码模块1、代码模块2以及代码模块3;假设节点1中部署的区块链代码中,代码模块1和代码模块2已被运行,节点2中部署的区块链代码中,代码模块2和代码模块3已被运行;那么节点1对应的代码覆盖信息可以指已被运行了代码模块1和代码模块2,节点2对应的代码覆盖信息可以指已被运行了代码模块2。

在其他实施例中,所述每个节点对应的代码覆盖信息还可以包括每个节点对应的区块链代码的实时运行报告。其中,每个节点对应的区块链代码的实时运行报告中可以包括了添加标记的区块链代码,在添加标记的区块链代码中已被运行的代码模块中代码内容可以是以第一标记形式标记的,未被运行的代码模块中代码内容可以是以第二标记形式标记的。其中,第一标记形式可以指第一颜色的,第二标记形式可以是指与第一颜色不同的第二颜色,比如第一标记形式为绿色,第二标记形式为红色;或者,第一标记形式也可以是指第一字体,第二标记形式可以是第二字体,比如第一标记形式可以指宋体,第二标记形式可以指楷体。

步骤S202、根据M个节点中每个节点对应的代码覆盖信息确定当前时刻区块链网络的联合代码覆盖率,并基于联合代码覆盖率对区块链服务进行测试管理。

在一个实施例中,如果所述每个节点对应的代码覆盖信息包括每个节点中部署的区块链代码已被运行的代码模块,则所述根据M个节点中每个节点对应的代码覆盖信息确定当前时刻所述区块链网络的联合代码覆盖率,可包括:将各个节点中部署的区块链代码已被运行的代码模块进行取并集运算,得到在所述区块链网络中所述区块链代码已被运行的代码模块;基于所述至少一个代码模块的总数量和在所述区块链网络中所述区块链代码已被运行的代码模块的第一数量,确定当前时刻所述区块链网络的联合代码覆盖率。

具体实现中,假设区块链网络中包括节点1和节点2,节点1和节点2中部署的区块链代码已被运行的如上述举例所示,那么将各个节点中部署的区块链代码已被运行的代码模块进行取并集运算,是指:节点1中已被运行的代码模块1和代码模块2,与节点2中已被运行的代码模块2进行取并集运算,得到的运算结果为:代码模块1和代码模块2。

将上述运算结果作为在区块链网络中所述区块链代码已被运行的代码模块,也就是说区块链网络中所述区块链代码已被运行的代码模块包括代码模块1和代码模块2。进一步的,获取区块链网络中所述区块链代码已被运行的代码模块数量为2,区块链代码包括的代码模块的总数量为3,那么区块链网络中联合代码覆盖率等于已被运行的代码模块数量除以区块代码包括的代码模块的总数量,也就是区块链网络中联合代码覆盖率等于2/3。

在其他实施例中,如果每个节点对应的代码覆盖信息包括每个节点对应的区块链代码的实时运行报告,则所述根据M个节点中每个节点对应的代码覆盖信息确定当前时刻区块链网络的联合代码覆盖率,包括:根据每个节点对应的区块链代码实时运行报告统计每个节点中部署的区块链代码已被运行的代码模块;将各个节点中部署的区块链代码已被运行的代码模块进行取并集运算,得到在所述区块链网络中所述区块链代码已被运行的代码模块;基于所述至少一个代码模块的总数量和在所述区块链网络中所述区块链代码已被运行的代码模块的第一数量,确定当前时刻所述区块链网络的联合代码覆盖率。

在一个实施例中,测试设备确定出区块链网络中的代码覆盖率后,可以基于代码覆盖率对区块链服务进行测试管理。具体实现中,所述基于代码覆盖率对区块链服务进行测试管理,包括:若所述联合代码覆盖率大于或等于代码覆盖率阈值,则确定对所述区块链服务的测试完成,并停止对所述区块链服务的测试;若联合代码覆盖率小于代码覆盖率阈值,则继续执行测试用例集,以继续对区块链服务进行测试。应当理解的,区块链网络的代码覆盖率越高,表明在区块链网络中区块链代码被运行的代码模块越多,被运行的代码模块越多,区块链代码所提供的服务被测试的越多,也就越能保证测试的准确性。

本发明实施例中,区块链网络包括M个节点,M个节点的每个节点中均部署有用于提供区块链服务于的区块链代码,该区块链代码中携带了桩代码,随着每个节点中区块链代码的运行,桩代码也运行,桩代码的运行可以实时收集相应节点中区块链代码的代码覆盖信息。在基于测试用例集对区块链网络中的区块链服务进行测试的过程中,当存在代码覆盖信息收集事件时,获取当前时刻M个节点中每个节点对应的代码覆盖信息;进一步的,根据M个节点中每个节点对应的代码覆盖信息确定当前时刻区块链网络的联合代码覆盖率,并基于所述联合代码覆盖率对所述区块链服务进行测试管理。

在上述测试方法中,测试进行的过程中可以随时收集区块链网络的代码覆盖率,实现了实时查看区块链代码的运行情况,与现有技术中需要等待测试安全退出后才可查看代码覆盖率相比,提高了测试的便捷性。另外,由于区块链网络是一种分布式的网络,各个节点都是相互有关联的,而不是独立的,本发明实施例中联合代码覆盖率是基于各个节点的代码覆盖信息确定的,能够更为准确地反映分布式网络中区块链代码的运行情况,从而可以提高测试的完备性以及准确性。

基于上述的区块链网络的测试方法,本发明实施例还提供了另一种区块链网络中的测试方法,参见图5,为本发明实施例提供的另一种区块链网络中的测试方法的流程示意图。图5所示的测试方法可以由测试设备执行,所述测试设备可以是终端户或者是服务器。图5所示的测试方法可包括如下步骤:

步骤S501、获取M个节点中每个节点对应的节点属性信息,并根据每个节点对应的节点属性信息将携带桩代码的区块链代码部署在每个节点中。

步骤S502、在基于测试用例集对区块链服务进行测试的过程中,当测试用例集中目标测试用例执行完成时,则获取当前时刻M个节点中每个节点中部署的区块链代码已被运行的代码模块。

由图2实施例中描述可知,测试用例集中的测试用例是逐一被输入到区块链网络中的。并且,随着每个节点中区块链代码的运行,区块链代码包括的桩代码也随之运行,桩代码的运行实现了实时统计在每个测试用例完成时每个节点中区块链代码的代码覆盖信息。

如果测试设备预先设定,当测试用例集中任意一个测试用例执行完成时,便收集当前时刻区块链网络中每个节点中部署的区块链代码已被运行的代码模块,并根据每个节点中部署的区块链代码已被运行的代码模块统计当前时刻区块链网络的联合代码覆盖率。那么区块链网络检测测试用例集中每一个测试用例的执行,当检测到目标测试用例执行完成后,获取每个节点中部署的区块链代码已被运行的代码模块。其中,目标测试用例可以指测试用例集中任意一个测试用例。

步骤S503、将各个节点中部署的区块链代码已被运行的代码模块进行取并集运算,得到在区块链网络中区块链代码已被运行的代码模块。

步骤S504、基于区块链代码包括的至少一个代码模块的总数量和在区块链网络中区块链代码已被运行的代码模块的第一数量,确定当前时刻区块链网络的联合代码覆盖率,并基于联合代码覆盖率对区块链服务进行测试管理。

在一个实施例中,步骤S503-步骤S504中包括的一些可行的实施方式可参见图2实施例中的具体描述,在此不再赘述。

步骤S505、根据联合代码覆盖率生成区块链网络对应的覆盖率报告。

在一个实施例中,覆盖率报告用于反映当前时刻区块链网络中区块链代码的运行比例和程度。可选的,覆盖率报告中可包括已添加标记的区块连代码,所述已添加标记的区块链代码中,已被运行的代码模块中代码内容可以第一形式进行标记,未被运行的代码模块中代码内容可以第二形式进行标记。

其中,第一形式可以指第一颜色的,第二形式可以是指与第一颜色不同的第二颜色,比如第一形式为绿色,第二形式为红色;或者,第一形式也可以是指第一字体,第二形式可以是第二字体,比如第一形式可以指字体,第二字体可以指楷体。或者,第一形式可以指以第一形状框比如虚线矩形框将已被运行的代码模块的代码内容框起,第二形式可以指以第二形状框比如实线矩形框将未被运行的代码模块的代码内容框起。举例来说,参见图6,为本发明实施例提供的一种覆盖率生成报告的示意图,601表示以第一形式标记的已被运行的代码模块中代码内容,602表示以第二形式标记的未被运行的代码模块中代码内容。

在一个实施例中,覆盖率生成报告中还可以包括代码覆盖率,如图6中603所示。覆盖率生成报告中还可以包括当前时刻的代码覆盖情况评价,比如图6中604所示,代码覆盖情况评价可以是“高覆盖率”、“低覆盖率”以及“中覆盖率”。可选的,代码覆盖情况评价可以是测试设备根据代码覆盖率和代码覆盖率阈值确定的,假设测试设备预先设定了两个代码覆盖率阈值,分别为第一代码覆盖率和第二代码覆盖率,第一代码覆盖率小于第二代码覆盖率;如果测试设备确定出的当前时刻区块链网络的代码覆盖率小于第一代码覆盖率,则确定代码覆盖情况评价为低覆盖率;如果测试设备确定出当前时刻区块链网络的代码覆盖率大于第一代码覆盖率且小于第二代码覆盖率,则确定当前时刻的代码覆盖情况评价为中覆盖率;如果测试设备确定出的当前时刻区块链网络的代码覆盖率大于第二代码覆盖率,则确定当前时刻的代码覆盖情况评价为高覆盖率。

步骤S506、建立目标测试用例和在区块链网络中区块链代码已被运行的代码模块之间的对应关系,并基于该对应关系优化目标测试用例。

测试设备通过步骤S503确定出在区块链网络中区块链代码已被运行的代码模块后,可以建立目标测试用例和区块链网络中区块链代码已被运行的代码模块之间的对应关系。

作为一种可选的实施方式,测试设备可以基于目标测试用例和区块链网络中区块链代码已被运行的代码模块之间的对应关系优化目标测试用例,以使得在基于优化后目标测试用例对区块链网络进行测试时,在区块链网络中区块链代码已被运行的代码模块的数量大于第一数量。

简单来说,在明确了执行目标测试用例时,区块链代码的哪些代码模块被运行后,可以对目标测试用例进行适当的修改和调整,以使执行修改后的测试用例,可以覆盖区块链代码中更多的代码模块。

作为另一种可选的实施方式,测试设备可以将上述对应关系存储到用于构建测试用例的参考信息集中,所述参考信息集中可以包括多组测试用例与在区块链网络中区块链代码已被运行的代码模块之间的对应关系;进一步的,基于所述参考信息集构建新的测试用例,以使基于新的测试用例对区块链网络进行测试时,在所述区块链网络中所述区块链代码中的目标代码模块被运行。

简单来说,在区块链网络中对区块链服务的测试过程中,收集多组测试用例与已被运行的代码模块之间的对应关系,并基于收集到的对应关系为精准测试提供基础。

应当理解的,上述只是陈述了得到一组测试用例与区块链网络中区块链代码已被运行代码模块之间的对应关系,通过重复执行上述各个步骤便可以得到多组测试用例与区块链网络中区块链代码已被运行代码模块之间的对应关系。

例如,区块链代码可以包括代码模块1、代码模块2和代码模块3,通过第一测试用例在区块链网络中对区块链服务进行测试时,收集到在区块链网络中区块链代码的代码模块1被运行;此时第一测试用例与代码模块1具有对应关系;通过第二测试用例在区块链网络中对区块链服务进行测试时,收集到在区块链网络中区块链代码的代码模块2被运行,此时第二测试用例与代码模块2具有对应关系。

后续如果欲测试的区块链代码的目标代码模块为代码模块2,则可以将第二测试用例直接作为新的测试用例;如果欲测试的区块链代码的目标代码模块为代码模块1,则可以将第一测试用例直接作为新的测试用例;如果欲测试区块链代码的目标代码模块为代码模块1和2,则可以根据第一测试用例和第二测试用例构建一个新的测试用例。

在一个实施例中,当测试设备监测到查看节点n的代码覆盖率的代码指令时,测试设备可以显示节点n的代码覆盖率,由前述可知,节点n的代码覆盖率是基于节点n中部署的区块链代码已被运行的代码模块的数量,和所述区块链代码包括的至少一个代码模块的总数量确定的。其中,查看节点n的代码覆盖率的代码指令中可以包括节点n的地址信息,例如节点n的地址信息为http://127.0.0.1:36817,查看节点n的代码覆盖率的代码指令可以表示为“goc profile --center="http://127.0.0.1:36817" >cov.out && go tool cover-html=cov.out -o cov.html”。测试设备在显示节点n的代码覆盖率时,同时还可以显示节点n的地址信息。

由前述可知,本发明实施例中覆盖信息收集是基于go语言实现的,那么查看节点n的代码覆盖率的代码指令可以是在go语言的编辑窗口中输入的,节点n的代码覆盖率也可以是显示在go语言的编辑窗口中的。举例来说,参见图7为本发明实施例提供的一种go语言的编辑窗口,701表示在两个不同时刻收集到的节点n的代码覆盖率以及节点n的地址信息。

本发明实施例中,测试设备获取每个节点的节点属性信息并根据节点属性信息在每个节点中部署用于提供区块链服务的区块链代码。在基于测试用例集对区块链网络中的区块链服务进行测试的过程中,如果目标测试用例执行完成时,检测到覆盖信息收集事件,则获取每个节点中部署的区块链代码已被运行的代码模块,实现了无需退出测试,在测试过程中可随时收集每个节点中区块链代码运行情况,提高了测试的便捷性。

进一步的,测试设备将各个节点中部署的区块链代码已被运行的代码模块进行取并集运算,得到在区块链网络中区块链代码已被运行的代码模块;然后基于区块链代码包括的代码模块的总数量和在区块链网络中区块链代码已被运行的代码模块的第一数量,确定当前时刻区块链网络的联合代码覆盖率。应当理解的,在收集到每个节点的代码覆盖信息后,基于每个节点的代码覆盖信息进行二次统计得到区块链网络的联合代码覆盖率,更能反映在区块链网络这种分布式网络下区块链代码被运行的情况,提高了测试的完备性。

为了方便后续精准化测试用例的生成以及优化测试用例,本发明试试中还可以建立目标测试用例和在区块链网络中区块链代码已被运行的代码模块之间的对应关系,后续可以基于该对应关系对测试用例进行优化,或者生成更精准的测试用例。

基于上述的区块链网络的测试方法实施例,本发明实施例提供了一种上述测试方法的应用实施例。开发人员构建一个如图8a所示的区块链网络,在该区块链网络中开发了相应的区块链产品或者说区块链项目,为了测试开发的区块链产品在图8a所示的区块链网络中的运行情况,需要执行如图8b和图8c所示的测试流程。具体实现中可包括:

(1)将区块链产品的各个模块(也就是区块链代码的各个代码模块)提测到软件研发提测流程管理平台REQ,REQ用于管理软件版本开发、提测、缺陷提交、回归测试以及发布整个生命周期。

(2)REQ平台收集图8a的区块链网络中被测节点的节点属性信息,比如IP地址、端口信息、用户名以及用户密码等等,REQ平台基于被测节点的节点属性信息将区块链代码分发到各个节点中,在图8c中假设被测的节点为节点A、节点B、节点C以及节点D。

(3)然后启动覆盖率收集server,具体地,基于go语言开源覆盖率收集工具goc启动goc server注册中心,执行命令goc server。

(4)启动被测节点中区块链代码,区块链代码中携带桩代码,区块链代码可以看成是一个带有插桩的二进制包,例如表示为“nohup ./xxx_blockchain_cov &”。

(5)在区块链自动流水线平台上触发测试用例集的执行。开始在区块链网络中逐一运行测试用例集中的各个测试用例,来实现对区块链网络的测试。在测试过程中,每执行完成一个测试用例,各个被测节点均会动态收集在执行该测试用例时,各个节点的代码覆盖信息,所述代码覆盖信息可以包括各个节点中部署的区块链代码已被运行的代码模块,所述代码覆盖信息还可以包括各个节点中区块链代码的代码覆盖率。

(6)在测试过程中,可以通过REQ平台输入代码覆盖信息收集的代码指令,此时各个节点将动态收集的代码覆盖信息上报,REQ平台根据各个节点上报的代码覆盖信息确定出区块链网络的联合代码覆盖率,并根据联合代码覆盖率生成覆盖率报告。

(7)由前述可知,覆盖率报告中包括已添加标记的区块链代码和联合代码覆盖率,如果开发人员根据联合代码覆盖率和已添加标记的区块链代码判断出区块链产品在区块链网络中可以正常使用,达到了可以发布的标准,那么就结束测试,将区块链产品发布上线。

基于上述的方法实施例,本发明实施例提供了一种区块链网络中的测试装置。参见图9,为本发明实施例提供的一种区块链网络中的测试装置的结构示意图。所述区块链网络包括M个节点,M为大于1的整数;每个节点中均部署有用于提示区块链服务的区块链代码,所述区块链代码中包含桩代码。图9所示的测试装置可运行如下单元:

获取单元901,用于在基于测试用例集对所述区块链服务进行测试的过程中,当存在代码覆盖信息收集事件时,获取当前时刻所述M个节点中每个节点对应的代码覆盖信息;其中,节点m对应的代码覆盖信息是所述节点m通过运行所述节点m中部署的所述区块链代码包含的所述桩代码收集到的,m大于等于1且小于等于M;

处理单元902,用于根据所述M个节点中每个节点对应的代码覆盖信息确定当前时刻所述区块链网络的联合代码覆盖率,并基于所述联合代码覆盖率对所述区块链服务进行测试管理。

在一个实施例中,所述区块链代码包括至少一个代码模块,所述每个节点对应的代码覆盖信息包括每个节点中部署的所述区块链代码已被运行的代码模块;所述处理单元902在根据所述M个节点中每个节点对应的代码覆盖信息确定当前时刻所述区块链网络的联合代码覆盖率时,执行如下步骤:

将各个节点中部署的所述区块链代码已被运行的代码模块进行取并集运算,得到在所述区块链网络中所述区块链代码已被运行的代码模块;基于所述至少一个代码模块的总数量和在所述区块链网络中所述区块链代码已被运行的代码模块的第一数量,确定当前时刻所述区块链网络的联合代码覆盖率。

在一个实施例中,所述代码覆盖信息收集事件是指接收到用于触发覆盖信息收集的代码指令;或者,所述代码覆盖率信息收集事件是检测到一个测试用例执行完成。所述代码覆盖信息收集事件是指接收到用于触发覆盖信息收集的代码指令;或者,所述代码覆盖率信息收集事件是指检测到所述测试用例集中的任意一个测试用例执行完成。

在一个实施例中,图9所示的测试装置还包括显示单元903,所述显示单元903,用于若检测到查看节点n中代码覆盖率的代码指令,则显示所述节点n中代码覆盖率,n大于等于1且小于等于M;所述节点n中代码覆盖率是基于所述节点n中部署的所述区块链代码已被运行的代码模块的数量,和所述区块链代码包括的至少一个代码模块的总数量确定的。

在一个实施例中,所述处理单元902,还用于根据所述联合代码覆盖率生成所述区块链网络对应的覆盖率报告,所述覆盖率报告包括已添加标记的区块链代码,所述已添加标记的区块链代码中已被运行的代码模块中代码内容以第一形式进行标记,未被运行的代码模块中代码内容以第二形式进行标记。

在一个实施例中,所述代码覆盖信息收集事件是指接收到用于触发覆盖信息收集的代码指令,且所述代码指令是在所述测试用例集中的目标测试用例执行完成时接收到的;或者,所述代码覆盖信息收集事件是指检测到所述目标测试用例执行完成;

所述处理单元902,还用于建立所述目标测试用例和在所述区块链网络中所述区块链代码已被运行的代码模块之间的对应关系;根据所述对应关系优化所述目标测试用例,以使基于优化后的目标测试用户对所述区块链服务进行测试时,在所述区块链网络中所述区块链代码已被运行的代码模块的数量大于所述第一数量。

在一个实施例中,图9所示的测试装置还包括存储单元904,所述存储单元904用于将所述对应关系存储到用于构建测试用例的参考信息集中,所述参考信息集包括多组测试用例和在所述区块链网络中所述区块链代码已被运行的代码模块之间的对应关系;所述处理单元902,还用于基于所述参考信息集构建新的测试用例,以使基于所述新的测试用例对所述区块链服务进行测试时,在所述区块链网络中所述区块链代码中的目标代码模块被运行。

在一个实施例中,所述获取单元901,还用于获取所述M个节点中每个节点对应的节点属性信息;所述处理单元902,还用于根据所述每个节点对应的节点属性信息将所述携带桩代码的所述区块链代码部署在每个节点中。

在一个实施例中,所述处理单元902在基于所述联合代码覆盖率对所述区块链服务进行测试管理时,执行如下步骤:若所述联合代码覆盖率大于或等于代码覆盖率阈值,则确定对所述区块链服务测试完成,并停止对所述区块链服务的测试。

根据本发明的一个实施例,图2和图5所示的测试方法所涉及各个步骤可以是由图9所示的测试装置中的各个单元来执行的。例如,图2所述的步骤S201可由图9所示的测试装置中的获取单元901来执行,步骤S202可由图9所示的测试装置中的处理单元902来执行。再如,图5所示的步骤S501和步骤S502可由图9所示的测试装置中的获取单元901来执行,步骤S503-步骤S506可由图9所示的测试装置中的处理单元902来执行。

根据本发明的另一个实施例,图9所示的测试装置中的各个单元可以分别或全部合并为一个或若干个另外的单元来构成,或者其中的某个(些)单元还可以再拆分为功能上更小的多个单元来构成,这可以实现同样的操作,而不影响本发明的实施例的技术效果的实现。上述单元是基于逻辑功能划分的,在实际应用中,一个单元的功能也可以由多个单元来实现,或者多个单元的功能由一个单元实现。在本发明的其它实施例中,测试装置也可以包括其它单元,在实际应用中,这些功能也可以由其它单元协助实现,并且可以由多个单元协作实现。

根据本发明的另一个实施例,可以通过在包括中央处理单元(CPU)、随机存取存储介质(RAM)、只读存储介质(ROM)等处理元件和存储元件的例如计算机的通用计算设备上运行能够执行如图2和图5所示的相应方法所涉及的各步骤的计算机程序(包括程序代码),来构造如图9中所示的测试装置,以及来实现本发明实施例测试方法。所述计算机程序可以记载于例如计算机存储介质上,并通过计算机存储介质装载于上述测试设备中,并在其中运行。

本发明实施例中,区块链网络包括M个节点,M个节点的每个节点中均部署有用于提供区块链服务于的区块链代码,该区块链代码中携带了桩代码,随着每个节点中区块链代码的运行,桩代码也运行,桩代码的运行可以实时收集相应节点中区块链代码的代码覆盖信息。在基于测试用例集对区块链网络中的区块链服务进行测试的过程中,当存在代码覆盖信息收集事件时,获取当前时刻M个节点中每个节点对应的代码覆盖信息;进一步的,根据M个节点中每个节点对应的代码覆盖信息确定当前时刻区块链网络的联合代码覆盖率,并基于所述联合代码覆盖率对所述区块链服务进行测试管理。

在上述测试方法中,测试进行的过程中可以随时收集区块链网络的代码覆盖率,实现了实时查看区块链代码的运行情况,与现有技术中需要等待测试安全退出后才可查看代码覆盖率相比,提高了测试的便捷性。另外,由于区块链网络是一种分布式的网络,各个节点都是相互有关联的,而不是独立的,本发明实施例中联合代码覆盖率是基于各个节点的代码覆盖信息确定的,能够更为准确地反映分布式网络中区块链代码的运行情况,从而可以提高测试的完备性以及准确性。

基于上述的方法实施例以及装置实施例,本发明实施例还提供了一种测试设备,所述测试设备可以用于执行区块链网络中的测试方法,所述区块链网络包括M个节点,M为大于1的整数;每个节点中均部署有用于提供区块链服务的区块链代码,所述区块链代码中包含桩代码。参见图10,为本发明实施例提供的一种测试设备的结构示意图。图10所示的测试设备可至少包括处理器1001、输入接口1002、输出接口1003以及计算机存储介质1004。其中,处理器1001、输入接口1002、输出接口1003以及计算机存储介质1004可通过总线或其他方式连接。

计算机存储介质1004可以存储在测试设备的存储器中,所述计算机存储介质1001用于存储计算机程序,所述处理器1001用于执行所述计算机存储介质1004存储的计算机程序。处理器1001(或称CPU(Central Processing Unit,中央处理器))是测试设备的计算核心以及控制核心,其适于实现一条或多条计算机程序,具体适于加载并执行:

在基于测试用例集对所述区块链服务进行测试的过程中,当存在代码覆盖信息收集事件时,获取当前时刻所述M个节点中每个节点对应的代码覆盖信息;其中,节点m对应的代码覆盖信息是所述节点m通过运行所述节点m中部署的所述区块链代码包含的所述桩代码收集到的,m大于等于1且小于等于M;根据所述M个节点中每个节点对应的代码覆盖信息确定当前时刻所述区块链网络的联合代码覆盖率,并基于所述联合代码覆盖率对所述区块链服务进行测试管理。

本发明实施例还提供了一种计算机存储介质(Memory),所述计算机存储介质是测试设备中的记忆设备,用于存放程序和数据。可以理解的是,此处的计算机存储介质既可以包括测试设备的内置存储介质,当然也可以包括测试设备所支持的扩展存储介质。计算机存储介质提供存储空间,该存储空间存储了测试设备的操作系统。并且,在该存储空间中还存放了适于被处理器801加载并执行的一条或多条的计算机程序,这些计算机程序可以是一个或一个以上的指令(包括程序代码)。需要说明的是,此处的计算机存储介质可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器;可选的还可以是至少一个位于远离前述处理器的计算机存储介质。

在一个实施例中,所述区块链代码包括至少一个代码模块,所述每个节点对应的代码覆盖信息包括每个节点中部署的所述区块链代码已被运行的代码模块;所述处理器1001在根据所述M个节点中每个节点对应的代码覆盖信息确定当前时刻所述区块链网络的联合代码覆盖率时,执行如下步骤:

将各个节点中部署的所述区块链代码已被运行的代码模块进行取并集运算,得到在所述区块链网络中所述区块链代码已被运行的代码模块;基于所述至少一个代码模块的总数量和在所述区块链网络中所述区块链代码已被运行的代码模块的第一数量,确定当前时刻所述区块链网络的联合代码覆盖率。

在一个实施例中,所述代码覆盖信息收集事件是指接收到用于触发覆盖信息收集的代码指令;或者,所述代码覆盖率信息收集事件是指检测到所述测试用例集中的任意一个测试用例执行完成。

在一个实施例中,所述处理器1001还用于:若检测到查看节点n中代码覆盖率的代码指令,则显示所述节点n中代码覆盖率,n大于等于1且小于等于M;所述节点n中代码覆盖率是基于所述节点n中部署的所述区块链代码已被运行的代码模块的数量,和所述区块链代码包括的至少一个代码模块的总数量确定的。

在一个实施例中,所述处理器1001还用于:根据所述联合代码覆盖率生成所述区块链网络对应的覆盖率报告,所述覆盖率报告包括已添加标记的区块链代码,所述已添加标记的区块链代码中已被运行的代码模块中代码内容以第一形式进行标记,未被运行的代码模块中代码内容以第二形式进行标记。

在一个实施例中,所述代码覆盖信息收集事件是指接收到用于触发覆盖信息收集的代码指令,且所述代码指令是在所述测试用例集中的目标测试用例执行完成时接收到的;或者,所述代码覆盖信息收集事件是指检测到所述目标测试用例执行完成;所述处理器1001还用于:

建立所述目标测试用例和在所述区块链网络中所述区块链代码已被运行的代码模块之间的对应关系;根据所述对应关系优化所述目标测试用例,以使基于优化后的目标测试用户对所述区块链服务进行测试时,在所述区块链网络中所述区块链代码已被运行的代码模块的数量大于所述第一数量。

在一个实施例中,所述处理器1001还用于:将所述对应关系存储到用于构建测试用例的参考信息集中,所述参考信息集包括多组测试用例和在所述区块链网络中所述区块链代码已被运行的代码模块之间的对应关系;基于所述参考信息集构建新的测试用例,以使基于所述新的测试用例对所述区块链服务进行测试时,在所述区块链网络中所述区块链代码中的目标代码模块被运行。

在一个实施例中,所述处理器1001还用于:获取所述M个节点中每个节点对应的节点属性信息;根据所述每个节点对应的节点属性信息将携带所述桩代码的所述区块链代码部署在每个节点中。

在一个实施例中,所述处理器1001在基于所述联合代码覆盖率对所述区块链服务进行测试管理时,执行如下步骤:若所述联合代码覆盖率大于或等于代码覆盖率阈值,则确定对所述区块链服务测试完成,并停止对所述区块链服务的测试。

本发明实施例中,区块链网络包括M个节点,每个节点中均部署有用于提供区块链服务于的区块链代码,该区块链代码中携带了桩代码,随着每个节点中区块链代码的运行,桩代码也运行,桩代码的运行可以实时收集相应节点中区块链代码的代码覆盖信息。在基于测试用例集对区块链网络中的区块链服务进行测试的过程中,当存在代码覆盖信息收集事件时,获取当前时刻M个节点中每个节点对应的代码覆盖信息;进一步的,根据M个节点中每个节点对应的代码覆盖信息确定当前时刻区块链网络的联合代码覆盖率,并基于所述联合代码覆盖率对所述区块链服务进行测试管理。

在上述的测试方法中,在测试进行的过程中可以随时收集区块链网络中的代码覆盖率,实现了实时查看区块链代码的运行情况,与现有技术中需要等待测试安全退出后才可查看代码覆盖率相比,提高了测试的便捷性。另外,由于区块链网络是一种分布式的网络,各个节点都是相互有关联的,而不是独立的,本发明实施例中联合代码覆盖率是基于各个节点的代码覆盖信息确定的,能够更为准确地反映分布式网络中区块链代码的运行情况,从而可以提高对区块链服务测试的完备性以及准确性。

根据本申请的一个方面,本发明实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品包括计算机程序,该计算机程序存储在计算机存储介质中。处理器1001从计算机存储介质中读取该计算机程序,处理器1001执行该计算机程序,使得测试设备执行图2和图5所述的区块链网络中的测试方法,具体地:

在基于测试用例集对所述区块链服务进行测试的过程中,当存在代码覆盖信息收集事件时,获取当前时刻所述M个节点中每个节点对应的代码覆盖信息;其中,节点m对应的代码覆盖信息是所述节点m通过运行所述节点m中部署的所述区块链代码包含的所述桩代码收集到的,m大于等于1且小于等于M;根据所述M个节点中每个节点对应的代码覆盖信息确定当前时刻所述区块链网络的联合代码覆盖率,并基于所述联合代码覆盖率对所述区块链服务进行测试管理。

本发明实施例中,区块链网络包括M个节点,每个节点中均部署有用于提供区块链服务于的区块链代码,该区块链代码中携带了桩代码,随着每个节点中区块链代码的运行,桩代码也运行,桩代码的运行可以实时收集相应节点中区块链代码的代码覆盖信息。在基于测试用例集对区块链网络中的区块链服务进行测试的过程中,当存在代码覆盖信息收集事件时,获取当前时刻M个节点中每个节点对应的代码覆盖信息;进一步的,根据M个节点中每个节点对应的代码覆盖信息确定当前时刻区块链网络的联合代码覆盖率,并基于所述联合代码覆盖率对所述区块链服务进行测试管理。

在上述的测试方法中,在测试进行的过程中可以随时收集区块链网络中的代码覆盖率,实现了实时查看区块链代码的运行情况,与现有技术中需要等待测试安全退出后才可查看代码覆盖率相比,提高了测试的便捷性。另外,由于区块链网络是一种分布式的网络,各个节点都是相互有关联的,而不是独立的,本发明实施例中联合代码覆盖率是基于各个节点的代码覆盖信息确定的,能够更为准确地反映分布式网络中区块链代码的运行情况,从而可以提高对区块链服务测试的完备性以及准确性。

相关技术
  • 区块链网络中的测试方法、装置及测试设备
  • 区块链中的数据处理方法、装置和区块链网络
技术分类

06120112195818