什么是 被测设备 和 辅助设备 ?
被测设备
用户希望在某块开发板上测试外设驱动/组件模块等等,那么这块开发板就叫做**被测设备**。
辅助设备
为了测试这块开发板的某个功能,例如 UART**,需要有另外一个硬件提供 **UART 用来接收或者发送数据。 我们把这个硬件叫做**辅助设备**。**辅助设备**可能是另外一块开发板或者 PC 。
VSF Test 架构
嵌入式环境通常缺少一个相对可靠的环境进行各种测试。本模块尝试去提供一个测试框架来处理测试需求。
使用其他现成测试框架遇到问题是,如果测试的时候出现异常(包括进入异常,卡死在各种循环里),但是测试框架没法正确处理它。 因此为了保证可靠的测试,我们还需要通过硬件来提供一些功能。
我们使用看门狗提供超时复位,可以确保在测试异常停止测试用例,复位之后可以继续进行下一个测试。 因为看门狗可能随时复位,所以我们还需要实现数据持久化功能,确保测试时的数据不会丢失。
有了上面的这些硬件机制之后,我们可以提供一个适合嵌入式的测试框架,它在被测设备里直接运行。又因为由辅助设备,所以对被测设备的要求非常低。
我们通常使用由辅助设备完成持久化功能,被测设备仅仅需要发送对应的数据。所以被测设备需要提供一个测试串口和看门狗。 如果没法提供串口,也可以考虑通过JTAG/SWD接口(目前还没有对接)。如果被测设备没有看门狗,那么要求辅助设备可以控制被测设备的电源。
实现
辅助设备应该包含了这些信息:
- 提供了和**被测设备**通信的接口
- 目前辅助设备仅有在 PC 上基于 Python 实现 UART
- TODO: 使用另外一块硬件开发板实现
- TODO: 使用其他外设(JTAG/SWD)
- 辅助设备通过解析被测设备发送的命令保存数据,已经定义的命令有:
- testcase_index
- 第二个参数是read或者write,如果是write的时候第三个参数是更新后的序号
- 被测设备通过查询序号避免复位之后重复测试
- testcase_status
- 第二个参数是read或者write,如果是write的时候第三个参数是更新后的状态
- 被测设备查询当前测试的状态,1 表示测试开始,0 表示测试还没。被测设备通过读取这个 key 来判断是否进行过复位。
- testcase_result :
- 被测设备写入被测设备侧的测试结果, 辅助设备不需要回应
- 第二个参数是 testcase 序号
- 第三个参数是 该 testcase 的结果(0: pass, 1: skip, 2-N : faild)
- 如果有第四个或者更多参数,都是错误信息
- testcase_request
- 被测设备请求进行测试,辅助设备根据请求信息判断是否可以完成测试,如果可以则辅助设备回复 "1\n",不可以则返回 "0\n"
- 第二个参数是测试的名字
- 如果有第3~N个参数,都是测试请求的参数
- 目前还没有针对各种测试设定好标准测试参数
- testcase_all_done
- 被测设备表示所有测试都完成了,辅助设备不需要回应,这时候可以输出测试报告
- external_watch_init
- 被测设备请求模拟看门狗初始化,第二个参数是看门狗超时时间(毫秒)
- external_watch_feed
vsf_test_assist.py 提供了一个简单的基于 PC 的辅助设备的实现