这是一个nervos的测试框架,可以直接替换capsule项目的tests。
它会自动加载templates中的所有json文件,执行测试。
每个json文件对应一个ckb交易,也对应一个测试用例。
这个只需要编译一次,后续只需要添加相应的json文件就可以。
普通测试场景只需要配置相应的json文件,无需编写测试代码。
- templates文件夹下的json文件,每个文件对应一个测试
- 可以在templates文件夹下创建子文件夹,将不同的测试用例放在不同的文件夹下
- 配置说明:(new_config.json)
- "contracts":列出需要加载的脚本
- name:脚本的名字,将在cell.script.code_hash使用;lock_script或type_script
- mode:
- 当前默认都是default,它决定从哪个文件夹下加载script文件。
- deployed:将从deployed-scripts文件夹下加载文件
- file:脚本的名字,默认将从build/debug/中加载该脚本文件
- 系统自动添加了名字为always_success的脚本,永远返回成功,可以作为通用的lock
- "script_hash":列出需要动态计算的script_hash
- key为名字,如"index_hash",将在cell.script.args使用
- code_hash、hash_type、args:需要计算的3个参数,其中code_hash可以引用前面的contracts中的脚本
- "contracts":列出需要加载的脚本
"index_hash": {
"args": "0xf1d1b3ddcca92b1e49783769e9bf606112b3f8cf36b96cac05bf44edcf5377e600000000",
"code_hash": "{{index}}",
"hash_type": ""
}- "block_list":区块信息,合约如果没用到,不需要配置,可以配置多个block
- "number": 3684151, 将作为配置的key,后续cell将使用block_id引用它的值
- "timestamp": 1611050871052,
- "epoch": 2564,
- "compact_target":0,
- "parent_hash":"",
- "transactions_root":"",
- "proposals_hash":"",
- "uncles_hash":"",
- "dao":""
- "cell_deps": 需要依赖的cell列表,内容都是cell格式,参考后面说明
- "inputs":输入的cell列表
- "outputs":输入的cell列表
- cell格式:
- capacity:ckb的capacity
- lock_script:lock脚本,如果没有要求,"code_hash"设置为"{{always_success}}"就可以
- type_script:根据自己的业务场景,设置参数
- "code_hash": "{{index}}",引用项目中的index脚本,需要在前面的contracts里配置,也可以直接填写具体的hex字符串
- "args": "1234{{index_hash}}abcd{{index2_hash}}",可以填写具体的值(hex),也可以填写前面的script_hash或contracts;
- hash_type:默认为空(data),可以设置为data或type
- data: cell的data,16进制字符串,可以类似args,引用script_hash或contracts
- block_id:3684151,cell所属区块,如果script读取header,才需要配置。
- out_point:可以指定;如果为"",将使用随机的值。该值在output中不生效。
{
"capacity": 1000,
"lock_script": {
"args": "",
"code_hash": "{{always_success}}",
"hash_type": ""
},
"type_script": {
"args": "0xf1d1b3ddcca92b1e49783769e9bf606112b3f8cf36b96cac05bf44edcf5377e600000000",
"code_hash": "{{index}}",
"hash_type": ""
},
"data": "0x01000000",
"out_point": "0xf2d1b3ddcca92b1e49783769e9bf606112b3f8cf36b96cac05bf44edcf5377e600000000"
}- witnesses: string数组,默认存放签名信息,可以为空
- 要求是hex字符串
- 与script的args一样,也可以动态引用script_hash或contracts
- hope_result是预期的测试结果。
- error_type:
- 为"",表示成功
- 为“input”表示input.type_script错误
- 为output表示output.type_script错误
- 为lock表示input.lock_script错误
- cell_index表示错误的cell序号,默认为0
- error_number表示脚本返回的错误码
- 如果是错误用例,建议添加description,说明错误场景
- error_type:
- test_all默认只有一个线程,遍历文件夹,加载测试。
- 如果中间有用例失败,则中断退出。
- 默认只遍历json文件,在src/tests.rs:72限制:entry.path().extension().unwrap() != "json"
- 可以自己添加对应的test function,使其可以并行运行。
- 具体参考src/tests.rs:90,new_test!(1, "./templates/first_index.json");每一行对应一个测试用例
- 建议使用其他后缀,json后缀会自动加载,非json后缀可以手动添加