「猿于此道」
FPGA
一入此门深似海,似猿非猿半硅农。FPGA探索,你我同行。
从事FPGA开发无论是仿真还是上板验证,总少不了各种各样的case遍历,手动执行起来就太麻烦了。尤其像从事FPGA加速行业来说,CPU与FPGA版卡的交互和测试基本基于PCIe来实现,而软件有大量的测试框架,不妨“软为硬用”。这里就基于python的自动化测试框架unittest来实现一个简单的自动化上板测试流程,同时自动生成html测试报告。
unittest
unittest是python自带的测试框架,其主要由TestCase、unitunittest、TestRunner三大部分,详细的介绍可参考该文档链接:
http://pyunit.sourceforge.net/pyunit_cn.html#TESTCONDS
https://www.cnblogs.com/liyuanhong/articles/5331907.html
通过unittest,可以很快的实现一个自动化测试的case集,如下简单的demo:
执行结果:
基于unittest,在日常工作中调试FPGA可以很容易把测试集给组织起来,而不必每次都手动执行。
html report
unittest的测试结果除了控制台输出外也可以存储至文件中,但相对来讲始终不如html报告更清晰些。这里采用HTMLTestRunner来实现,其为开源源代码,可通过下面的链接获取:
http://tungwaiyip.info/software/HTMLTestRunner.html
将HTMLTestRunner.py下载下来后即可以将代码保存在python的lib库中,也可以放在测试代码的工程目录下面。如果想放在python的lib库中,可通过在命令行下按照下面的方式找到python的lib目录:
代码语言:javascript复制IT-C02YV1UELVDL:chain xxx$ python
Python 2.7.10 (default, Aug 17 2018, 19:45:58)
[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)
放在其打印输出的任何一个目录下即可。
其使用方式如下demo所示:
代码语言:javascript复制#!/usr/bin/python
# -*- coding: UTF-8 -*-
import unittest
import sys
from HTMLTestRunner import HTMLTestRunner
def add(data1,data2):
return data1 data2
class addTestCase(unittest.TestCase):
def test_add(self):
""" 加法器校验 '"""
sum=add(1,2)
self.assertEqual(3,sum)
def test_add1(self):
""" 加法器校验2 '"""
sum=add(3,4)
self.assertEqual(8,sum)
if __name__ == "__main__":
reload(sys)
sys.setdefaultencoding("utf-8")
suite=unittest.makeSuite(addTestCase,"test")
testlogName="./reeport.html"
fp=open(testlogName,'wb')
runner=HTMLTestRunner(fp,title="add test",description="test demo")
runner.run(suite)
fp.close()
值得注意的是第20行、21行用于解决下面的错误类型:
代码语言:javascript复制UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 88: ordinal not in range(128)
最终会在执行目录下生成一个report.html的测试报告,可通过浏览器打开:
针对python3环境的使用,可通过下方阅读原文方式来查看修改方式。
写在最后
如果选用基于cocotb来进行代码仿真,也可采用这种形式来生成自动化测试报告。