原创 PlatON
回顾上期我们讲解了PlatON的自动化测试相关介绍,这次我们来讲解智能合约在PlatON里都做了哪些测试工作,首先我们要了解什么是智能合约,本质上来说,智能合约是一段程序,它以计算机指令的方式实现了传统合约的自动化处理。简单地讲,智能合约就是双方在区块链资产上交易时,触发执行的一段代码,这段代码就是智能合约。那么从以下几个问题来说明下PlatON的智能合约测试。本篇为第二部分。
| 智能合约自动化框架
设计思路
在我们选择进行智能合约测试自动化时,我们考虑到后续测试开发人员方便用例组装以及后续集成更多模块,我们选择了一个使用较为广泛的JUnit测试框架为基础进行扩展,框架也可以得到绝大多数的java IDE和工具集成,同时也有很多第三方的扩展和增强包支持,便于开发者后期进行扩展。
PlatON智能合约测试框架设计之初要满足以下几个方面:
支持源码编译-因为测试时需要对合约进行编译部署之后才可以调用,为了简化批量的测试合约编译繁琐的过程,方便测试者管理和更新测试合约代码,我们需要把合约编译的过程集成到我们的框架内部实现。
支持数据复用– PlatON智能合约测试的对象是链本身的适配能力,在这个验证过程中会对不同的solidity版本特性和编译器版本进行适配,其中每个版本中的相同case会被重复执行,以确保PlatON在不同版本之间功能不会产生差异。
框架模块介绍
Maven
- 支持框架通过maven调用合约编译器solc对测试合约源码进行编译生成对应的.abi和bin文件
client-sdk-java
- PlatON SDK,提供了自由组装和发送交易能力,当我们需要构造特殊的交易时,会直接深入到SDK层再进行构造。
platon-web3j
- platon-sdk的命令行工具,可以提供钱包管理、产生Solidity合约对应java骨架、产生WASM合约对应java骨架功能
case
- 基于JUnit测试框架规范编写的自动化测试用例,通过数据驱动的方式来管理测试用例,再通过对应的模块生成测试执行用例集
Resource
- 存放测试数据和测试合约以及编译器版本,test case是通过数据驱动的方式进行管理,然后通过进行组装用例集执行。
智能合约测试集成到Jenkins实现CI/CD的实现
在测试过程中更早地进入测试,更早地发现问题,在版本迭代时能快速完成功能的回归,把更多的精力投入到当前版本的测试开发中,PlatON引进了CI/CD,把智能合约框架和自动化部署打通,实现了版本提测之后自动完成版本回归的任务。
(未完待续)
本文转载自https://mp.weixin.qq.com/s/9w_YZSmQIViSiw33FY5fMA