在IBM LinuxOne上安装部署了一套IBP network,并已安装好智能合约
并为测试环境建立好虚拟机,本文将在虚拟机中安装并启动Caliper
Caliper是一个基于nodejs语言的开源的区块链网络性能测试工具。
本文旨在IBM LinuxOne服务器上应用其强大的计算能力来对运行在IBM blockchain platform上的智能合约进行性能测试。
主要分为安装,配置,编写测试集,运行4个步骤
npm安装,略
npm install -g --only=prod @hyperledger/caliper-cli@0.1.0
配置Caliper对fabric的支持
caliper bind --caliper-bind-sut fabric --caliper-bind-sdk 1.4.4 --caliper-bind-args=-g
首先,这里推荐大家通过IBP consule下载网络配置和钱包,因为比较简单
详见IBP官方手册
https://cloud.ibm.com/docs/services/blockchain?topic=blockchain-ibp-console-identities
Caliper是基于nodejs做开发的,所以在网络配置方面(我们这里指fabric)继承了fabric nodejs sdk的网络配置参数
https://fabric-sdk-node.github.io/release-1.4/tutorial-network-config.html
我们可以手工编写一个符合fabric nodejs sdk标准的network_config.json
个人是倾向于通过fabric ca node sdk去enroll并且通过sdk自带的wallet等接口持久化在本地
如果是用java sdk或其他,需要额外的格式转换工作。不是本文的重点,有兴趣的同学可以自行研究。
改造network_config.json以符合caliper标准,为network_config.json添加如下字段(这里给出模板作为参考)
{
"caliper": { "blockchain": "fabric"},
"wallet": "",
"clients": {
"admin": {
"client": {
"organization": "orgname",
"connection": {
"timeout": {
"peer": {
"endorser": "300"
},
"orderer": "300"
}
}
}
}
},
"channels": {
"mychannel": {
"chaincodes": [
{
"id": "chaincode_name",
"version": "chaincode_version"
}
]
}
},
}
Caliper测试文件需要实现init,run,end三个接口
init,是作为initialise测试的接口只会调用一次。
run,是一个可以并发的真正测试负载的接口,因此在这个接口的实现中不要出现block或未捕捉的异常。
end,是作为测试结束的清理测试数据的接口。
这里参考Nick Lincoln的文章,给出一个不带参数的测试文件作为模板供大家对比参考。
'use strict' ;
module . exports . info = 'Template callback' ;
const contractID = 'chaincodename' ;
const version = 'chaincodeversion' ;
let bc , ctx , clientArgs , clientIdx ;
module . exports . init = async function ( blockchain , context , args ) {
bc = blockchain ;
ctx = context ;
const myArgs = {
chaincodeFunction: 'Init' ,
invokerIdentity: 'admin' ,
chaincodeArguments: []
};
return bc . bcObj . querySmartContract ( ctx , contractID , version , myArgs );
};
module . exports . run = function () {
const myArgs = {
chaincodeFunction: 'Invoke' ,
invokerIdentity: 'admin' ,
chaincodeArguments: []
};
return bc . bcObj . querySmartContract ( ctx , contractID , version , myArgs );
//return Promise.resolve();
};
module . exports . end = async function () {
const myArgs = {
chaincodeFunction: 'Init' ,
invokerIdentity: 'admin' ,
chaincodeArguments: []
};
return bc . bcObj . querySmartContract ( ctx , contractID , version , myArgs );
//return Promise.resolve();
};
接下来我们要将准备好的测试文件,本地钱包,caliper网络配置整合到一起,成为caliper的测试集,如下:
---
test:
name: my-asset-benchmark
description: Benchmarking as sample
clients:
type: local
number: 2
rounds:
- label: queryAssetBenchmark
description: Query asset benchmark test
chaincodeId: CaliperTest
txDuration:
- 30
rateControl:
- type: fixed-backlog
opts:
unfinished_per_client: 2
callback: callbacks/queryAssetBenchmark.js
monitor:
type:
- none
完成后的对应的目录结构为:
.
├── callbacks
│ └── queryAssetBenchmark.js
├── myAssetBenchmark.yaml
├── myWallet
│ └── admin
│ ├── -priv
│ ├── -pub
│ └── admin
└── network_config.json
caliper benchmark run --caliper-benchconfig myAssetBenchmark.yaml --caliper-networkconfig network_config.json --caliper-workspace ./ --caliper-flow-only-test --caliper-fabric-usegateway --caliper-fabric-discovery
https://cloud.ibm.com/docs/services/blockchain?topic=blockchain-ibp-console-identities
https://fabric-sdk-node.github.io/release-1.4/tutorial-network-config.html
https://cloud.ibm.com/docs/services/blockchain?topic=blockchain-ibp-console-identities
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞2
添加新评论0 条评论