[ARM入门] 用 Shell 快速写一个嵌入式测试框架

[复制链接]
 楼主| 豆杀包 发表于 2022-8-30 22:52 | 显示全部楼层 |阅读模式
作为一个嵌入式底层码农,在项目初期,我经常需要测试各种 Linux 单板的稳定性和性能例如:用 memtester 测试内存的稳定性。用 glmark-es2 测试 GPU 的性能。用 iperf 测试网卡设备的带宽。等一大堆、杂七杂八的测试项目。这些测试都不难,但是比较碎片化,一般都是基于简单的测试脚本。为了节省我的时间和精力,我写了一个简单的测试框架它的服务对象是像我这样的嵌入式底层开发人员。我对它的要求是:能扩展以适应不同的单板;能自由地组合测试项;能对每个测试项进行单独地定制;能复用和积累各种测试脚本;下面是实现这个测试框架的关键点
 楼主| 豆杀包 发表于 2022-8-30 22:53 | 显示全部楼层
查找表
  1. declare -gA fct_table=(['Test 1']="do_test1"
  2. ['Test 2']="do_test2"
  3. ['Test 3']="do_test3"
  4. ['Test 4']="do_empty_handler"
  5. ['Test 5']="do_empty_handler"
  6. ['Test6']="do_empty_handler"
  7. )

  8. declare -gA res_table=(['Test 1']="N/A"
  9. ['Test 2']="N/A"
  10. ['Test 3']="N/A"
  11. ['Test 4']="N/A"
  12. ['Test 5']="N/A"
  13. ['Test 6']="N/A"
  14. )

这里通过 Shell 的关联数组定义了两个查找表。
fct_table 是测试函数表。
res_table 是测试结果表。
 楼主| 豆杀包 发表于 2022-8-30 22:54 | 显示全部楼层
测试函数
  1. function do_empty_handler()
  2. {
  3.    echo "Test Not Implemented: $1"
  4.    return 2
  5. }

  6. function do_test1
  7. {
  8.    echo "Test 1"
  9.    ret=0
  10.    return $ret
  11. }

  12. function do_test2
  13. {
  14.    echo "Test 2"
  15.    ret=0
  16.    return $ret
  17. }

  18. function do_test3
  19. {
  20.    echo "Test 1"
  21.    ret=0
  22.    return $ret
  23. }

这里的每一个 test handler 函数就代表一个测试项目。
只要将 memetester、iperf 等具体地测试命令填充进行就可以执行真实的测试了。
 楼主| 豆杀包 发表于 2022-8-30 22:55 | 显示全部楼层
调度代码
  1. function validate_system()
  2. {
  3.   for i in "${!fct_table[@]}"; do
  4.     echo "Test : $i"

  5.     ${fct_table[$i]}
  6.     res=$?

  7.     __update_result_table $res "$i" res_table
  8.   done
  9. }

  10. # Main entry point
  11. validate_system
  12. print_result

遍历 fct_table,取出每一个 test handler 并调用,然后用 __update_result_table() 将测试的结果填充到 res_table 中。
到这里,这个测试框架就完成。
 楼主| 豆杀包 发表于 2022-8-30 22:56 | 显示全部楼层
运行效果
  1. wwd@think:~/Desktop$ ./board_test.sh
  2. Test : Test 1
  3. Test 1
  4. >>>>> SUCCESS
  5. Test : Test 3
  6. Test 1
  7. >>>>> SUCCESS
  8. Test : Test 2
  9. Test 2
  10. >>>>> SUCCESS
  11. Test : Test 5
  12. Test Not Implemented:
  13. >>>>> N/A
  14. Test : Test 4
  15. Test Not Implemented:
  16. >>>>> N/A
  17. Test : Test6
  18. Test Not Implemented:
  19. >>>>> N/A
  20. TEST RESULTS:
  21. ============
  22. Test: Test 1 Result: PASS
  23. Test: Test 3 Result: PASS
  24. Test: Test 2 Result: PASS
  25. Test: Test 5 Result: N/A
  26. Test: Test 4 Result: N/A
  27. Test: Test 6 Result: N/A
  28. Test: Test6 Result: N/A
 楼主| 豆杀包 发表于 2022-8-30 23:00 | 显示全部楼层
总结
这个简单的测试框架非常轻巧且易于扩展,但功能强大。
在我的实际工作中被大量地使用,并且进行了一些必要的扩展,实实在在地降低了我的工作负担。
它完全可以作为第一次“冒烟测试”集成到更大的自动化系统中。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

323

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部