如果想测试一下超级账本fabric对某个合约函数的执行时间是多少,简单地可以通过打印合约函数开始执行时间和结束执行时间来计算时间差就可以了。
Tape 是一款轻量级 Hyperledger Fabric 性能测试工具。
tape的github地址:https://github.com/Hyperledger-TWGC/tape
步骤:
- 启动Fabric2.4网络环境,安装部署官方链码(asset)(成功搭建Fabric2.x网络是前提)
./network.sh up createChannel -s couchdb
注意一定要有couchdb,不然会不成功的!!!!!!!!
- 克隆官方tape仓库:git clone https://github.com/Hyperledger-TWGC/tape
- 将test-network的网络生成的证书文件夹复制到tape文件内:
- 进入Tape文件夹下,找到config.yaml文件,修改配置信息如下:
将config.yaml文件配置信息替换为如下配置信息
# Definition of nodes
peer1: &peer1
addr: localhost:7051
ssl_target_name_override: peer0.org1.example.com
org: org1
tls_ca_cert: /config/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem
peer2: &peer2
addr: localhost:9051
ssl_target_name_override: peer0.org2.example.com
org: org2
tls_ca_cert: /config/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem
orderer1: &orderer1
addr: localhost:7050
ssl_target_name_override: orderer.example.com
org: org1
tls_ca_cert: /config/organizations/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem
policyFile: /config/test/andLogic.rego
# Nodes to interact with
endorsers:
- *peer1
# we might support multi-committer in the future for more complex test scenario,
# i.e. consider tx committed only if it's done on >50% of nodes. But for now,
# it seems sufficient to support single committer.
committers:
- *peer1
- *peer2
commitThreshold: 1
orderer: *orderer1
# Invocation configs
channel: mychannel
chaincode: basic
args:
- GetAllAssets
mspid: Org1MSP
private_key: /config/organizations/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/priv_sk
sign_cert: /config/organizations/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem
num_of_conn: 10
client_per_conn: 10
- 然后在tape文件夹下命令行输入如下命令启动执行,成功运行截图如下:
docker run --network=host -v $PWD:/config guoger/tape tape -c /config/config.yaml -n 50000
参数含义如下:
Time:耗时
Block:区块高度
tx:交易数量
duration:总耗时
tps:每秒交易数量 (TPS = 交易数量 / 交易总耗时)
如果要运行1000次指定的合约函数,可以运行下面的命令:
./tape --config=config.yaml --number=1000
或
./tape -c config.yaml -n 1000
上面的命令是直接运行1000次指定的合约函数,这样有可能瞬间的交易量过大,区块链处理不过来而导致交易丢失。Tape有2个参数–rate和–brust,利用令牌桶的机制实现限流。
burst参数是一个整数,定义了令牌桶的大小,
rate参数是一个浮点数,定义了每秒钟往令牌桶增加令牌的数量(注意,rate可以是小数,如rate为0.2,表示每秒钟往令牌桶增加0.2个令牌),0表示没有限制
rate参数不能大于burst,否则,rate的大小设为burst的大小
./tape -c config.yaml -n 1000 --rate=0.2 --burst=1 表示令牌桶里的令牌初始值1个,一开始执行1次合约函数(每执行1次合约函数,令牌数减1),令牌桶里的令牌剩余数变为0。后面是每秒增加0.2个令牌,到第5秒时,令牌桶里的令牌数为1,那么再次执行1次合约函数,令牌桶里的令牌剩余数又变为0,如此类推。
./tape -c config.yaml -n 1000 --rate=0.2 --burst=2 表示令牌桶里的令牌初始值2个,一开始执行2次合约函数,令牌桶里的令牌剩余数变为0。后面是每秒增加0.2个令牌,到第5秒时,令牌桶里的令牌数为1,那么再次执行1次合约函数,令牌桶里的令牌剩余数又变为0,如此类推。
假设只运行2次Test函数, 执行命令:./tape -c config.yaml -n 2
,我们可以看到运行结果:
Time 2.15s Block 1049 Tx 2
tx: 2, duration: 2.146063431s, tps: 0.931939
上述结果表示:
总耗时约 2.146063431秒,交易写入的区块号是1049,交易数量是2个,TPS(每秒交易数量)是0.931939 (TPS = 交易数量 / 交易总耗时)
通过Tape工具,可以实现Fabric对某个指定合约函数的压力测试,并得到相应的TPS测试结果