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  根据需要重写以上接口,灵活定义用例行为