使用PTE对目标Fabric网络进行测试

使用PTE对目标Fabric网络进行测试

PTE的官方git:
https://github.com/dongmingh/v1performance#performance-traffic-engine---pte

The Performance Traffic Engine(PTE) 使用SDKs与Hyperledger Fabric网络进行交互,其向一个或者多个网络发送请求并接受响应。目前只支持Node SDK。

PTE的设计主要为了满足两个需求:

  • 监控Fabric复杂的网络,包括节点地址,节点数量、channel的数量、组织、peer和orderers等。
  • 支持多样的测试用例,例如不同的chaincode、交易数量、测试时间、类型、模式以及部署规模等。

PTE在设计时着重考虑灵活性和模块哈。其提供了针对各种测试用例的操作选择。其设计图如下:
PTE的基本功能有:

  • channel:创建和加入channel
  • chaincode:安装和实例化chaincode
  • transaction:发送交易到目标peer,可以定制化交易的类型、模式和频率
  • Network:可以与本地或者远程的fabric网络进行交互
  • scaling:轻松扩展多网络、orderer、peers、组织、channel和chaincode
  • event:开启event端口,维护和记录event的接收和未接收状态
  • Blockchain高度:可以查询Blockchain的高度和transaction的数量
  • result:支持对发送交易的event接收,以及校验交易完成后的Blockchain状态
  • 多PTEs:轻松构建多个PTEs

准备

在测试之前需要准备一些运行的环境:

  • node和npm lts/boron release (v6.10.x and v3.10.x)
    • node V7并没有支持
  • gulp
npm install -g gulp
  • go(v1.7 or later)

如果你想要在测试本地的fabric网络。则需要docker环境并且构建fabric网络,参考:Hyperledger Fabric Doc。

开始测试

  1. 下载fabric-test源码
go get -d github.com/hyperledger/fabric-test
  1. 下载或者更新Fabric、fabric-ca和fabric-sdk-node,可参考fabric-test。
  • 进入fabric-test目录
    cd $GOPATH/src/github.com/hyperledger/fabric-test
  • 第一次启动的时候
    git submodule update --init --recursive
    git submodule foreach git pull origin master
  • 非第一次启动
    git submodule foreach git pull origin master
  1. 获取需要的docker镜像
    如果如果你使用的是自己已经构建成功的fabric网络或者remote网络,则可以跳过该步骤。
  • fabric
    * 从dockerhub'中下载
    cd $GOPATH/src/github.com/hyperledger/fabric-test/fabric/scripts
    如果针对V1.0.0进行测试,则使用脚本 ./bootstrap-1.0.0.sh
    * 构建images(示例为v1.0.0)
cd $GOPATH/src/github.com/hyperledger/fabric-test/fabric/
git checkout v1.0.0
make docker
  • fabric-ca
cd $GOPATH/src/github.com/hyperledger/fabric-test/fabric-ca
git checkout v1.0.0
make docker
  • fabric-sdk-node
cd $GOPATH/src/github.com/hyperledger/fabric-test/fabric-sdk-node
npm install
//这里可以忽略所有的warning
gulp ca
  1. 安装PTE
cd $GOPATH/src/github.com/hyperledger/fabric-test/tool
cp -r PTE $GOPATH/src/github.com/hyperledger/fabric-test/fabric-sdk-node/test
  1. 创建Service Credentials 文件
    SCFiles中有很多示例可以参考。将需要测试的Fabric网络中的节点地址和证书等信息进行替换即可。
  2. 按照需求构建运行脚本
    根据测试需求,创建自己的PTEMgr.txt文件(使用pte_mgr.sh来测试运行),runCase.txt文件和用户输入用的json文件。
    这里有几点需要注意:
  • 正确的使用需要测试的chaincode名称、channel名称和组织的名称。
  • 使用自己网络里的配置信息
  • 在测试之前,需要创建好所有的channnel,确保所有需要的peer都join到channel中。以及chaincode被正确的安装在各个peer内,同时在指定的channel中进行了instantiate。确保所有的peer都被正确的建立和运行。

运行PTE

这里确保在运行PTE之前,需要测试的fabric网络已经启动。

使用方法

有两个方法可以执行PTE:

  • pte_mgr.sh :可以执行多个PTE测试
  • pte_driver.sh:只能执行一个PTE测试
pte_mgr.sh

运行脚本:

./pte_mgr.sh 

示例:

./pte_mgr.sh sampleccInputs/PTEMgr.txt

该测试包含了一个用户测试用例列表。每一行都是一个用户的run case,其包含了两个参数:drive type和用例文件(run case files)。
例如,下面这个就包含了两个run case,driver type都是pte。现阶段只支持pte。

 driver=pte sampleccInputs/runCases-constant-i-TLS.txt
 driver=pte sampleccInputs/runCases-constant-q-TLS.txt
pte_driver.sh

运行脚本:

./pte_driver.sh 

示例:

./pte_driver.sh sampleccInputs/runCases.txt

该示例包含了一个测试用例的列表。每一行都是一个测试用例,包含两个参数:SDK type和用户输入文件(User input files),
例如,下面这个就包含了三个测试用例。同时SDK type可以是:node、go、python和java。不过现在只支持node。关于用户输入的相关信息,下文会进行介绍。

    sdk=node sampleccInputs/samplecc-chan1-i-TLS.json
    sdk=node sampleccInputs/samplecc-chan2-i-TLS.json
    sdk=node sampleccInputs/samplecc-chan3-i-TLS.json

交易执行

PTE用一个用户输入文件(执行参数)视为一个测试用例。User input files定义了执行一个测试所需的所有参数,包括

  • 交易类型
  • 线程数量
  • 交易数量
  • 交易时长(持续交易)

在同一个测试中,所有的线程都会并发执行指定的交易。不同的交易会使用不同的测试用例来执行,PTE支持将他们统一到同一个run case file中,使其成为一个更加复杂的脚本。例如,一个PTE执行时,用户可以向所有的peers发送指定数量的invoke交易,以及可以对每一个peer进行分离式的query。

交易控制:
交易本身可以根据数量或者持续时间来进行控制。其可以通过两个参数进行控制

  • nRequest
  • rundur

交易类型

Invoke(move)

执行invoke(move)的交易,设置transType为Invoke和invokeType为move。

  "invokeCheck": "TRUE",
  "transMode": "Constant",
  "transType": "Invoke",
  "invokeType": "Move",
  "targetPeers": "OrgAnchor",
  "nProcPerOrg": "4",
  "nRequest": "1000",
  "runDur": "600",
  "TLS": "Enabled",

同时,需要设置channel的名称和相关信息:

  "channelOpt": {
      "name": "testchannel1",
      "channelTX": "/root/gopath/src/github.com/hyperledger/fabric-test/fabric/common/tools/cryptogen/crypto-config/ordererOrganizations/testorgschannel1.tx",
      "action":  "create",
      "orgName": [
          "testOrg1"
      ]
  },
Invoke(query)

执行Invoke(query)交易,设置transType为Invoke,InvokeType为Query。

  "invokeCheck": "TRUE",
  "transMode": "Constant",
  "transType": "Invoke",
  "invokeType": "Query",
  "targetPeers": "OrgAnchor",
  "nProcPerOrg": "4",
  "nRequest": "1000",
  "runDur": "600",
  "TLS": "Enabled",

同时设置channel的信息,同move。

简单的用例

待续

你可能感兴趣的:(使用PTE对目标Fabric网络进行测试)