区块链安全应用-------压力测试

瑞星  金牌会员 | 2024-7-29 21:05:04 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 859|帖子 859|积分 2577

基于已有的链进行测试(build_chain默认建的链 四个节 点):

第一步:搭链

1. 安装依靠 在ubuntu操作系统中,操作步调如下:
  1. sudo apt install -y openssl curl
复制代码

2. 创建操作目录, 下载安装脚本
  1. ## 创建操作目录
  2. cd ~ && mkdir -p fisco && cd fisco
  3. ## 下载脚本
  4. curl -LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v2.7.1/build_chain.sh
  5. chmod +x build_chain.sh
  6. #搭链
  7. bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545 –e ./fisco-bcos
复制代码


3. 启动链
  1. bash nodes/127.0.0.1/start_all.sh
复制代码


第二步:设置网络设置文件

在networks/fisco-bcos/test/创建fisco-bcos2.json设置网络适配文件:
  1. {
  2.     "caliper": {
  3.         "blockchain": "fisco-bcos"
  4.     },
  5.     "fisco-bcos": {
  6.         "config": {
  7.             "privateKey": "bcec428d5205abe0f0cc8a734083908d9eb8563e31f943d760786edf42ad67dd",
  8.             "account": "0x0ff8981ebc130c7874ac7093a4d0c0e3d4f36b08"
  9.         },
  10.         "network": {
  11.             "nodes": [
  12.                 {
  13.                     "ip": "127.0.0.1",
  14.                     "rpcPort": "8545",
  15.                     "channelPort": "20200"
  16.                 },
  17.                 {
  18.                     "ip": "127.0.0.1",
  19.                     "rpcPort": "8546",
  20.                     "channelPort": "20201"
  21.                 },
  22.                 {
  23.                     "ip": "127.0.0.1",
  24.                     "rpcPort": "8547",
  25.                     "channelPort": "20202"
  26.                 },
  27.                 {
  28.                     "ip": "127.0.0.1",
  29.                     "rpcPort": "8548",
  30.                     "channelPort": "20203"
  31.                 }
  32.             ],
  33.             "authentication": {
  34.                 "key":"/home/myy/Desktop/fisco-bcos/nodes/127.0.0.1/sdk/sdk.key",
  35.                 "cert": "/home/myy/Desktop/fisco-bcos/nodes/127.0.0.1/sdk/sdk.crt",
  36.                 "ca": "/home/myy/Desktop/fisco-bcos/nodes/127.0.0.1/sdk/ca.crt"
  37.             },
  38.             "groupID": 1,
  39.             "timeout": 100000
  40.         },
  41.         "smartContracts": [
  42.             {
  43.                 "id": "helloworld",
  44.                 "path": "src/fisco-bcos/helloworld/HelloWorld.sol",
  45.                 "language": "solidity",
  46.                 "version": "v0"
  47.             }
  48.         ]
  49.     },
  50.     "info": {
  51.         "Version": "2.0.0",
  52.         "Size": "4 Nodes",
  53.         "Distribution": "Single Host"
  54.     }
  55. }
复制代码
![](https://img-
blog.csdnimg.cn/direct/5c56ddf688fd4e06a730677f6e888a67.png)![](https://img-
blog.csdnimg.cn/direct/b6c33e3a2ac545feb974284349a8b09d.png)
第三步,对本地四节点链进行测试

  1. npx caliper benchmark run --caliper-workspace caliper-benchmarks --caliper-benchconfig benchmarks/samples/fisco-bcos/helloworld/config.yaml --caliper-networkconfig networks/fisco-bcos/test/fisco-bcos2.json
复制代码


测试和进程资源状态都可以监测,但在本地监测中,无法监测每个节点的资源状态。
第四步:克制节点

  1. bash nodes/127.0.0.1/stop_all.sh
复制代码

如何改成预编译的智能合约进行测试?

测试文件参数先容 参数 含义


  • test.name 要在报告中显示的benchmark的短名称。
  • test.description 要在报告中显示的benchmark的详细说明。
  • test.workers 与工作线程相干的对象的设置。
  • test.workers.type (暂未投入使用)
  • test.workers.number 指定用于执行工作负载的工作进程数。
  • test.rounds 对象回合数组,一个数组下可以有多轮差别的测试任务。
  • test.rounds.label 该轮测试的名称,通常对应于该轮要提交的测试的范例。
  • test.rounds.txNumber应在该轮任务提交的任务数。
  • test.rounds.txDuration 该轮提交任务数的用时(单位,秒)。
  • test.rounds.rateControl 描述该轮的速率控制计谋。
  • test.rounds.workload 描述该轮的工作负载模块。
  • test.rounds.workload.module 该轮基准测试工作负载模块实现的路径。
  • test.rounds.workload.arguments 作为设置,传递给该轮工作负载模块的参数
通过Java SDK进行压力测试

设置工程链基本环境后,先容具体测试步调和要点。


  • 1. 编写合约:HelloWorld合约。
  • 2. 编译智能合约,将其转为Java文件,从上述WeBASE-Front中,也能编译并导出Java文件。
  • 3. 将编译天生的Java文件导入工程中,如HelloWorld.java。
  • 4. 基于上述文件,调用合约功能和接口,编写相干测试案例,例如:ContractTest。
  • 5. 基于Spring提供的gradle插件,我们可以通过”./gradlew test”命令来运行全部测试案例。
  • 6. 假如需要连续集成,可以在设置和初始化FISCO BCOS后,将步调5命令参加主动化脚本中。
第一步:安装JDK

  1. # 安装open JDK 11
  2. sudo apt install openjdk-11-jdk
  3. # 验证Java版本
  4. java --version
  5. # 输出以下内容:
  6. #openjdk 11.0.22 2024-01-16
  7. #OpenJDK Runtime Environment (build 11.0.22+7-post-Ubuntu-0ubuntu220.04.1)
  8. #OpenJDK 64-Bit Server VM (build 11.0.22+7-post-Ubuntu-0ubuntu220.04.1, mixed
  9. mode, sharing)
复制代码

第二步:编译源码

  1. # 下载源码
  2. git clone https://github.com/FISCO-BCOS/java-sdk-demo
  3. cd java-sdk-demo
  4. git checkout main-2.0
  5. # 编译源码
  6. ./gradlew build
复制代码




第三步. 设置Demo

使用Java SDK Demo之前,需要首先要Java SDK,包罗证书拷贝以及端口设置,详细请参考这里
  1. # 拷贝证书(假设SDK证书位于~/fisco/nodes/127.0.0.1/sdk目录,请根据实际情况更改路径)
  2. cd dist
  3. cp -r /root/fisco/nodes/127.0.0.1/sdk/* conf
  4. # 拷贝配置文件
  5. # 注:
  6. #   默认搭建的FISCO BCOS区块链系统Channel端口是20200,若修改了该端口,请同步修改config.toml中的[network.peers]配置选项
  7. $ cp conf/config-example.toml conf/config.toml
  8. #由于我的区块链环境具有四个节点,所以应该修改java-sdk-demo/dist/conf/config.toml下的network.peers配置
  9. peers=["127.0.0.1:20200", "127.0.0.1:20201","127.0.0.1:20202","127.0.0.1:20203"]
复制代码




第四步. 执行示例压力测试步调

Java SDK Demo提供了一系列压测步调,包罗串行转账合约压测、并行转账合约压测、AMOP压测等, 具体使用方法如下:
  1. # 进入dist目录
  2. $ cd dist
  3. mkdir -p contracts/solidity
  4. # 将需要转换为java代码的sol文件拷贝到dist/contracts/solidity路径下
  5. # 转换sol, 其中${packageName}是生成的java代码包路径
  6. # 生成的java代码位于 /dist/contracts/sdk/java目录下
  7. $ java -cp "apps/*:lib/*:conf/" org.fisco.bcos.sdk.demo.codegen.DemoSolcToJava
  8. ${packageName}
  9. # 压测串行转账合约:
  10. # count: 压测的交易总量
  11. # tps: 压测QPS
  12. # groupId: 压测的群组ID
  13. java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.PerformanceOk [count]
  14. [tps] [groupId]
  15. # 压测并行转账合约
  16. # --------------------------
  17. # 基于Solidity并行合约parallelok添加账户:
  18. # groupID: 压测的群组ID
  19. # count: 压测的交易总量
  20. # tps: 压测QPS
  21. # file: 保存生成账户的文件名
  22. $ java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.ParallelOkPerf
  23. [parallelok] [groupID] [add] [count] [tps] [file]
  24. # 基于Precompiled并行合约precompiled添加账户
  25. # (参数含义同上)
  26. java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.ParallelOkPerf
  27. [precompiled] [groupID] [add] [count] [tps] [file]
  28. # --------------------------
  29. # 基于Solidity并行合约parallelok发起转账交易压测
  30. # groupID: 压测的群组ID
  31. # count: 压测的交易总量
  32. # tps: 压测的QPS
  33. # file: 转账用户文件
  34. $ java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.ParallelOkPerf
  35. [parallelok] [groupID] [transfer] [count] [tps] [file]
  36. # 基于Precompiled并行合约Precompiled发起转账压测
  37. $ java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.ParallelOkPerf
  38. [precompiled] [groupID] [transfer] [count] [tps] [file]
  39. # CRUD合约压测
  40. # 压测CRUD insert
  41. # count: 压测的交易总量
  42. # tps: 压测QPS
  43. # groupId: 压测群组
  44. $ java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.PerformanceTable
  45. [insert] [count] [tps] [groupId]
  46. # 压测CRUD update
  47. # (参数解释同上)
  48. $ java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.PerformanceTable
  49. [update] [count] [tps] [groupId]
  50. # 压测CRUD remove
  51. # (参数解释同上)
  52. $ java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.PerformanceTable
  53. [remove] [count] [tps] [groupId]
  54. # 压测CRUD query
  55. # (参数解释同上)
  56. $ java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.PerformanceTable
  57. [query] [count] [tps] [groupId]
复制代码
以上对压测合约进行解释,如已经天生设置文件了,就可以直接运行下面的代码

然后下面是对合约进行运行
  1. cd ~/java-sdk-demo/dist
  2. java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.PerformanceOk [count]
  3. [tps] [groupId]
  4. java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.PerformanceOk 10000 1000 1
  5. #200000代表总测试量为10000   1000代表每秒向区块链系统发送1000次请求   1代表区块链系统的groupId
复制代码

出现以下错误是由于搭链没有启动要先启动链

  1. bash start_all.sh
复制代码

自定义压测代码

压测自定义合约的开辟均在Java SDK Demo中进行,我们需要开辟三个文件,分别是: 待压测的智能合约:HelloWorld.sol
待压测的智能合约所编译出的Java类:HelloWorld.java
压力测试步调:PerformanceHelloWorld.java
项目的存放路径


首先编译Helloworld.sol文件
创建 contracts/solidity文件
  1. cd ~/java-sdk-demo/dist
  2. mkdir -p contracts/solidity
复制代码

天生Helloworld.sol文件
  1. cd contracts/solidity
  2. vim HelloWorld.sol
  3. #生成以上Helloworld智能合约完成简单的获取和设置name功能
  4. pragma solidity >=0.4.24 <0.6.11;
  5. contract HelloWorld {
  6.     string public name;
  7.     constructor() public {
  8.         name = "Hello, World!";
  9.     }
  10.     function get() public view returns (string memory) {
  11.         return name;
  12.     }
  13.     function set(string memory n) public {
  14.         name = n;
  15.     }
  16. }
复制代码
学习计划安排


我一共划分了六个阶段,但并不是说你得学完全部才气上手工作,对于一些低级岗位,学到第三四个阶段就足矣~
这里我整合并且整理成了一份【282G】的网络安全从零基础入门到进阶资料包,需要的小同伴可以扫描下方CSDN官方合作二维码免费领取哦,无偿分享!!!
假如你对网络安全入门感兴趣,那么你需要的话可以
点击这里

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

瑞星

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表