大家好,转发我朋友老吴的一篇文章,我们在做测试框架的时候用的是python,但是一些理论基础和用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=0return $ret}function do_test2
{echo "Test 2"ret=0return $ret
}function do_test3
{echo "Test 1"ret=0return $ret}

这里的每一个 test handler 函数就代表一个测试项目。

只要将 memetester、iperf 等具体地测试命令填充进行就可以执行真实的测试了。

调度代码

function validate_system()
{for i in "${!fct_table[@]}"; doecho "Test : $i"${fct_table[$i]}res=$?__update_result_table $res "$i" res_tabledone}# 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 ——

用 Shell 快速写一个嵌入式测试框架相关推荐

  1. 如何只用三步就能快速写一个网页

    一.如何只用三步就能快速写一个网页 第一步:下载一个编辑器 下载链接: 1.vscode 前端人员必备软件:http://vscode.bianjiqi.net 2.新手小白玩玩可下载sublime: ...

  2. 如何快速写一个脚本文件

    脚本语言有很多种比如shell python js等等 但是如何利用语言快速写出脚本文件呢? 来看Linux下脚本文件的编写 脚本文件不会在意文件后缀名称 但是会注意格式 1 #!/bin/bash2 ...

  3. JAVA程序员如何快速写一个QQ机器人?

    只要你有java环境,知道maven. 建一个java版的qq机器人,只需要一条命令 通过命令创建 mvn archetype:generate -B \-DarchetypeGroupId=com. ...

  4. 如何快速写一个违背双亲委托机制的classloader

    很多情况下,不得以必须写个classloader来满足需求.例如你一个工程里你想用相同的数据库的多个版本,自己制定了一个jar包目录,没有classloader管理等等.如果是一个遵循java已经规定 ...

  5. 用vue+element-ui快速写一个注册登录页面

    vue+element-ui可以快速开发一个页面,免除大部分的css代码. 一.用表单来做: 1.代码: <!--基本html代码区域--> <template><div ...

  6. java仿QQ聊天室群聊(快速写一个简易QQ)

    [mie haha的博客]转载请注明出处(万分感谢!): https://blog.csdn.net/qq_40315080/article/details/83052689 用java写聊天室实现群 ...

  7. 用c写按键精灵脚本语言,【按键精灵】全军出击按键精灵发言脚本,快速写脚本的基本框架讲解...

    [Asm] 纯文本查看 复制代码Import "GK.lua" Dim jk,gj//定义全局函数,脚本所有的地方都可以用到 Dim 确认退出,发言内容, 退出游戏, 不重回演习, ...

  8. 自动化测试框架 2019_2019年用于自动化的5个最佳Java测试框架

    自动化测试框架 2019 几十年来,Java一直是开发应用程序服务器端层的首选编程语言. 尽管JUnit一直在与开发人员一起帮助他们进行自动化的单元测试,但随着时间的推移和测试的发展,当自动化测试不断 ...

  9. 2019年用于自动化的5个最佳Java测试框架

    几十年来,Java一直是开发应用程序服务器端层的首选编程语言. 尽管JUnit一直在与开发人员一起帮助他们进行自动化的单元测试,但是随着时间的推移和测试的发展,当自动化测试不断增长时,已经开发了许多基 ...

最新文章

  1. MIGO相关bapi:BAPI_GOODSMVT_CREATE 移动类型314 E
  2. 全卷积神经网路【U-net项目实战】语义分割之U-Net详解
  3. 【BZOJ3999】旅游,树链剖分中的有向信息合并
  4. 使用element-ui中的container布局容器
  5. Android MediaRecorder调用AudioRecord流程
  6. fatal: unable to access 'https://github.com:***' 或者本机ping不通github.com解决方法
  7. NLPIR在线系统介绍
  8. 前端html项目总结,前端实习项目总结一
  9. win7计算机屏幕休眠,windows7系统怎么设置屏幕不休眠
  10. 中图分类号,文献标识码,文章编号
  11. 浏览器的同源策略,以及为什么浏览器要用同源策略。
  12. java实现 洛谷 P1427 小鱼的数字游戏
  13. 关于采购中的PTA——概念如何理解及其计算公式
  14. android-c2手机,Nokia C2手机亮相:搭载紫光展锐处理器
  15. android 安全知识总结
  16. 怎么把wps转换成word
  17. 前后端交互必备之js数组方法大全
  18. qe和qc的区别在哪里_QC, QE,QA,QO的具体定义是什么,工厂里面个岗位具体职能又是?...
  19. php上传图片并预览
  20. 瓢城旅行社网页界面设计(HTML+CSS)

热门文章

  1. Introduction to the Optimizer --cbo
  2. Web安全之Cookie劫持
  3. CentOS7下安装Redis — 单节点
  4. dp之二维背包poj1837(天平问题 推荐)
  5. 计算机科学数学理论浅谈 (转载)
  6. 网络爬虫--3.str和bytes的区别
  7. java伪协议_通过伪协议解决父页面与iframe页面通信的问题
  8. mysql5.7.11解压版安装_Mysql5.7.11在windows10上的安装与配置(解压版)
  9. mse均方误差计算公式_PCA的两种解读:方差最大与均方误差最小的推导
  10. 华为服务器ibmc怎么装系统,华为服务器安装操作系统