美文网首页区块链技术研究
使用PTE对目标Fabric网络进行测试

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

作者: kamiSDY | 来源:发表于2018-03-14 15:42 被阅读0次

    使用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 input file>
    

    示例:

    ./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 <run cases file>
    

    示例:

    ./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网络进行测试

        本文链接:https://www.haomeiwen.com/subject/ozvfqftx.html