github.com/turingchain2020/turingchain@v1.1.21/cmd/autotest/README.md (about) 1 2 # autotest 3 自动化系统回归测试工具,外部支持输入测试用例配置文件, 4 输出测试用例执行结果并记录详细执行日志。 5 内部代码支持用例扩展开发,继承并实现通用接口,即可自定义实现用例类型。 6 7 ### 编译 8 通过turingchain makefile 9 ``` 10 $ make autotest 11 ``` 12 13 ### 运行 14 15 #### **直接执行** 16 已启动turingchain服务并需要自定义配置用例文件 17 ``` 18 $ ./autotest -f autotest.toml -l autotest.log 19 ``` 20 21 -f,-l分别指定配置文件和日志文件, 22 不指定默认为autotest.toml,autotest.log 23 24 25 #### **通过turingchain makefile** 26 turingchain开发人员修改框架或dapp代码,验证测试 27 ``` 28 29 //启动单节点solo版本turingchain,运行默认配置autotest,dapp用于指定需要跑的配置用例 30 $ make autotest dapp=coins 31 $ make autotest dapp="coins token" 32 33 //dapp=all,执行所有预配置用例 34 $ make autotest dapp=all 35 ``` 36 目前autotest支持的dapp有,coins token trade privacy,后续有待扩展 37 38 39 ### 配置文件 40 41 配置文件为toml格式,用于指定具体的测试用例文件 42 ``` 43 # 指定内部调用turingchain-cli程序文件 44 cliCmd = "./turingchain-cli" 45 46 # 进行用例check时,主要根据交易hash查询回执,多次查询失败总超时,单位秒 47 checkTimeout = 60 48 49 # 测试用例配置文件,根据dapp分类 50 [[TestCaseFile]] 51 contract = "trc" # coins合约 52 filename = "trc.toml" # 用例文件路径 53 54 [[TestCaseFile]] 55 contract = "token" # token合约 56 filename = "token.toml" 57 ``` 58 59 60 ### 用例文件 61 用例文件用于配置具体的测试用例,采用toml格式,dapp的autotest目录下预配置了跑ci的用例文件,如coins.toml: 62 ``` 63 [[TransferCase]] 64 id = "trcTrans1" 65 command = "send coins transfer -a 10 -t 1D9xKRnLvV2zMtSxSx33ow1GF4pcbLcNRt -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv" 66 from = "12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv" 67 to = "1D9xKRnLvV2zMtSxSx33ow1GF4pcbLcNRt" 68 amount = "10" 69 checkItem = ["balance"] 70 repeat = 1 71 72 ``` 73 74 75 ### 用例类型 76 #### 基本类型 77 **BaseCase**,所有用例的基类类型 78 ```go 79 type BaseCase struct { 80 ID string `toml:"id"` //用例id 81 Command string `toml:"command"` //执行的cli命令 82 Dep []string `toml:"dep,omitempty"` //依赖的用例id数组 83 CheckItem []string `toml:"checkItem,omitempty"` //回执中需要check项 84 Repeat int `toml:"repeat,omitempty"` //重复执行次数 85 Fail bool 'toml:"fail,omitempty"' //错误标志,置true时表示用例本身为错误用例,默认不配置为false 86 } 87 ``` 88 89 **CheckItem**,默认会检查交易回执执行结果,并根据用例不同支持以下字段 90 * **balance**,交易双方余额校验 91 * **frozon**, 涉及冻结余额操作校验 92 * **utxo**, 隐私相关交易,校验utxo余额 93 94 95 #### Coins合约 96 * **TransferCase**,转账 97 * **WithdrawCase**,从合约取出 98 99 #### Token合约 100 * **TokePreCreateCase**,token预创建 101 * **TokenFinishCreateCase**,token完成创建 102 103 #### Trade合约 104 * **SellCase**,token出售 105 * **DependBuyCase**,token买入,需要在dep字段指定依赖的**SellCase**的id 106 107 #### Privacy合约 108 * **PubToPrivCase**,公对私转账 109 * **PrivToPubCase**,私对公转账 110 * **PrivToPrivCase**,私对私转账 111 112 #### ... 113 114 ### 日志分析 115 116 117 ### 扩展开发 118 分为以下几个步骤 119 > 注册dapp的AutoTest类型,以turingchain/system/dapp/coins为例 120 增加autotest目录,并新建coins.go文件 121 ```go 122 package autotest 123 124 //导入autotest开发依赖,主要是types包 125 import ( 126 "reflect" 127 . "github.com/turingchain2020/turingchain/cmd/autotest/types" 128 ) 129 130 //声明coins的AutoTest结构,其成员皆为coins将实现的用例类型 131 type coinsAutoTest struct { 132 SimpleCaseArr []SimpleCase `toml:"SimpleCase,omitempty"` 133 TransferCaseArr []TransferCase `toml:"TransferCase,omitempty"` 134 WithdrawCaseArr []WithdrawCase `toml:"WithdrawCase,omitempty"` 135 } 136 137 //注册AutoTest类型 138 //coinsAutoest结构需要实现AutoTest接口, 139 //才能进行注册,该接口共有两个函数 140 func init() { 141 142 RegisterAutoTest(coinsAutoTest{}) 143 144 } 145 146 //返回dapp名字 147 func (config coinsAutoTest) GetName() string { 148 149 return "coins" 150 } 151 152 //返回AutoTest的类型 153 func (config coinsAutoTest) GetTestConfigType() reflect.Type { 154 155 return reflect.TypeOf(config) 156 } 157 ``` 158 159 160 > 实现用例的测试行为 161 ```go 162 SendCommand(id string) //实现用例执行命令的行为 163 164 //实现用例check回执行为,正常的交易类型继承即可,无须重写。特殊需要可以重写 165 CheckResult(CheckHandlerMap) (bool, bool) 166 167 //需要实现用例checkItem每一项的check行为,并用该接口返回FunctionMap 168 getCheckHandlerMap() interface{} 返回CheckHandlerMap类型 169 170 ``` 171 根据需要重写以上接口,灵活定义用例行为