Fisco Bcos2.x使用Caliper工具进行压力测试
Fisco Bcos Caliper测试工具虽然可以和Fisco-Bcos进行绑定执行压力测试,目前通过Caliper进行压测FISCO BCOS的方式已较为陈旧。所以目前FISCO BCOS2适配的Caliper版本为0.2.0,请在部署Caliper运行环境时确保Caliper的版本正确。
配置基本环境
-
部署Caliper的计算机需要有外网权限;
-
操作系统版本需要满足以下要求:
Ubuntu >= 16.04
CentOS >= 7
MacOS >= 10.14 -
部署Caliper的计算机需要安装有以下软件:
python 2.7
make
g++
gcc
git
安装docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose
配置Docker Daemon
在执行此步骤前先停止docker服务
创建/etc/docker/daemon.json文件(如果已经存在则修改)
{"hosts" : ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}
使用sudo systemctl edit docker新建或修改/etc/systemd/system/docker.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
重新加载daemon并重启docker服务:
sudo systemctl daemon-reload
sudo systemctl restart docker.service
下载caliper
npm install --only=prod @hyperledger/caliper-cli@0.2.0
下载预定义测试用例
git clone https://gitee.com/vita-dounai/caliper-benchmarks.git
修改源代码处理
fisco bcos当前版本和caliper之间有一些兼容问题,所以请按照下面所述步骤进行修改。
修改三个文件,一个依赖包版本
fiscoBcos.js:
./node_modules/@hyperledger/caliper-fisco-bcos/lib/fiscoBcos.js
channelPromise.js:
./node_modules/@hyperledger/caliper-fisco-bcos/lib/channelPromise.js
web3sync.js:
./node_modules/@hyperledger/caliper-fisco-bcos/lib/web3lib/web3sync.js
secp256k1依赖包版本:
./node_modules/@hyperledger/caliper-fisco-bcos/package.json
fiscoBcos.js
修改一
最上面常量
//const Color = require('./common');
const Color = require('./common').Color;
修改二
在constructor(config_path,workspace_root){}最后加入
if(this.fiscoBcosSettings.network && this.fiscoBcosSettings.network.authentication){for(let k in this.fiscoBcosSettings.network.authentication){this.fiscoBcosSettings.network.authentication[k]=CaliperUtils.resolvePath(this.fiscoBcosSettings.network.authentication[k],workspace_root)}
}
修改三
在 async installSmartContract{}最前面修改
//const fiscoBcosSettings = CaliperUtils.parseYaml(this.configPath)['fisco-bcos'];
const fiscoBcosSettings = this.fiscoBcosSettings;
channelPromise.js
修改一
在function parseResponse(response){}处修改
//let emitter = emitters.get(seq).emitter;
let emitter = emitters.get(seq);
if(!emitter){return;
}
emitter = emitter.emitter;
web3sync.js
修改一
在function genRandomID(){}处修改
//uuid = uuid.replace(/-/g,'');
uuid = '0x'+uuid.replace(/-/g,'');
修改二
在function getSignTx(){ let postdata = {} }处修改
//extraData:''
extraData:'0x0'
修改三
在function getSignDeployTx(){ let postdata = {} }处修改
//extraData:''
extraData:'0x0'
secp256k1依赖包
node_modules/@hyperledger/caliper-fisco-bcos目录,package.json文件
在dependencies中添加
"secp256k1":"^3.8.0"
在该目录执行npm i
绑定 fisco-bcos
npx caliper bind --caliper-bind-sut fisco-bcos --caliper-bind-sdk latest
执行HelloWorld合约测试
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
测试本地搭好的链
monitor:type:- processprocess:- command: node0multiOutput: avg- command: node1multiOutput: avg- command: node2multiOutput: avg- command: node3multiOutput: avginterval: 0.1
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
错误及问题解决
-bash: /usr/local/bin/docker-compose: permission denied
这个错误提示意味着你没有执行docker-compose命令的权限。你需要使用sudo命令或者以root用户身份执行该命令。你可以尝试使用以下命令来解决这个问题:sudo chmod +x /usr/local/bin/docker-compose这个命令将会给docker-compose文件添加可执行权限,这样你就可以在不使用sudo命令或者root用户身份的情况下执行docker-compose命令了。