Caliper环境搭建及使用
文章目录
- 准备工作
- 一、安装Caliper
- 二、使用Caliper进行测试
- 总结
准备工作
Hyperledger Caliper是Fabric的一个性能测试框架,本质上是通过Node SDK,不断向Fabric网络发送请求,获得相应,从而计算Fabric网络的性能。性能测试实验是基于已经存在并运行的Fabric网络的,因此在使用caliper模块做测试之前,需要搭建好网络
,在前期的文章中已经介绍了如何快速搭建一个fabric的网络环境,在此不仅行赘述。
一、安装Caliper
caliper-benchmarks
中包含区块链性能基准框架 Caliper 所能够使用的测试案例,因此用过caliper-benchmarks库中所提供的案例进行caliper测试
cd $GOPATH/src/github.com/hyperledger/fabric/scripts/
git clone https://github.com/hyperledger/caliper-benchmarks
cd caliper-benchmarks
caliper-benchmarks/benchmarks/samples
下面存放了fabric和fisco两种区块链的测试用例,目录结构如下
.
├── README.md
├── fabric
│ ├── README.md
│ ├── fabcar
│ └── marbles
└── fisco-bcos├── helloworld└── transfer
以fabric中的fabcar为例,在caliper-benchmarks/benchmarks/samples/fabric/fabcar
目录下面存放了各种与合约fabcar交互的代码,caliper则是通过调用这些代码来完成压力测试。
.
├── changeCarOwner.js
├── config.yaml
├── createCar.js
├── queryAllCars.js
└── queryCar.js
再介绍完caliper-benchmark仓库的作用之后,我们通过npm来安装caliper
#进入到caliper-benchmarks目录下
cd caliper-benchmarks
# 生成packge.json文件
npm init -y
#安装caliper-cli@0.4.2
npm install --only=prod @hyperledger/caliper-cli@0.4.2
#将caliper与区块链平台绑定
npx caliper bind --caliper-bind-sut fabric:2.2
二、使用Caliper进行测试
前提:已经启动test-network网络,并且部署了fabcar合约
cd $GOPATH/src/github.com/hyperledger/fabric/scripts/caliper-benchmarks
npx caliper launch manager \\
--caliper-workspace ./ \\
--caliper-networkconfig networks/fabric/test-network.yaml \\
--caliper-benchconfig benchmarks/samples/fabric/fabcar/config.yaml \\
--caliper-flow-only-test \\
--caliper-fabric-gateway-enabled
得到的响应为:
2023.04.20-14:16:30.160 info [caliper] [round-orchestrator] Finished round 4 (Query a car.) in 30.116 seconds
2023.04.20-14:16:30.160 info [caliper] [monitor.js] Stopping all monitors
2023.04.20-14:16:30.160 info [caliper] [report-builder] All test results
2023.04.20-14:16:30.162 info [caliper] [report-builder]
+-------------------+-------+------+-----------------+-----------------+------------------+-----------------+------------------+
| Name | Succ | Fail | Send Rate (TPS) | Max Latency (s) | Min Latency (s) | Avg Latency (s) | Throughput (TPS) |
|-------------------|-------|------|-----------------|-----------------|------------------|-----------------|------------------|
| Create a car. | 0 | 5000 | 228.8 | 0.00 | 9007199254740.99 | - | 228.6 |
|-------------------|-------|------|-----------------|-----------------|------------------|-----------------|------------------|
| Change car owner. | 1412 | 0 | 48.3 | 2.03 | 0.03 | 0.12 | 45.4 |
|-------------------|-------|------|-----------------|-----------------|------------------|-----------------|------------------|
| Query all cars. | 13242 | 0 | 456.5 | 0.12 | 0.01 | 0.01 | 456.4 |
|-------------------|-------|------|-----------------|-----------------|------------------|-----------------|------------------|
| Query a car. | 15356 | 0 | 529.4 | 0.05 | 0.01 | 0.01 | 529.3 |
+-------------------+-------+------+-----------------+-----------------+------------------+-----------------+------------------+2023.04.20-14:16:30.180 info [caliper] [report-builder] Generated report with path /Users/hanallen/go/src/github.com/hyperledger/fabric/scripts/caliper-benchmarks/report.html
2023.04.20-14:16:30.180 info [caliper] [monitor.js] Stopping all monitors
2023.04.20-14:16:30.180 info [caliper] [worker-orchestrator] Sending exit message to connected workers
2023.04.20-14:16:30.181 info [caliper] [round-orchestrator] Benchmark finished in 155.287 seconds. Total rounds: 4. Successful rounds: 4. Failed rounds: 0.
2023.04.20-14:16:30.181 info [caliper] [worker-message-handler] Worker#0 is exiting
2023.04.20-14:16:30.181 info [caliper] [caliper-engine] Skipping end command due to benchmark flow conditioning
2023.04.20-14:16:30.181 info [caliper] [worker-message-handler] Worker#2 is exiting
2023.04.20-14:16:30.181 info [caliper] [cli-launch-manager] Benchmark successfully finished
2023.04.20-14:16:30.181 info [caliper] [worker-message-handler] Worker#3 is exiting
2023.04.20-14:16:30.181 info [caliper] [worker-message-handler] Worker#4 is exiting
2023.04.20-14:16:30.181 info [caliper] [worker-message-handler] Worker#1 is exiting
总结
当我们在进行使用caliper进行区块链性能测试的时候,我们需要做如下几方面工作:
1、首先需要在区块链网络中部署相应的业务合约,后续测试以该合约为基础
2、在caliper中定义相应的合约调用函数,然后通过caliper去执行
后面将通过caliper完成更加复杂的测试工作,比如对提出共识算法的性能测试等。