您好,登錄后才能下訂單哦!
Caliper是一個(gè)區(qū)塊鏈性能測試框架,可用于測試不同的區(qū)塊鏈實(shí)現(xiàn)。支持
測試內(nèi)容指標(biāo)包括:
先安裝NodeJS 8.X、node-gyp、Docker、Docker-compose。
git clone https://github.com/hyperledger/caliper.git
cd caliper
npm install
# caliper項(xiàng)目目錄下
npm install grpc@1.10.1 fabric-ca-client fabric-client
性能測試示例在benchmark
目錄下,用法如下:
node benchmark/simple/main.js -c yourconfig.json -n yournetwork.json
config.json
;跑一個(gè)smallbank的例子:
node benchmark/smallbank/main.js
生成的報(bào)告長這樣(部分):
在這個(gè)標(biāo)準(zhǔn)框架核心,是可以譯解信息的“適配層”,讓Caliper可以安裝智能合約,觸發(fā)合約,或者查詢各種分布式賬本的狀態(tài),從而更好地測量其有效性。
適配層用于將現(xiàn)有的區(qū)塊鏈系統(tǒng)與Caliper框架集成。適配器使用了相應(yīng)的鏈SDK和API實(shí)現(xiàn)了Caliper Blockchain NBIs。
以benchmark/simple/config.json
為例:
{
"blockchain": {
"type": "fabric",
"config": "benchmark/simple/fabric.json"
},
"command" : {
"start": "docker-compose -f network/fabric/simplenetwork/docker-compose.yaml up -d",
"end" : "docker-compose -f network/fabric/simplenetwork/docker-compose.yaml down;docker rm $(docker ps -aq);docker rmi $(docker images dev* -q)"
},
"test": {
"name": "simple",
"description" : "This is an example benchmark for caliper, to test the backend DLT's performance with simple account opening & querying transactions",
"clients": {
"type": "local",
"number": 5
},
"rounds": [{
"label" : "open",
"txNumber" : [1000, 1000, 1000],
"rateControl" : [{"type": "fixed-rate", "opts": {"tps" : 50}}, {"type": "fixed-rate", "opts": {"tps" : 100}}, {"type": "fixed-rate", "opts": {"tps" : 150}}],
"arguments": { "money": 10000 },
"callback" : "benchmark/simple/open.js"
},
{
"label" : "query",
"txNumber" : [5000, 5000],
"rateControl" : [{"type": "fixed-rate", "opts": {"tps" : 100}}, {"type": "fixed-rate", "opts": {"tps" : 200}}],
"callback" : "benchmark/simple/query.js"
}]
},
"monitor": {
"type": ["docker", "process"],
"docker":{
"name": ["all"]
},
"process": [
{
"command" : "node",
"arguments" : "local-client.js",
"multiOutput" : "avg"
}
],
"interval": 1
}
}
master實(shí)現(xiàn)的測試流包含三個(gè)階段:
Local client
由于Node.js天生時(shí)單線程的,因此會(huì)fork多個(gè)local client子進(jìn)程來充分利用多核,提高測試效率。每個(gè)子進(jìn)程都運(yùn)行有一個(gè)區(qū)塊鏈客戶端。
Zookeeper client
多個(gè)zoookeeper client是獨(dú)立啟動(dòng)的,啟動(dòng)后會(huì)注冊自己并待命測試任務(wù),測試后會(huì)創(chuàng)建一個(gè)包含結(jié)果數(shù)據(jù)的znode。也是會(huì)fork多個(gè)子進(jìn)程(local client)。
其中定義有生成和提交交易的function(返回值都是promise):
init
:會(huì)在每輪測試前被client調(diào)用;run
:定義如何執(zhí)行交易。client會(huì)根據(jù)workload定義循環(huán)調(diào)用它;end
:每輪測試后被調(diào)用,通常定義一些清理工作。還是基于上邊的架構(gòu)圖,這次從上往下捋。
首先是Benchmark Layer
從測試命令入手,以smallbank
為例:
node benchmark/smallbank/main.js
測試用例位于benchmark/
目錄下。由測試人員編寫,并配置到-c
指定的配置文件的test.rounds[.callback]
中。
在main.js
中主要是加載兩個(gè)配置文件,然后調(diào)用src/comm/bench-flow.js
的run
方法,將兩個(gè)配置文件傳進(jìn)去:
const framework = require('../../src/comm/bench-flow.js');
framework.run(absConfigFile, absNetworkFile);
bench-flow.js
可以認(rèn)為是測試引擎,run
方法定義了完整的測試流程。
下邊是接口和核心層
接口即Blockchain NBIs,位于src/comm/blockchain-interface.js
中的,其中的BlockchainInterface
定義了區(qū)塊鏈的基本操作:
為了生成測試報(bào)告,首先必須有監(jiān)控來收集數(shù)據(jù),主要側(cè)重于對(duì)Docker和Process的監(jiān)控,代碼文件包括monitor-interface.js
和monitor-docker.js
、monitor-process.js
。從名字可以看出是接口和兩個(gè)具體實(shí)現(xiàn),看一下接口定義了些啥:
除了啟停操作,主要側(cè)重于對(duì)CPU、內(nèi)存和網(wǎng)絡(luò)的監(jiān)控。
數(shù)據(jù)統(tǒng)計(jì)和報(bào)告生成功能位于src/comm/report.js
。
適配層
caliper支持對(duì)Fabric、Sawtooth等的測試,看架構(gòu)圖上還想對(duì)以太坊進(jìn)行支持,但是目前還沒有。
具體的適配代碼分別位于src/fabric
、src/sawtooth
、src/iroha
等目錄下,比如fabric.js
中的Fabric
類就繼承自BlockchainInterface
,實(shí)現(xiàn)了初始化、安裝/執(zhí)行智能合約等功能。
這些功能內(nèi)部自然就是調(diào)用了fabric-client
,所以測試前需要先進(jìn)行安裝:
npm install grpc@1.10.1 fabric-ca-client fabric-client
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。