VSF Documented
名词定义

什么是 被测设备 和 辅助设备 ?

被测设备

用户希望在某块开发板上测试外设驱动/组件模块等等,那么这块开发板就叫做**被测设备**。

辅助设备

为了测试这块开发板的某个功能,例如 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 的辅助设备的实现