基本思想
先前我介绍过我们的一个简单的自动化测试框架 —— 《一个简单的测试框架》,最近我又设计实现了另一个,叫 TLATS,原因是我们有了新的测试需求。在原有基础上修修补补,倒不如吸收其经验与思想重新设计,以满足更多情况,更好用。
先简单介绍下我们的新的测试辅助板 ATS 底板。ATS 全称是 Auto Test System,专门用于测试我们的核心板(SOM - System on Module)。设计思路就是把核心板的所有功能引脚接到底板,尽量转换为 GPIO 进行对接测试,不能转换的也在 ATS 底板添加对应的读写等器件来连接测试,比如添加 FRAM 芯片来测试 IIC 引脚。还有一个设计目标就是能够做到完全自动化,测试人员只管给板卡上电,然后就坐等测试结果出来,比如使用了蜂鸣器和 LED 来提示测试是通过或不通过。
然后,从之前的测试框架继承来的最基础的思想就是各硬件接口与器件的测试程序相互独立,也和测试框架独立,通过一套退出值标准来进行交互。第二点,这是使用了 INI 配置文件来进行独立测试程序的配置,不再像之前那样把测试程序配置到框架源码的字典表里。第三点,使用了面向对象思想,设计了一个主体类 TLATS。第四点,对配置文件 INI 的节点名字进行了规范,以满足我们的测试流程。
概要设计
- 编程语言:Python
- 测试程序配置:INI 配置文件
- 独立测试程序:Shell、Python、C、C++……不限定语言,遵循退出值标准即可。核心是退出值 0 表示测试通过。
- 支持多个测试项并行进行。
系统功能程序模型
程序流程
INI 配置文件设计
Name 指示 task 或 test 的名字,在程序的日志中将会使用。对应的 value 为 task 或 test 的完整程序调用命令。以下节点为必选节点:
- [init_task] ; 初始化任务,这些任务有任何一个失败,跳到执行测试不通过任务。
- [front_test] ; 前置测试项,这些测试项将按顺序逐个执行。
- [parallel_test] ; 并行测试项,这些测试项将在所有前置测试完成后并行进行。
- [rear_test] ; 后置测试项,这些测试项将等所有并行测试项完成后再逐个进行。
- [pass_task] ; 测试通过任务,这些测任务在前面所有前置、并行、后置测试都通过的情况下逐个按顺序进行。
- [failed_task] ; 测试不通过任务,这些测任务在前面所有前置、并行、后置测试有一个或多个不通过的情况下逐个按顺序进行。
示例:
[init_task]
i1=echo i1
[front_test]
f1=echo f1
[parallel_test]
p8=echo p8
[rear_test]
r6=echo r6
[pass_task]
pass1=echo pass1
[failed_task]
failed1=echo failed1
关键代码
主类类图
获取配置
config = ConfigParser.ConfigParser(dict_type=OrderedDict)
config.read(config_path)
self.init_task = config.items('init_task')
self.front_test = config.items('front_test')
self.parallel_test = config.items('parallel_test')
self.rear_test = config.items('rear_test')
self.pass_task = config.items('pass_task')
self.failed_task = config.items('failed_task')
总结
这依然是一个很简单的设计与实现,代码量非常小。不过关键是有用,合用。目前在我们新的 ATS 测试板上已经用了起来,发挥了提高测试效率的功用。
相较于原先的测试框架,有两大优点。一是引入了 INI 配置文件,在多个不同 ATS、EVM 测试实例中更方便地使用、管理众多测试程序。二是在框架中使用了面向对象思想进行设计实现,是的框架的代码更好理解,也便于改进升级。
廖杰良 - 2019-01-27