** 此文件为配置tinatest.json的编写说明 ** 目录: 1. 简介 2. 配置树 3. 系统默认配置值 4. 定制 - 简介 5. 定制 - 节点配置 6. 定制 - 全局限制 7. 定制 - 全局信息 8. 定制 - 局部限制 9. 定制 - 局部信息 10. 配置示例 11. 可视化配置(menucofig) ============================分割线=========================== 1. 简介 ---------------------------------------------- 配置文件定义所有有效的测试用例(testcase),控制了所有测试用例以及tinatest的所有行为 因此要定制自己的规则,只需要修改配置文件"tinatest.json" ------------- 配置文件路径: (小机端) /etc/tinatest.json (电脑端) tinatest/src/config/tinatest.json ------------- 需要注意的是,tinatest支持`make menuconfig`的界面配置,最终执行`convert_json.sh`脚本, 根据menuconfig的配置项重新生成'tinatest.json'文件 (仅当`make menucofig`使能了`Customize TinaTest options`才会执行`convert_json.sh`脚本) (否则只会拷贝电脑端的tinatest.json到小机端) ------------- 只要节点存在配置项command,即会判定此节点为用例节点 ------------- 用例执行顺序是根据配置文件从上往下依次执行 run_alone: 则等待前面的测试用例结束后再执行此用例,且当此用例结束后才执行下一个用例 run_times: 单个测试用例的执行次数,默认执行完一次再执行下一次 run_parallel: 并行执行单个用例的所有次数,即不等待上一次完成,直接启动run_times个测试进程 2. 配置树 ---------------------------------------------- 配置树为tinatest.json的结构图,例如: "/stress/reboot" 对应配置文件的路径为: | "/" : { | "stress" : { | "reboot" : { | "enable" : true, | "command" : "echo \"===== Going to reboot =====\"; reboot -f", | "run_times" : 1000, | "may_reboot" : true | } | } | } 3. 系统默认配置值 ---------------------------------------------- 系统默认配置值是固化在代码中的测试用例环境值,用于保证当tinatest.json中缺少关 键项配置时能用默认值正常执行. 因此,配置值优先级为: 默认值 < tinatest.json内/sys配置节点 < 测试用例节点个性配置 系统默认配置值如下: (非下表说明的其他配置项默认值为0/false) (当/sys下无run_times的配置且用例无run_times的个性配置时,默认值才生效) --------------------- | 关键字 | 默认值 | 其他说明 | run_cnt_up_to | 10 | 最多同时执行任务数 | outdir | "/mnt/UDISK/collectd" | collectd输出目录 | collectd_interval_sec | 2 | collectd收集环境时间间隔 | run_times | 1 | 默认执行次数 | date | 1 | 记录用例执行日期 | resource | 1 | 记录用例执行占用资源 | run_time_sec | 10000 | 限制用例执行时间 4. 定制 - 简介 --------------------------------------------- 1) 系统配置(/sys)分为4类: 节点-配置 : 测试用例节点配置项 全局-限制 : /sys/global/limit - 控制tinatest的行为 全局-信息 : /sys/global/info - 配置collectd采集的系统环境信息 局部-限制 : /sys/local/limit - 测试用例可个性定制的用例限制 局部-信息 : /sys/local/info - 测试用例可个性定制的用例信息采集 --------------------- Note: 全局 指 只能在/sys/global中修改,测试用例配置节点中配置无效,作用范围为所有测试用例 局部 指 既能在/sys/global中修改,也能在测试用例配置节点中配置,且测试用例节点中的配置 会覆盖/sys/global中的配置,作用范围为配置项所在的测试用例 --------------------- 2) 对一个测试用例而言,用例个性配置的优先级: 默认值 < tinatest.json内/sys配置节点 < 测试用例节点个性配置 例如: | "/" : { (在syskey.h中run_times的默认宏值为10) | "sys" : { | "local" : { | "info" : { | "run_times" : 5, (/sys下配置run_times为5) | ... | } | } | "demo" : { | "demo-c" : { | "command" : "demo-c" | "run_times" : 100 (测试用例个性配置run_times为100) | } | "demo-sh" : { | "command" : "demo-sh" (测试用例无run_times的个性配置) | } | } | } 最终,根据优先级, /demo/demo-c 节点被执行100次(个性配置) /demo/demo-sh 节点被执行5次(tinatest.json内/sys配置节点) 3) 怎样才是一个有效的测试节点? 当节点存在配置 "command" 时为一个有效节点,且本节点无设置enable为false时才能执行 例如: 配置文件如下: | "/" : { | "demo" : { | "enable" : false, | "demo-c" : { | "command" : "demo-c" | } | "demo-sh" : { | "command" : "demo-sh" | } | } | } 命令: tinatest /demo 效果: 从/demo节点开始遍历,由于/demo节点设置了enable为false,因此无有效测试节点 命令: tinatest /demo/demo-c 效果: 从/demo/demo-c节点开始遍历(非/demo开始),因此会执行测试用例demo-c 5. 定制 - 节点配置 ---------------------------------------------- | 分类 | 配置关键字 | 类型 | 说明 | ======== | ======================= | ====== | =============================================== | 节点配置 | command | string | 执行用例的shell命令(用例节点标识) | 节点配置 | enable | bool | 此树节点及树叉下所有节点使能标识(默认为true) | 节点配置 | stdin | array | 字符串数组的每个元素为对测试用例的一次输入 | 节点配置 | fstdin | string | 重定向文件为用例的标准输入(优先级:fstdin < stdin) 6. 定制 - 全局限制 ---------------------------------------------- | 分类 | 配置关键字 | 类型 | 说明 | ======== | ======================= | ====== | =============================================== | 全局限制 | run_cnt_up_to | int | 最大同时执行任务数(<=0无效) 7. 定制 - 全局信息 ---------------------------------------------- | 分类 | 子分类 | 配置关键字 | 类型 | 说明 | ======== | ======== | ======================= | ====== | ====================================== | 全局信息 | 通用 | collectd_interval_sec | int | 系统环境信息采集周期(<=0无效) | 全局信息 | 通用 | enable | bool | collectd单项环境采集使能 | 全局信息 | 通用 | match | NULL | 并非配置项,选中后出现具体匹配项 | 全局信息 | csv | outdir | string | 采集结果以csv数据格式输出的目录 | 全局信息 | rrdtool | outdir | string | 采集结果以rrd数据格式输出的目录 | 全局信息 | cpu | report_to_percentage | bool | 以百分比形式记录采集数据 | 全局信息 | memory | report_to_absolute | bool | 以绝对值形式记录采集数据 | 全局信息 | memory | report_to_percentage | bool | 以百分比形式记录采集数据 | 全局信息 | df | report_to_absolute | bool | 以绝对值形式记录采集数据 | 全局信息 | df | report_to_percentage | bool | 以百分比形式记录采集数据 | 全局信息 | df | sellect_or_ignore | string | 忽略匹配项(ignore)or选择匹配项(select) | 全局信息 | df | device | string | df - 匹配的设备名, "ALL"表示所有 | 全局信息 | df | mountpoint | string | df - 匹配的挂载点, "ALL"表示所有 | 全局信息 | df | fstype | string | df - 匹配的文件系统, "ALL"表示所有 | 全局信息 | disk | sellect_or_ignore | string | 忽略匹配项(ignore)or选择匹配项(select) | 全局信息 | disk | disk_regular_expression | string | disk - 支持正则表达的设备名 | 全局信息 | filecount | directory | string | 统计的文件夹 | 全局信息 | filecount | include_hidden | bool | 是否包含隐藏文件 | 全局信息 | filecount | include_subdir | bool | 是否遍历子目录 | 全局信息 | filecount | name | string | 匹配文件名(支持通配) (参考find命令) | 全局信息 | filecount | size | string | 匹配文件大小 (参考find命令) | 全局信息 | filecount | mtime | string | 匹配文件修改时间 (参考find命令) | 全局信息 | ping | host | string | ping - ping的ip | 全局信息 | ping | send_interval_sec | string | ping - pint一次的时间间隔(<=0无效) (务必小于collectd_interval_sec) | 全局信息 | ping | timeout | string | ping - ping一次的超时时间 | 全局信息 | ping | max_ttl | string | ping - ping一次的ttl上限(0-255) 8. 定制 - 局部限制 ---------------------------------------------- | 分类 | 配置关键字 | 类型 | 说明 | ======== | ======================= | ====== | ====================================== | 本地限制 | run_times | int | 用例执行次数限制(<=0无效) | 本地限制 | run_alone | bool | 用例单独执行(等待之前的任务完成) | 本地限制 | run_parallel | bool | 并行执行(同时执行run_times个用例) | 本地限制 | may_reboot | bool | 有可能重启(非易失地保存用例数据) | 本地限制 | run_time_sec | int | 用例执行时长限制(秒) | 本地限制 | run_time_min | int | 用例执行时长限制(分) | 本地限制 | run_time_hour | int | 用例执行时长限制(时) (最终限制时间为 [时*60*60 + 分*60 + 秒]) 9. 定制 - 局部信息 | 分类 | 配置关键字 | 类型 | 说明 | ======== | ======================= | ====== | ====================================== | 本地信息 | date | bool | 记录用例开始日期和结束日期 | 本地信息 | resource | bool | 记录用例使用资源情况 10. 配置示例 ---------------------------------------------- (1)================= "reboot" : { "command" : "echo \"Going to reboot\"; reboot -f", ==> 测试命令 "may_reboot" : true, ==> 此用例会重启(且单独执行) "run_times" : 1000 ==> 此用例需要执行1000次 } (2)================= "sys" : { "global" : { "info" : { "collectd_interval_sec" : 2, ==> collectd的采集间隔为2秒 "collectd_csv" : { "enable" : true, ==> 使能csv输出格式 "outdir" : "/mnt/UDISK/collectd" ==> 输出目录路径 }, "collectd_rrdtool" : { "enable" : false, ==> 关闭rrdtool输出格式 }, "collectd_cpu" : { "enable" : true, ==> 使能collectd的cpu模块 "report_to_percentage" : true ==> 以百分比的形式记录数据 }, } } "local" : { "info" : { "date" : true, ==> 使能记录用例的开始日期和结束日期 "resource" : true ==> 使能记录用例的使用资源 }, "limit" : { "run_times" : 1, ==> 默认执行次数为1 "run_time_sec" : 10000, ==> 默认执行时长限制为10000秒 "run_time_min" : 0, "run_time_hour" : 0 } } }, "demo" : { "demo-c" : { "enable" : false, ==> 取消使能此用例 "date" : false, ==> 此用例取消日期记录 "resource" : false, ==> 此用例取消资源记录 "command" : "demo-c", ==> 测试用例的调用shell命令 "run_times" : 100 ==> 此用例执行100次(串行) }, "demo-sh" : { "command" : "demo-sh.sh" "run_parallel" : true, ==> 并行调用测试用例 "run_times" : 10 ==> 此用例执行10次(并行) } } 此时执行命令: `tt /demo`,则只会并行调用demo-sh测试用例(demo-c没使能), 且由于demo-sh没定制date和resource,而/sys/local/info中默认使能date和resource,因此 demo-sh会记录开始/结束日期和用例使用资源. 11. 可视化配置(menucofig) ---------------------------------------------- 在tina根目录执行`make menuconfig`进入界面配置,路径为: DragonTools --> tinatest 当且仅当使能了`Customize TinaTest Options`才会执行`convert_json.sh`脚本根据menuconfig 的配置重新自动生成'tinatest.json'