如何进行shell脚本正确性测试
在实际工作中,需要对shell脚本进行正确性测试。
如何用最快最有效的方式进行测试?
很多开发的习惯是,二话不说,写完/拿到,就跑一把,看看输入,输出,想要的操作是否完成,也就过了。
其实这是十分不严谨的,若是未经过QA,风险还是相当大的。
以下即shell脚本测试流程,仅供参考
1.代码走读:
写完,或者拿到一个shell脚本,不必急于运行,虽然实践是检验整理的唯一标准,但是,在读代码这个过程中,可以规避很多低级的bug.
读什么?
A.代码逻辑,这个脚本用来做什么,主要分为多少步,分别做了什么事情?
用于检查是否有遗漏逻辑,或有悖于需求。
B.具体语法,变量,判断语句
语法方面的东西,变量是否定义,判断语句逻辑是否正确,是否考虑各种异常,错误是否退出,返回正确状态值等。
2.语法检测:
shell的语法还是相当让人无语的,很多很容易疏忽遗漏的地方
命令格式:
sh -n ***.sh
若是没有异常输出,证明脚本没有明显的语法问题。

3.运行跟踪:
实践是检验整理的唯一标准,跑一把。
不过,可不是直接运行然后去看最终结果,这样会遗漏掉很多中间过程。
命令格式:
sh -vx ***.sh
得到效果如下:

我们可以看到
每行代码原始命令(无+的):[这是-v的效果]
代码执行时的情况(带+),包括运算结果,逻辑判断结果,变量赋值等等[-x的效果]
而我们所要关注的就是这些信息,主要是变量值和逻辑判断结果。
4.覆盖分支:
直接跑,只能覆盖到主体流程,对于其他控制流分支的代码是无法覆盖到的。
对于关键性的,重点的逻辑,我们需要制造条件,使运行脚本可以进入对应分支
5.其他:
A.关于bashdb:
可以尝试下,但是感觉投入产出比不高
B.关于单元测试:
实际工作中,由于项目压力比较大,单元测试的成本还是相当高的,所以目前为止没有。
6.有没有更好的方式?
好吧,单步跟踪,脚本短的还好,日志信息不会太多,要是多了,存在调用其他脚本等等.....
日志量达到几千行,这是很轻易的事情。
跟踪过的童鞋有同感,展现不够友好,惨白惨白一片,一千行下来,看的眼花。
很容易遗漏(LZ被坑了好多回,你看,或不看......错误信息明明就在那里,就是视而不见)
So.进行了一层优化,对日志进行处理,使用正则,标注我关心的信息
效果图对比:


脚本是用python实现的,位置:https://github.com/wklken/pytools/tree/master/shell
思想是:执行,抓到所有日志,用正则进行匹配,打上颜色,然后输出
好了,就这些
工具的实现是为了提高效率,节约时间。
The end!
转自: http://wklken.me/posts/2012/09/15/how-to-test-shell.html
如何进行shell脚本正确性测试的更多相关文章
- 二、shell 脚本条件测试
目录 一.条件测试 test 格式 文件测试 文件测试常见选项 整数值比较 字符串比较 浮点数的运算 逻辑测试 二.if语句 1单分支 2双分支结构 3多分支结构 三元运算符 三.case 一.条件测 ...
- shell脚本编程测试类型下
一bash的数值测试 -v VAR变量VAR是否设置 数值测试:-gt 是否大于greater-ge 是否大于等于-eq 是否等于-ne 是否不等于 not equal-lt 是否小于-le 是否小 ...
- shell脚本编程测试类型上
一bash的条件测试 判断某需求是否满足,需要由测试机制来实现.专用的测试表达式需要由测试命令辅助完成测试过程. 评估布尔声明,以便用在条件性执行中.若真,则返回0:若假,则返回1. 测试命令:• t ...
- 关于shell脚本——条件测试、if语句、case语句
目录 一.条件测试 1.1.表达说明 1.2.test命令 文件测试 1.3.整数值比较 1.4.字符串比较 1.5.逻辑测试 二.if语句 2.1.单分支结构 2.2.双分支结构 2.3.多分支结构 ...
- if嵌套语句 shell脚本实例 测试是否闰年
在 if 语句里面,你可以使用另外一个 if 语句.只要你能逻辑管理 你就可以使用多层嵌套. 以下是一个测试闰年的例子: #!/bin/bash # This script will test if ...
- shell脚本条件测试与比较
1.条件测试常用语法 test 测试表达式 利用test命令进行条件测试表达式,test命令与测试表达式之间至少有一个空格 [ 测试表达式 ] 通过[ ]中括号进行条件测试表达式,[]中括号边界与测试 ...
- shell脚本--文件测试
文件测试是指测试某一个文件或者目录是否存在 测试文件格式[ 操作符 目录或者文件 ] 注意左括号和操作符之间有一个空格,文件或者目录 与右边的括号之间也有一个空格. -d 测试是否为目录 -e ...
- shell脚本二
在shell脚本一 中,我讨论了shell脚本的语法规范,shell脚本的变量,以及shell脚本的测试语句. 仅仅懂得这些只能写简单的脚本,在简单的脚本中各条语句按顺序执行,从而实现自动化的管理,顺 ...
- 一次shell脚本小事故,从中学习排错过程-软件测试
一次shell脚本小事故,从中学习排错过程 事出,童鞋使用shell脚本搭建测试环境的过称中..... 配置环境变量文件:/etc/profile(用于升级JDK或其他) 手动编辑方法:vi /etc ...
随机推荐
- combotree的加载方法
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...
- IOS自定义仪表盘
登录|注册 周海锋 的专栏 Objective-C/Cocos2d/Cocos2d-x/Php/JS 目录视图 摘要视图 订阅 2016软考项目经理实战班 学院周年礼-顶 ...
- android 入门 007(界面跳转)
一.隐式跳转(自定义界面) 界面层: <Button android:id="@+id/sencond_contact" android:layout_width=" ...
- oracle 主键自增
将表t_uaer的字段ID设置为自增:(用序列sequence的方法来实现) ----创建表 Create table t_user( Id number(6), userid varchar2(20 ...
- 从exchange2010上面删除特定主题或特定时间的邮件
昨天在上班的公交上接到同事电话,说他的的部门老大发错了一封邮件到另外一个同事邮箱了,问我能不 能去那个同事的邮箱里面删除,我一想,之前在网上看到过资料,到了公司趁那个误接收邮件的同事还没有来,在服务器 ...
- 数据库批量修改表名,增加前缀(SQL server)
exec sp_msforeachtable @command1=' declare @o sysname,@n sysname select @o=''?'' ,@n=stuff(@o,1,7,'' ...
- UVA 1292 十二 Strategic game
Strategic game Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Sta ...
- SOME USEFUL MACHINE LEARNING LIBRARIES.
from: http://www.erogol.com/broad-view-machine-learning-libraries/ http://www.slideshare.net/Vincenz ...
- [JAVA设计模式]第三部分:结构模式
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- bzoj 1588: [HNOI2002]营业额统计 treap
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 13902 Solved: 5225[Submit][Sta ...