加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

用 Shell 快速写一个嵌入式测试框架

2022/02/09
528
阅读需 7 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

哈喽,我是老吴。作为一个嵌入式底层码农,在项目初期,我经常需要测试各种 Linux 单板的稳定性和性能。例如:用 memtester 测试内存的稳定性。用 glmark-es2 测试 GPU 的性能。用 iperf 测试网卡设备的带宽。等一大堆、杂七杂八的测试项目。这些测试都不难,但是比较碎片化,一般都是基于简单的测试脚本。为了节省我的时间和精力,我写了一个简单的测试框架。它的服务对象是像我这样的嵌入式底层开发人员。我对它的要求是:能扩展以适应不同的单板;能自由地组合测试项;能对每个测试项进行单独地定制;能复用和积累各种测试脚本;下面是实现这个测试框架的关键点。

查找表

declare -gA fct_table=(['Test 1']="do_test1"
 ['Test 2']="do_test2"
 ['Test 3']="do_test3"
 ['Test 4']="do_empty_handler"
 ['Test 5']="do_empty_handler"
 ['Test6']="do_empty_handler"
 )

declare -gA res_table=(['Test 1']="N/A"
 ['Test 2']="N/A"
 ['Test 3']="N/A"
 ['Test 4']="N/A"
 ['Test 5']="N/A"
 ['Test 6']="N/A"
 )

这里通过 Shell 的关联数组定义了两个查找表。fct_table 是测试函数表。res_table 是测试结果表。

测试函数

function do_empty_handler()
{
   echo "Test Not Implemented: $1"
   return 2
 }

function do_test1
{
   echo "Test 1"
   ret=0
   return $ret
 }

function do_test2
{
   echo "Test 2"
   ret=0
   return $ret
}

function do_test3
{
   echo "Test 1"
   ret=0
   return $ret
 }

这里的每一个 test handler 函数就代表一个测试项目。只要将 memetester、iperf 等具体地测试命令填充进行就可以执行真实的测试了。

调度代码

function validate_system()
{
  for i in "${!fct_table[@]}"; do
    echo "Test : $i"

    ${fct_table[$i]}
    res=$?

    __update_result_table $res "$i" res_table
  done
 }

# Main entry point
validate_system
print_result

遍历 fct_table,取出每一个 test handler 并调用,然后用 __update_result_table() 将测试的结果填充到 res_table 中。到这里,这个测试框架就完成。

运行效果

wwd@think:~/Desktop$ ./board_test.sh 
Test : Test 1
Test 1
>>>>> SUCCESS
Test : Test 3
Test 1
>>>>> SUCCESS
Test : Test 2
Test 2
>>>>> SUCCESS
Test : Test 5
Test Not Implemented: 
>>>>> N/A
Test : Test 4
Test Not Implemented: 
>>>>> N/A
Test : Test6
Test Not Implemented: 
>>>>> N/A
TEST RESULTS:
============
Test: Test 1 Result: PASS
Test: Test 3 Result: PASS
Test: Test 2 Result: PASS
Test: Test 5 Result: N/A
Test: Test 4 Result: N/A
Test: Test 6 Result: N/A
Test: Test6 Result: N/A

总结

这个简单的测试框架非常轻巧且易于扩展,但功能强大。在我的实际工作中被大量地使用,并且进行了一些必要的扩展,实实在在地降低了我的工作负担。它完全可以作为第一次“冒烟测试”集成到更大的自动化系统中。

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
AT17F16-30CU 1 Microchip Technology Inc IC FLASH CONFIG 16M 8LAP
$22.5 查看
TCMT1107 1 Telefunken Semiconductor GmbH & Co Kg Transistor Output Optocoupler, 1-Element, 3750V Isolation,
$0.85 查看
AFBR-59R5LZ 1 Agilent Technologies Inc Transceiver,
$38.5 查看

相关推荐

电子产业图谱