caliper测试的使用

文章 , 技术分享
2603 1

创建工作目录

(运行caliper的使用需要用到nodejs环境)
mkdir benchmarks && cd benchmarks
初始化NPM项目,创建package.json文件以方便后续依赖项的安装
npm init
安装caliper-cli
npm install --only=prod @hyperledger/caliper-cli@0.2.0
检查caliper-cli是否安装成功
npx caliper –version
v0.2.0

绑定测试平台及适配器版本

npx caliper bind --caliper-bind-sut fisco-bcos --caliper-bind-sdk latest
–caliper-bind-sut :用于指定需要测试的区块链平台,即受测系统
–caliper-bind-sdk:用于指定适配器版本;(FISCO BCOS对于caliper 0.2.0版本的适配存在部分不兼容情况)

知道测试需要用到的文件夹

caliper文件夹讲解

caliper文件夹讲解

caliper文件夹讲解

npx caliper benchmark run --caliper-workspace <工作目录> --caliper-benchconfig <测试配置文件路径> --caliper-networkconfig <网络配置文件路径>

例如:

npx caliper benchmark run --caliper-workspace caliper-benchmarks --caliper-benchconfig benchmarks/samples/fisco-bcos/helloworld/config.yaml --caliper-networkconfig networks/fisco-bcos/4nodes1group/fisco-bcos.json

在网络配置文件中需要填写测压的合约代码路径

测压合约代码的编写讲解

在配置文件中每个参数的含义

配置文件中参数含义

这段YAML代码是Caliper区块链基准测试工具的测试配置文件中的一个测试场景配置。让我们逐行解释这段代码:

  • test:: 这是测试场景的开始标签。
  • name: neweneryCaliper: 这是测试场景的名称,用于标识测试的类型或名称。
  • description: caliper 测试的示例: 这是对测试场景的简短描述,说明该测试是Caliper的一个示例测试。
  • clients:: 这是客户端配置的开始标签,用于指定参与测试的客户端。

    • type: local: 这表示使用本地客户端进行测试。本地客户端是指在测试运行的同一台机器上执行的客户端。
    • number: 1: 这表示参与测试的本地客户端数量为1个。换句话说,这个测试将使用一个本地客户端来执行测试操作。

请注意,此配置文件仅涵盖了测试场景的基本信息和客户端配置,实际的测试场景中将包含更多的测试细节和相关的配置,如区块链网络配置、智能合约配置、速率控制设置等。

生产的report文件

测试文件介绍

这段YAML代码是Caliper区块链基准测试工具的测试配置文件,用于测试以太坊智能合约的性能。让我们逐行解释这段代码:

  • label: getUserEnergy: 这是测试标签,用于标识测试场景或测试类型。
  • description: Test performance of name: 这是对测试的简短描述,说明测试的目标是测试name合约的性能。
  • txNumber: 这里没有指定具体的事务数量,表示该测试使用默认的事务数量。默认情况下,Caliper会发送一定数量的事务以进行性能测试。
  • rateControl: 这是速率控制的配置项,用于控制测试的发送速率。

    • type: fixed-rate: 这表示采用固定的事务发送速率进行测试。
    • opts: 这是速率控制选项的详细配置。

      • tps: 10: 这表示每秒发送的事务数量(TPS,Transactions Per Second)是10个。意味着在测试过程中,Caliper将以每秒10个事务的速率发送交易。
  • callback: benchmarks/samples/fisco-bcos/newenery/getUserEnergy.js: 这是测试的回调脚本。Caliper使用此脚本来执行测试。在这个例子中,测试脚本位于benchmarks/samples/fisco-bcos/newenery/getUserEnergy.js

测试脚本getUserEnergy.js将包含用于测试的实际JavaScript代码。它可能包含与智能合约的交互、测试逻辑和性能测量相关的代码。这个脚本将被Caliper引擎加载和执行,以进行性能测试并收集测试结果。

请注意,此配置文件仅涵盖了测试的基本信息和速率控制设置,实际的测试脚本中将包含更多与智能合约交互的细节和逻辑。

测试文件配置

通过调用invokeSmartContract()函数,执行一批交易(这些交易由generateWorkload()函数生成),然后通过queryState()函数查询智能合约状态,以获取所有设备的列表。通过这两步操作,可以测试智能合约的执行能力和状态查询功能。

在Caliper中,invokeSmartContract()queryState()是两个常用的函数,用于测试区块链网络上的智能合约。它们的使用方式和区分如下:

  1. invokeSmartContract()函数:

    • 使用方式:await bc.invokeSmartContract(contx, contractID, contractVersion, workload, contextInfo);
    • 作用:用于执行智能合约的交易,将交易发送到区块链网络进行执行。
    • 参数解释:

      • contx: 上下文信息,通常用于跟踪和管理测试中的状态。
      • contractID: 要调用的智能合约的名称或ID。
      • contractVersion: 要调用的智能合约的版本。
      • workload: 一个包含交易信息的数组,即要执行的交易列表。
      • contextInfo: 可选参数,用于提供与测试相关的额外信息。
  2. queryState()函数:

    • 使用方式:return bc.queryState(contx, contractID, contractVersion, args, queryFunction);
    • 作用:用于查询智能合约的状态数据。
    • 参数解释:

      • contx: 上下文信息,通常用于跟踪和管理测试中的状态。
      • contractID: 要查询的智能合约的名称或ID。
      • contractVersion: 要查询的智能合约的版本。
      • args: 可选参数,用于传递给智能合约函数的输入参数。
      • queryFunction: 要调用的智能合约函数名称。

区分两者的关键是看它们的功能和用途:

  • invokeSmartContract()用于执行交易,即向区块链发送交易请求,对智能合约进行状态改变。
  • queryState()用于查询状态,即向区块链发送一个请求来读取智能合约的状态数据,而不改变智能合约的状态。

invokeSmartContract()执行交易并改变状态,queryState()查询状态但不改变状态。根据测试场景的不同,你可以选择适当的函数来测试区块链网络和智能合约的性能。

最后更新 2023-07-25
评论 ( 1 )
OωO
隐私评论