创建工作目录
(运行caliper的使用需要用到nodejs环境)mkdir benchmarks && cd benchmarks
初始化NPM项目,创建package.json文件以方便后续依赖项的安装npm init
安装caliper-clinpm install --only=prod @hyperledger/[email protected]
检查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版本的适配存在部分不兼容情况)
知道测试需要用到的文件夹
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个。换句话说,这个测试将使用一个本地客户端来执行测试操作。
请注意,此配置文件仅涵盖了测试场景的基本信息和客户端配置,实际的测试场景中将包含更多的测试细节和相关的配置,如区块链网络配置、智能合约配置、速率控制设置等。
这段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()
是两个常用的函数,用于测试区块链网络上的智能合约。它们的使用方式和区分如下:
invokeSmartContract()
函数:- 使用方式:
await bc.invokeSmartContract(contx, contractID, contractVersion, workload, contextInfo);
- 作用:用于执行智能合约的交易,将交易发送到区块链网络进行执行。
参数解释:
contx
: 上下文信息,通常用于跟踪和管理测试中的状态。contractID
: 要调用的智能合约的名称或ID。contractVersion
: 要调用的智能合约的版本。workload
: 一个包含交易信息的数组,即要执行的交易列表。contextInfo
: 可选参数,用于提供与测试相关的额外信息。
- 使用方式:
queryState()
函数:- 使用方式:
return bc.queryState(contx, contractID, contractVersion, args, queryFunction);
- 作用:用于查询智能合约的状态数据。
参数解释:
contx
: 上下文信息,通常用于跟踪和管理测试中的状态。contractID
: 要查询的智能合约的名称或ID。contractVersion
: 要查询的智能合约的版本。args
: 可选参数,用于传递给智能合约函数的输入参数。queryFunction
: 要调用的智能合约函数名称。
- 使用方式:
区分两者的关键是看它们的功能和用途:
invokeSmartContract()
用于执行交易,即向区块链发送交易请求,对智能合约进行状态改变。queryState()
用于查询状态,即向区块链发送一个请求来读取智能合约的状态数据,而不改变智能合约的状态。
invokeSmartContract()
执行交易并改变状态,queryState()
查询状态但不改变状态。根据测试场景的不同,你可以选择适当的函数来测试区块链网络和智能合约的性能。
版权属于:戏人看戏博客网
本文链接:https://day.nb.sb/archives/1200.html
若无注明均为戏人看戏原创,转载请注明出处,感谢您的支持!
我从早上翻到晚上,终于找到一篇写caliper自定义测试样例的文章了(哭
git clone https://gitee.com/nb-sb/caliper-benchmarks.git