当前位置:首页 > 单片机 > 单片机
[导读]测试,相信对每一个搞程序的都不会生疏,然后我们会联想到什么单元测试,集成测试,发布测试,黑盒测试,白盒测试等等一系列的名词。但在单片机领域,更多的功能测试。测试人员,在试用产品后,发现bug然后报告给研发

测试,相信对每一个搞程序的都不会生疏,然后我们会联想到什么单元测试,集成测试,发布测试,黑盒测试,白盒测试等等一系列的名词。但在单片机领域,更多的功能测试。测试人员,在试用产品后,发现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平台。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

新项目为e络盟社区成员敞开了自动化测试大门

关键字: 自动化测试 图形化编程

罗德与施瓦茨公司(以下简称"R&S公司")开发了全新的R&SZNrun自动化测试。对于完全自动化验证PCIex8线缆,软件可以控制一个由R&SZNB矢量网络分析仪和可扩展的R&SOSP开关矩阵组成的测试配置,创建一个具有...

关键字: 自动化测试 PCIe系统

中国上海,2023年7月10日 – 安富利旗下全球电子元器件产品与解决方案分销商e络盟将携手全球自动化测试和测量系统领先制造商NI亮相2023慕尼黑上海电子展。届时,二者将共同展示NI一系列精选测试与测量产品,以满足工程...

关键字: 自动化测试 测量系统

行业调研数据显示,芯片行业的产值和营收一直在不断提高,同时其地位受到大众的关注。光刻机在芯片领域当然独占鳌头,但一颗芯片的成功不只取决于光刻部分,测试对芯片的质量更有不容忽视的意义。

关键字: 光刻机 自动化测试 芯片制造

在最近举行的i14y Lab O-RAN服务和平台互操作性测试会议(这是O-RAN 联盟2022年秋季全球互操作性测试会议的一部分)上,罗德与施瓦茨(以下简称"R&S"公司)和VIAVI So...

关键字: 罗德与施瓦茨 ORAN射频单元 自动化测试

84% 的受访者表示大多数测试涉及复杂的系统,但鲜有受访者采用自动化测试或人工智能

关键字: 是德科技 自动化测试 人工智能

写在前面单片机中有看门狗,长时间不喂狗,程序就会复位。为什么长时间不喂狗呢?是因为程序跑飞了,抛开外部因素不谈,今天和大家分享一下单片机程序跑飞的几个原因。在编写单片机程序的时候,由于中断服务程序写的不好,导致单片机程序...

关键字: 单片机程序

全新解决方案旨在加快温度监控、可靠性测试和产品生命周期评估流程,以帮助客户节省时间和成本

关键字: 传感器 自动化测试

▼点击下方名片,关注公众号▼在编写单片机程序的时候,由于中断服务程序写的不好,导致单片机程序总是跑飞,最后费了好长时间,花了很大功夫才找到问题原因,由此总结了单片机程序跑飞的三种现象、原因及解决方法。01、数组越界/溢出...

关键字: 单片机程序

写在前面单片机中有看门狗,长时间不喂狗,程序就会复位。为什么长时间不喂狗呢?是因为程序跑飞了,抛开外部因素不谈,今天和大家分享一下单片机程序跑飞的几个原因。在编写单片机程序的时候,由于中断服务程序写的不好,导致单片机程序...

关键字: 单片机程序
关闭
关闭