前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >“软为硬用”—基于python的自动化测试

“软为硬用”—基于python的自动化测试

作者头像
ExASIC
发布2021-07-29 12:05:11
3320
发布2021-07-29 12:05:11
举报
文章被收录于专栏:ExASICExASIC

「猿于此道」

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来进行代码仿真,也可采用这种形式来生成自动化测试报告。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ExASIC 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档