oe1019
作者oe1019·2019-11-06 17:56
软件开发工程师·IBM

在Linux One平台通过Caliper对IBM blockchain platform上的hyperledger network进行性能测试

字数 3874阅读 4046评论 0赞 2

前序

在IBM LinuxOne上安装部署了一套IBP network,并已安装好智能合约
并为测试环境建立好虚拟机,本文将在虚拟机中安装并启动Caliper

综述

Caliper是一个基于nodejs语言的开源的区块链网络性能测试工具。
本文旨在IBM LinuxOne服务器上应用其强大的计算能力来对运行在IBM blockchain platform上的智能合约进行性能测试。

主要分为安装,配置,编写测试集,运行4个步骤

安装Caliper

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

配置

Caliper网络文件和钱包

首先,这里推荐大家通过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或其他,需要额外的格式转换工作。不是本文的重点,有兴趣的同学可以自行研究。

基于fabric nodejs sdk network_config.json的Caliper改造:

改造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测试文件

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测试

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://developer.ibm.com/technologies/blockchain/tutorials/blockchain-performance-testing-smart-contracts-vscode-caliper

https://cloud.ibm.com/docs/services/blockchain?topic=blockchain-ibp-console-identities

https://hyperledger.github.io/caliper/

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广