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

哈喽,我是老吴。

作为一个嵌入式底层码农,

在项目初期,我经常需要测试各种 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

总结

这个简单的测试框架非常轻巧且易于扩展,但功能强大。

在我的实际工作中被大量地使用,并且进行了一些必要的扩展,实实在在地降低了我的工作负担。

它完全可以作为第一次“冒烟测试”集成到更大的自动化系统中。

—— The End ——

推荐阅读:

专辑 | Linux 系统编程

专辑 | Linux 驱动开发

专辑 | Linux 内核品读

专辑 | 每天一点 C

专辑 | 开源软件

专辑 | Qt 入门

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嵌入式Linux程序框架可以帮助开发人员快速开发嵌入式Linux应用程序,提高开发效率和质量。以下是一个简单的嵌入式Linux程序框架: 1. 硬件驱动层 硬件驱动层是整个嵌入式系统的基础,它负责管理硬件资源,包括处理器、内存、外设等。这一层的开发需要根据具体的硬件平台进行,通常需要使用C语言和汇编语言进行开发。 2. 操作系统层 操作系统层负责管理系统资源,包括进程、线程、内存、文件系统等。在嵌入式Linux系统中,常用的操作系统包括BusyBox、Buildroot、OpenWrt等。这一层的开发需要掌握Linux内核和系统编程的知识。 3. 应用程序层 应用程序层是用户直接使用的程序,包括应用程序、脚本、库等。这一层的开发需要掌握各种编程语言,如C、C++、PythonShell等。 4. 调试和测试层 调试和测试层用于调试和测试嵌入式系统。这一层通常包括调试工具、测试工具和日志记录工具等。常用的调试和测试工具包括GDB、Valgrind、strace等。 5. 系统管理层 系统管理层负责管理整个嵌入式系统,包括配置管理、升级管理、安全管理等。这一层的开发需要掌握系统管理和网络安全的知识。 以上是一个简单的嵌入式Linux程序框架,它可以帮助开发人员快速开发嵌入式Linux应用程序,并提高开发效率和质量。当然,具体的开发框架还需要根据具体的应用场景进行设计和开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值