[shell]如何测试shell脚本,保证正确
如何用最快最有效的方式进行测试?
很多开发的习惯是,二话不说,写完/拿到,就跑一把,看看输入,输出,想要的操作是否完成,也就过了。
其实这是十分不严谨的,若是未经过QA,风险还是相当大的。
以下即shell脚本测试流程,仅供参考
1.代码走读:
通读代码,确保明白代码的实现和自己预设的一致。
读什么?
A.代码逻辑:这个脚本用来做什么,主要分为多少步,分别做了什么事情?
用于检查是否有遗漏逻辑,或有悖于需求。
B.具体语法,变量,判断语句
语法方面的东西,变量是否定义,判断语句逻辑是否正确,是否考虑各种异常,错误是否退出,返回正确状态值等。
2.语法检测:
shell的语法还是相当让人无语的,很多很容易疏忽遗漏的地方
命令格式: sh -n ***.sh
若是没有异常输出,证明脚本没有明显的语法问题。
3.运行跟踪:
实践是检验整理的唯一标准,跑一把。
不过,可不是直接运行然后去看最终结果,这样会遗漏掉很多中间过程。
命令格式: sh -vx ***.sh
得到效果如下:
我们可以看到
每行代码原始命令(无+的):[这是-v的效果]
代码执行时的情况(带+),包括运算结果,逻辑判断结果,变量赋值等等[-x的效果]
而我们所要关注的就是这些信息,主要是变量值和逻辑判断结果。
4.覆盖分支:
直接跑,只能覆盖到主体流程,对于其他控制流分支的代码是无法覆盖到的。
对于关键性的,重点的逻辑,我们需要制造条件,使运行脚本可以进入对应分支
5.其他:
A.关于bashdb:
可以尝试下,但是感觉投入产出比不高
B.关于单元测试:
实际工作中,由于项目压力比较大,单元测试的成本还是相当高的,所以目前为止没有。
6.有没有更好的方式?
好吧,单步跟踪,脚本短的还好,日志信息不会太多,要是多了,存在调用其他脚本等等.....
日志量达到几千行,这是很轻易的事情。
跟踪过的童鞋有同感,展现不够友好,惨白惨白一片,一千行下来,看的眼花。
很容易遗漏(LZ被坑了好多回,你看,或不看......错误信息明明就在那里,就是视而不见)
So.进行了一层优化,对日志进行处理,使用正则,标注我关心的信息
效果图对比:
处理后:(对错误,关键信息进行颜色标记,在linux终端可以显示)
脚本是用python实现的,位置:
https://github.com/wklken/pytools/tree/master/shell
思想是:执行,抓到所有日志,用正则进行匹配,打上颜色,然后输出
欢迎一起优化,使之功能更完善
---------------------
原文:https://blog.csdn.net/wklken/article/details/7983054
[shell]如何测试shell脚本,保证正确的更多相关文章
- Shell水平测试-想学习Shell的童鞋必选必看文章
[SHELL水平测试] [OVERVIEW 篇] 有很多种 shell, 你熟悉几种? 各个 shell 的 home page 在那里? 为什么说 zsh 是目前为止功能最为强大的 shell. 为 ...
- shell编写一个判断脚本
shell编写一个判断脚本 4.1问题 本例要求在虚拟机server0上创建/roo ...
- Shell文件权限和脚本执行
一.预备知识 1.shell的作用 2.常识 (1)Tab键自动补全 使用Terminal时,输入命令的前几个字母,敲tab会自动补全命令或文件名.目录等. 好处:操作速度更快:不容易出错: ...
- shell编程之服务脚本编写,文件锁以及信号捕获
shell脚本编程是linux运维工程师必备的技能,也是非常重要的一个技能,所以把shell编程学好,只有好处.基础语法我也就不讲了,学过C语言这些语言的,稍微看一下就能明白shell编程的基础,所以 ...
- Linux shell编写端口扫描脚本
Linux shell编写端口扫描脚本 需求: 扫描特定主机 扫描特定主机的特定端口 扫描特定网段 扫描特定网段中哪些主机开放了特定的端口 源码如下: #/bin/bash #该脚本用于对特定目标主机 ...
- Linux shell简单创建用户脚本
前面介绍简单的shell编写规则. 现在开始编写一个简单的shell脚本. Linux shell介绍 编写shell脚本 1.创建脚本文件 2.根据需求,编写脚本 3.测试执行脚本 ...
- shell条件测试语句实例-测试apache是否开启
终于理解了shell条件测试语句"!="和"-n"的用法区别,于是有了如下的shell脚本,做为练习. 第一种方法:测试apache是否开启?字符串测试 #!/ ...
- shell条件测试test
shell条件测试可以通过以下两种方式: test 参数 测试内容 [ 参数 测试内容 ] 一.测试文件类型: test -e 文件名 (测试文件是否存在) [ - ...
- shell中引用其他脚本的方法
在Shell中引用其他脚本的方法是source filename.sh 或 . filename.sh 注意: . 和 filename.sh之间必须有空格
随机推荐
- HTTP协议探究(六):H2帧详解和HTTP优化
一 复习与目标 1 复习 HTTP1.1存在的问题 HTTP2.0要兼容HTTP1.1 HTTP2.0的重要概念 分帧层 二进制:流 消息 帧 流的状态.优先级和并发 流量控制 服务器推送 首部压缩 ...
- python打印表格式数据-星号或注释
python打印表格式数据,留出正确的空格,格式化打出 代码如下: def printPicnic(itemsDict,leftWidth,rightWidth): print('PICNIC ITE ...
- JAVA基于PDF box将PDF转为图片
在一项目中用到,本身我是.NET的,团队中有用到JAVA,故此我处理这个功能,记录以下备用. 1.引用:fontbox-2.0.16.jar.pdfbox-app-2.0.16.jar 版本一定要正确 ...
- tcp关闭连接:挥手讨论
讨论焦点: 如果client发送FIN后,服务器端未返回完成的数据(缓存区中)还执行返回吗? 参考文档:https://download.csdn.net/download/u013547552/10 ...
- kbmMW 5.10.01试用报告
1.FileClient.SameFile 调用这个方法,当本地文件不存在时,会一直等待.跟踪代码,发现: function TkbmMWCustomFileClient.SameFileEx(Loc ...
- DNSMaper 一款子域名枚举与地图标记工具
DNSMaper DNSMaper拥有与众多子域名枚举工具相似的功能,诸如域传送漏洞检测,子域名枚举,IP地址获取 文件说明├── dnsmaper.py(核心代码)├── dnsmapper.png ...
- Mysql中的锁机制-转载
原文:http://blog.csdn.net/soonfly/article/details/70238902 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的 计算资源(如 ...
- 剑指Offer编程题(python)——链表
1.从尾到头打印链表 #输入一个链表,按链表值从尾到头的顺序返回一个ArrayList.class ListNode: def __init__(self, x): self.val = x self ...
- linux上构建ftp服务器
linux上构建ftp服务器 服务器搭建 https://help.aliyun.com/knowledge_detail/60152.html,可以参考这篇博文. 配置文件详解 进入/etc/vsf ...
- hibernate的详解
一,环境的搭建 1)创建maven项目 2)导入依赖的jar包.pom.xml和创建实体类User <?xml version="1.0" encoding="UT ...