
今天,针对特定区块链或其分支的用于区块链测试和基准测试的解决方案得到了改进。 但是还有几种功能不同的通用解决方案:其中一些是开源项目,其他是作为SaaS提供的,但是大多数是由区块链开发团队创建的内部解决方案。 但是,它们都解决了类似的问题。 在本文中,我试图简要地考虑几种专门用于测试区块链的产品。
区块链网络的操作类似于分布式数据库的工作,因此,为了进行测试,您可以应用类似的工具和方法。 为了更好地了解如何测试分布式数据库,请从此处查看精选的资源和文章。 例如,本文详细介绍了延迟,并且为了了解如何在复制算法中搜索错误,建议您阅读本文 。
我将介绍几种测试和基准测试区块链的流行解决方案。 如果您在评论中描述了其他解决相同问题的有用软件产品,我将非常高兴。

我将从一个工具开始,尽管它不是专门为区块链创建的,但是,如果已经有了一个可以运行的网络,您可以有效地测试其工作。 分布式系统可靠性中最重要的因素是在服务器和网络出现问题的情况下继续工作的能力。 可能是网络滞后,磁盘已满,外部服务(DNS)无法访问,硬件故障以及数百种其他原因。 要检查在大量机器系统上协同工作的任何系统的稳定性,可以使用Gremlin 。 它使用一种称为混沌工程的极其有效的方法。
使用自己的网络代理,Gremlin在所需数量的计算机上创建了许多不同类型的问题:网络滞后,任何资源(CPU,磁盘,内存,网络)超载,禁用单个协议等。 对于区块链,Gremlin可以在测试网络服务器上使用,模拟实际问题并观察网络行为。 使用它,受控环境中的开发人员和管理员可以观察系统崩溃或更新代码时发生的情况。 在这种情况下,必须预先配置和部署网络,并配置为收集必要的指标。
Gremlin是为架构师,开发人员和安全专业人员提供的便捷工具,并且是用于测试任何现成且正在运行的分布式系统(包括区块链)的通用解决方案。

Hyperledger Caliper是一种更为专业的Hyperledger Caliper解决方案 。 目前,Caliper同时支持多个区块链-Hyperledger系列的代表(Fabric,Sawtooth,Iroha,Burrow,Besu)以及以太坊和FISCO BCOS网络。
使用Caliper,您可以指定区块链网络的拓扑和测试合约,以及描述节点的配置。 区块链节点位于同一台机器上的docker容器中。 接下来,您可以选择必要的测试配置,并在启动后获取包含测试结果报告的文件。 Caliper度量标准和基准测试方法的完整列表可以在此处找到Hyperledger Blockchain Performance Metrics ,如果您对区块链基准测试主题感兴趣的话,这是一篇很棒的文章。 另外,您可以在单独的Prometheus / Grafana中配置指标集合。
Hyperledger Caliper是面向开发人员和系统架构师的工具,因为它提供了测试的可重复性以及测试和基准测试的自动化。 它用于区块链核心的开发:共识算法,用于处理智能合约的虚拟机,对等层和其他系统机制。

MixBytes Tank是一种工具,用于为基于EOS的网络开发共识算法和最终算法,并基于奇偶校验底物(Polkadot)测试平行链。 在功能方面,它与Hyperledger Caliper十分接近,因为它使您可以从任何运行测试脚本的分布式系统和客户端计算机的节点中收集重要指标。
MixBytes Tank使用多种云服务(Digital Ocean,Google Cloud Engine等),它可以启动多个节点,执行初步配置过程,在不同计算机上同时运行多个基准测试,收集必要的指标并自动熄灭网络。
MixBytes Tank可让您在云服务器上节省资金,并在测试后自动将不必要的资源减至最少。 另一个与众不同的功能是使用了Molecule软件包,该软件包允许开发人员在本地测试所需区块链的部署。
MixBytes Tank可以及早发现瓶颈和错误,这些错误和错误发生在具有大量地理位置分散的服务器和客户端的真实网络中。 如果客户在高度可重复的条件下以给定的tps发送交易,并且必要时在不同大洲之间分布有真实数量的节点,那么该交易平台将帮助您了解节点上将会发生的情况。

Whiteblock Genesis是一个基于以太坊的区块链测试平台。 该工具具有相当广泛的功能:它允许您启动网络,在其中创建所需数量的帐户,增加所需的客户端数量,配置网络拓扑,指定带宽,丢包参数并运行测试。
Whiteblock Genesis提供了自己的测试工具。 开发人员指定测试参数,使用现成的API运行它们并使用便捷的仪表板获取结果就足够了。
Whiteblock Genesis允许您配置相当详细的测试,平台将针对每次重大代码更改自动进行测试。 这将使您能够在早期阶段发现错误,并立即评估更改对重要网络参数(如事务处理速度和节点消耗的资源)的影响。
马特
用于测试分布式系统的另一个有趣的年轻产品是madt 。 它是用Python编写的,允许您使用简单的配置脚本( 示例 )创建必要的网络拓扑以及所需数量的服务器和客户端。 之后,该服务将网络部署在多个Docker容器中,并引发一个Web界面,您可以在其中监视来自服务器和网络客户端的消息。 Madt可用于测试区块链-在项目存储库中,有一个基于Kademlia协议的p2p网络测试,其中逐渐增加了将数据传送到节点的延迟,并检查了该数据的状态。
Madt最近出现了,但是,由于其非常灵活的体系结构,它可以发展为功能性产品。
其他解决方案
几乎所有对区块链系统部分的测试都需要启动初步脚本,准备测试账户和条件(这可能是测试可能产生大量fork链的共识错误,制定硬fork脚本,更改系统参数等)。 不同区块链中的所有这些操作都以不同的方式执行,因此团队更容易将产品的测试和基准逐步适应内部CI / CD并使用自己的开发,随着区块链功能的发展逐渐变得更加复杂。
但是,使用现成的解决方案可以大大减少这些团队的测试时间,因此,我认为该软件将在未来几年积极开发。
结论
最后,我将列出区块链测试工具的几个重要特征:
- 在可重复条件下自动部署区块链网络的能力。 在开发区块链的系统部分时,这一因素很重要:共识算法,最终性,系统智能合约。
- 系统拥有权的价格,消耗的资源以及持续使用的便利性。 这个因素为项目提供了高质量的测试,而且花费很少。
- 测试配置的灵活性和简单性。 这个因素增加了识别系统问题的机会-不太可能错过重要的事情。
- 特定类型区块链的定制。 基于现有解决方案开发解决方案可以极大地提高质量并减少时间成本。
- 结果及其类型(报告,指标,图形,日志等)的便捷性和可访问性。 如果要跟踪产品开发的历史记录,或者需要对区块链网络的行为进行深入分析,这是绝对必要的。
祝您测试顺利,让您的区块链变得快速且容错!