嵌入式系统硬件测试自动化

我们继续有关嵌入式系统测试自动化的系列文章。 本文将告诉您如何快速而轻松地集成从测试脚本控制被测设备电源的功能,以及如何从测试脚本模拟按下命令上的机械按钮的功能。

所以我们有:

  1. 您需要在其中数十个嵌入式设备中测试新版本的FirmWare(更精确地说,是每日固件组装)
  2. 由于固件启动过程的性质,您可能需要重置电源(“开机捕获”模式下的所谓的固件下载模式)
  3. 我想在执行测试脚本的过程中的某些特定时间点,模拟按下嵌入式系统调试板上的机械按钮

为什么可能需要第3点? 在我的情况下,任务如下:在代码执行严重异常的情况下,系统“进入”半死状态,直到电源关闭,系统才会退出该状态(这是电源管理的另一个原因)。 但是最有趣的是,如果您在这种模式下按下专门为此目的设计的机械按钮, 异常日志-调试信息,可以在该信息上尝试了解代码上发生异常的位置。

正是出于这个原因,为了有效地自动化测试设置,必须能够重置设备的电源并模拟按下调试板上的机械按钮,从而“保存”关于Exception的非常重要的信息,以免很快丢失它。 迟早会意识到没有设备响应的测试脚本将尝试通过重置电源来使其恢复生气。

一个小的抒情题外话-有时您会在此Exception之后运行数周,因为 它仅在所有恒星会聚且不满足其他一系列条件时偶尔出现。 因此,每个这样的调试日志都是非常重要和必要的。

对电路板调试的分析表明,该按钮只是关闭了GPIO线上的GPIO线,该线上拉至+3.3V。 因此,如果您“焊接”到按钮并使用继电器将GPIO线接地,那么这将是您所需要的。

接下来,出现了一个选择要提出以下要求的控制设备/模块的问题:

  • 继电器的最大数量(每个设备需要2个,并且有数十个设备)
  • 以太网访问
  • 管理URL命令
  • 复制和扩展系统的能力

按照传统,它们停在Laurent-128中继的Etherent模块上:



通过所有参数,该模块使我们感到高兴:我们可以使用URL命令(对于编写自动测试的脚本语言非常方便)一次管理14台设备(一个继电器供电,另一个只需按一下按钮)。

下图显示了被测设备调试板与控制模块的连接和通讯图:



在其中一个被测试设备的示例上,“焊接”到机械按钮的触点看起来像这样:



万岁! 技术部分已完成。 剩下的唯一事情就是添加测试过程的代码,以便在必要时(在复位电源后下载固件映像或通过按一下按钮记录调试信息)发出命令来打开/关闭所需的继电器。

控制命令URL的语法简单明了。 例如,要启用数字4下的中继,您需要使用以下HTTP地址:

http://192.168.0.101/cmd.cgi?psw=Laurent&cmd=REL,4,1 

这是Perl中的一个简单函数,如果您需要“拉”继电器,可以从主要测试过程中调用它:

 #---------------------------------------------------------------# # FUNCTION:: click rele # PARAM1: Laurent IP adress # PARAM2: RELE ID # PARAM3: 0 / 1 - what to do with rele #---------------------------------------------------------------# sub func_click_pwr_rele { my ( $_IN_IP, $_IN_RELE, $_IN_VALUE ) = @_; my $url; $url = "http://".$_IN_IP."/cmd.cgi?cmd=REL,".$_IN_RELE.",".$_IN_VALUE; my $content = get $url; if( defined $content ) { } else { func_put_reslog( "ERROR! Can't manage RELE at adress $url", "BAD" ); } } 

我注意到,该系统运行非常可靠,没有崩溃和冻结。 考虑到日常工作,Laurent-128和以前使用的Laurent-112(用于12个继电器)工作了两年没有失败和停止。

这是这种异常的示例,该异常是在日常的日常固件组装测试过程中发现的。 在测试脚本清楚表明串行端口上的设备没有答案(即“死”)之后,尝试按紧急机械按钮来记录调试,并且此方法起作用了-测试脚本本身生成的最终测试报告中充满了来自系统可能崩溃的位置,以供开发团队进一步分析:

Source: https://habr.com/ru/post/zh-CN477514/


All Articles