131 1300 0010
其他
当前位置: 首页>> 元件技术>>其他>>
  • 导航栏目
  • 二极管
  • 整流桥
  • MOS管
  • 其他
  • 如何实现单片机的自动化测试
    如何实现单片机的自动化测试
  • 如何实现单片机的自动化测试
  •   发布日期: 2019-04-01  浏览次数: 1,614

    测试,相信对每一个搞程序的都不会生疏,然后我们会联想到什么单元测试,集成测试,发布测试,黑盒测试,白盒测试等等一系列的名词。但在单片机领域,更多的功能测试。测试人员,在试用产品后,发现bug然后报告给研发人员,往往忽略中间的单元测试,在开发的过程中就保证各模块的功能。

    对于一些JAVA, C++开发人员,cppunit, junit这些自动化测试框架,然而,对于单片机开发人员,又怎么实现自动化测试呢?

     

    下面就UART驱动的测试说起。

    测试的目的

    首先确认 功能这条主线可以走通。比如UART发送字符这个功能主线是:SysCtl 配置MCU时钟源,配置UART时钟源, SysCtl使能UART外设, GPIO配置RX, TX管脚的复用,配置BAUD工作模式等,然后才是发送。 也就是说,想要成功发送一个字符,前面的每一个都不能缺失。

    如何实现单片机的自动化测试

    其次是功能的正确性。

    在其次是改善,改进,优化。

    什么是一个测试

    测试,给定一个条件,然后会得到一个结果,期望的结果与实际的结果比较,如果一致,就说测试通过,否则,失败。待测功能,就像是一个方程式,我们一个一个的代入,看每一次的结果是否正确。

    对于人来说,最终的结果,需要通过人的听觉或视觉感知的。从终端看到一个Pass说明测试通过,LCD正确显示了字符,也说明了通过。我把测试分了一下类:

    不能通过程序读到结果的,只能通过人看到或听到的,比如LCD, 这类无法实现自动化测试。

    一类可以通过程序读到结果的,一般是执行了一些程式,会得到一个状态/结果,程序正好可以读到。比如 Write后Read.

    可以把底一类转换成第二类的。比如UART的发送,可以通过超级终端看到结果判断,也可以借助UART2(功能正确的), 它们之间通信,来实现自动化。

    都说C语言 = 函数 + 数据,测试同样。好点的代码,是不会把数据与函数混在一起的。那么什么是测试数据呢?

    typedef struct

    {

    tTestCondition sCondiTIon;

    tTestResult sExpectResult;

    }tTestData;

    tTestData psTestDataTable[] = {

    { , },

    { , },

    };

    一个一个测试,将构成这样一个结构体数组。测试数据的增加,或修改仅仅需要修改这个数组就可以,而无需修改代码。测试,同样变的很好维护。

    什么是自动化测试

    自动化测试,其实就是自动调用每一个测试,一个一个调用,然后,以人可以感知的方式,报告结果。比如,在超级终端中打印PASS.

    每一个测试,都可能需要首先构造它们自己的初始环境。每一个测试之间,它们不能互相影响。也就是说,测试执行完后,它需要还原环境到复位状态。

    下面描述下,我经常用到的测试框架,这是我从一个开源项目中改变过来的:

    一个测试工程,有多组测试(Suite), 一个组(Suite)下可能有多个测试。组的概念,其实就是组件,把相似的放在一组,就像文件夹组织。

    //*****************************************************************************

    //

    //! brief Structure represenTIng a test case.

    //

    //*****************************************************************************

    typedef struct

    {

    //

    //! brief Test case name get funcTIon.

    //

    char* (*GetTest)(void);

    //

    //! brief Test case preparaTIon function.

    //

    void (*Setup)(void);

    //

    //! brief Test case clean up function.

    //

    void (*TearDown)(void);

    //

    //! brief Test case execution function.

    //

    void (*Execute)(void);

    }

    tTestCase;

    Setup是为了构造测试需要的环境。TearDown是在测试执行后,还原测试环境。Execute才是测试主体。Execute中可以进行一些TestAssert, 来执行一个一个的判断。

    GetTest仅仅是为了在终端打印一下这个测试的内容。

    下面是框架main:

    xtBoolean

    TestMain(void)

    {

    int i, j;

    TestIOInit();

    PrintLine(“”);

    PrintLine(“*** CooCox CoIDE components test suites”);

    PrintLine(“***”);

    #ifdef TEST_COMPONENTS_NAME

    Print(“*** Components: ”);

    PrintLine(TEST_COMPONENTS_NAME);

    #endif

    #ifdef TEST_COMPONENTS_VERSION

    Print(“*** Version: ”);

    PrintLine(TEST_COMPONENTS_VERSION);

    #endif

    #ifdef TEST_BOARD_NAME

    Print(“*** Test Board: ”);

    PrintLine(TEST_BOARD_NAME);

    #endif

    PrintLine(“”);

    g_bGlobalFail = xfalse;

    i = 0;

    while (g_psPatterns[i])

    {

    j = 0;

    while (g_psPatterns[i][j])

    {

    PrintNewLine();

    Print(“--- Test Case ”);

    PrintN(i + 1);

    Print(“。”);

    PrintN(j + 1);

    Print(“ (”);

    Print(g_psPatterns[i][j]-》GetTest());

    PrintLine(“)”);

    ExecuteTest(g_psPatterns[i][j]);

    if (g_bLocalFail == xtrue)

    {

    Print(“--- Result: FAILURE ”);

    PrintLine(“”);

    //

    //printf error information

    //

    Print(g_pcErrorInfoBuffer);

    PrintLine(“”);

    if (g_pcTokensBuffer 《 g_pcTok)

    {

    Print(“ The tokens in buffer is: ”);

    PrintTokens();

    PrintLine(“”);

    }

    }

    else

    {

    PrintLine(“--- Result: SUCCESS ”);

    }

    j++;

    }

    i++;

    }

    PrintNewLine();

    PrintLine(“”);

    Print(“Final result: ”);

    if (g_bGlobalFail == xtrue)

    PrintLine(“FAILURE”);

    else

    PrintLine(“SUCCESS”);

    return g_bGlobalFail;

    }

    如需完整的测试框架代码,请联系我,或前往我们的开源项目:https://github.com/coocox/cox.

    这是一个统一API标准的外设库。基于CoX的驱动,无需移植,就可以用到其他MCU平台。


  • ·上一篇:
    ·下一篇:
  • 其他关联资讯
    深圳市日月辰科技有限公司
    地址:深圳市宝安区松岗镇潭头第二工业城A区27栋3楼
    电话:0755-2955 6626
    传真:0755-2978 1585
    手机:131 1300 0010
    邮箱:hu@szryc.com

    深圳市日月辰科技有限公司 版权所有:Copyright©2010-2023 www.szryc.com 电话:13113000010 粤ICP备2021111333号