本人理解不深,随便说说求打赏积分,剩余积分不多了,穷!
怎么从一个测试的角度去看区块链呢,不过看这个文章之前最好还是先熟悉一下区块链的概念
已经把这个整理成文档了,可以去下载地址 https://download.csdn.net/download/cwj02/10716344
1,首先我们需要下载一个Ethereum-Wallet,这个是以太坊钱包客户端,可以用来连接公链也可以用来连接自己本地的私有链
(1)在D盘新建文件夹例如Geth,用来放置以太坊的环境
(2)https://ethfans.org/wikis/Ethereum-Wallet-Mirror 选择windows版本安装,可以安装到上一步新建的目录下,方便寻找
2,安装Geth
(1)https://ethfans.org/wikis/Ethereum-Geth-Mirror,同样安装在之前目录下(我的截图中有一个genesis.json文件,是下面要说的内容,往下看)
3,私有链搭建
(1)在我们创建的Geth目录下创建一个创世块文件就是上面截图里的genesis.json(固定格式勿随意修改,要修改要在理解的基础上,例如在alloc添加balance)
{
"alloc": {},
"config": {
"chainID": 72,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"nonce": "0x0000000000000000",
"difficulty": "0x4000",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",
"gasLimit": "0xffffffff"
}
(2)打开CMD,进入到Geth目录下,初始化创世块文件geth -datadir "%cd%\chain" init genesis.json(其中%cd%表示就是你当前的路径,\chain就是你放置节点的路径,上面的第一张截图里就有这个路径)
然后打开geth控制台 geth -datadir "%cd%\chain" console
(3)创建两个用户方便后面转账操作,geth1和geth2,弹出来要你输入的是账户的密码(记不得密码就再也没有这个账户的财产了forever!这就是区块链去中心化的一个思想,没有身份证去找回密码这种传统思想,这个密码只有你知道!)
想要退出geth只要屏幕中输入exit就可以了
(4)启动私有链节点:
再上一步退出的情况下执行 geth -targetgaslimit 4294967296 -rpc -rpcaddr "X.X.X.X" -rpcport "8102" -port "30301" -rpcapi "eth,web3,personal" -networkid 2016 -identity 2016 -nodiscover -maxpeers 5 -datadir "%cd%\chain" -unlock 0 -rpccorsdomain "*" -mine console
这里其实最后的console就已经帮你打开geth控制台了,如果你单独打开geth不启动节点就用上面的geth -datadir "%cd%\chain" console呗,其实就是要了解清楚geth的命令,X.X.X.X为自己电脑的IP,启动后过一会好像会自动挖矿,哇哦,不行你就自己执行命令miner.start()开始,也可以指定一下miner.start(1),会显示INFO [10-12|09:54:04] Updated mining threads threads=1
miner.stop()停止,虽然挖矿不停的刷屏幕,但是只管输入不管刷屏,输入好了之后enter,返回true就表示停了
targetgaslimit –每个块的gas上限,这里可以理解为容量
-rpc -rpcaddr "X.X.X.X" -rpcport "8102" 这段是启动rpc通信,开启这个是为了可以进行智能合约的部署和调试
-port "30301" 网络监听接口,用于节点之间通信
-rpcapi "eth,web3,personal" rpc的范围,开启eth,web3,personal,(web3在python中单独的包哦,命令也和web3j相似,反观java感觉不是太方便,而且Python语言简单容易上手更易于理解吧)
networkid –设置当前区块链的网络ID,是一个数字,可以随便写
nodiscover 禁止被网络中其它节点发现,需要手动添加该节点到网络
maxpeers 最大节点数量
datadir –设置当前区块链网络数据存放的位置(就是上面的设置路劲了啊)
unlock –解锁某用户,其实可以这么写 -unlock 0x33252a57c766325a5f3686b3f6a28d142d0eece2 --password "%cd%"\password.txt,在进行交易之前要解锁用户,如果启动链节点的时候就解锁,后面交易就不用解锁了,方便一点,password后面直接跟密码会提示你无法open,其实还是个路径,这个txt里写上你的密码就可以了
rpccorsdomain 限制rpc访问源的ip,代表不限制 mine 允许挖矿
console –启动命令行模式,可以在Geth中执行命令,如果不加这个肯定只是启动节点而已但是还未启动geth
到这里肯定有人疑问,如果电脑关机了,下一次再想进入这个节点可怎么办啊?你再启动啊,初始化创世块就不用了,如果只是想用geth命令不启动节点直接用 geth console也是可以启动geth的,启动时带unlock的话后面你可以试一下eth.sendTransaction应该是不用要解锁用户的,至于交易的单位ether什么的这里不再赘述了,毕竟人要有探索精神啊
(5)在启动私有链之后再去启动第一步安装的Ethereum-Wallet,也可以连接到指定的rpc地址
"Ethereum Wallet.exe" --rpc http://X.X.X.X:8888
此时看到private-net就表示OK,连上了私有链了,如果没有显示就是在同步以太坊区块数据了,那个非常慢而且数量大,毕竟电脑配置和网速也有关系,而且是外网
(6)进入主界面后可以看到之前创建的2个账户,main account就是挖矿的那个账户,你也可以用命令切换到第二个去挖miner.setEtherbase("0x"),send就是转账,contracts就是合约部署,这个界面很好理解,玩一玩基本操作就会了,合约就不在这里赘述了,想自己写去下个IDE去写也方便,后面有说测试合约的地方,Ethereum基本命令这里也不再赘述,毕竟人需要探索精神
还需要补充的就是你在这个界面做交易能被矿工确认也是需要挖矿(挖矿就是申请记账,就是费电)需要miner.start()才能被矿工记入区块
到这里基本上你理解了链的实体概念了,并且可以自己搭建一个私有链了,但是挖矿那么多也是费电而已,想要发到公链上让大家都承认你的链确实需要点真材实料才行啊,那到这里难道没有疑问么?我怎么连接到链呢,假如我这个链我搞了一个公网IP地址,怎么去请求数据呢如果不用客户端的话,这里请回忆我们上面启动私有链的时候加的RPC通信啊,开始动手吧
(7)说到PRC调用,有一个官方地址可以去查,这里举个例子吧 https://github.com/ethereum/wiki/wiki/JSON-RPC
你看看我们在windows下搭建私有链,RPC调用还是JSON,是不是想到了什么,jmeter有木有,多线程去跑
这是一个eth_getBalance的方法,查询用户余额,这个余额看着是不是很难受,那可以用web3的命令去看下这个到底多少钱呢,
在geth命令下去查看返回是90,这样再去看Ethereum-Wallet里面的,居然也是90哎,对上了!(这个钱包偶尔出现不同步的情况就关闭再重启)那如果你放在jmeter里面写的话又用不上这个命令啊,这个可怎么办呢,BeanShell PreProcessor登场,因为支持Java啊,但是你去百度十六进制转化成十进制大多是用于8位数以内的,这样直接套用会报错的,当当当当,用新方法啊,也是90哎!完美!
然后使用其他方法,挖矿啊,发送交易啊,校验余额看看是否到账之类的都是可以的
(8)智能合约:Remix IDE是开发以太坊智能合约的在线IDE工具,Remix地址:https://remix.ethereum.org/
也可以自己现在在本地下载启动这个工具,上传本地的合约,然后去编译,run,然后就可以测试合约相关的授权接口了,具体不再赘述了,那这里你有没有疑问呢,这个地址和上面的链有连接么,没有,这个是专门测试智能合约的
(9)最后来说一说应用层的测试
接口很常规用jemter或者结合soapUI都随意,然后自己看看接口的SQL注入之类的,注入的话最好在APP或者WEB就加个正则表达式去掉‘’或者=之类的,接口性能还是结合代码看,一般都是要优化数据库SQL学好DBA很重要啊,而且选择一个好的框架是多么重要,貌似现在都喜欢向阿里看齐,安全测试的话一般看看Android的AndroidMainfest.xml配置,加固,硬编码啊,遗留内网IP等等很多当然也可以直接用工具扫描,我个人认为WEB的UI自动化(python比较流行)没有太大的用处发现的问题也少,手工测试无法被替代的,APP的UI自动化的话感觉也是好看大过实用,现在用python+appium也是很流行的,想要运行多个手机的话需要打开多个appium的端口号,然后搞个配置文件去读取,这里不再多说
(10)太长了,就到这。。。。