在实际工作中,需要对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脚本正确性测试的更多相关文章

  1. 二、shell 脚本条件测试

    目录 一.条件测试 test 格式 文件测试 文件测试常见选项 整数值比较 字符串比较 浮点数的运算 逻辑测试 二.if语句 1单分支 2双分支结构 3多分支结构 三元运算符 三.case 一.条件测 ...

  2. shell脚本编程测试类型下

    一bash的数值测试 -v VAR变量VAR是否设置 数值测试:-gt 是否大于greater-ge 是否大于等于-eq 是否等于-ne 是否不等于  not equal-lt 是否小于-le 是否小 ...

  3. shell脚本编程测试类型上

    一bash的条件测试 判断某需求是否满足,需要由测试机制来实现.专用的测试表达式需要由测试命令辅助完成测试过程. 评估布尔声明,以便用在条件性执行中.若真,则返回0:若假,则返回1. 测试命令:• t ...

  4. 关于shell脚本——条件测试、if语句、case语句

    目录 一.条件测试 1.1.表达说明 1.2.test命令 文件测试 1.3.整数值比较 1.4.字符串比较 1.5.逻辑测试 二.if语句 2.1.单分支结构 2.2.双分支结构 2.3.多分支结构 ...

  5. if嵌套语句 shell脚本实例 测试是否闰年

    在 if 语句里面,你可以使用另外一个 if 语句.只要你能逻辑管理 你就可以使用多层嵌套. 以下是一个测试闰年的例子: #!/bin/bash # This script will test if ...

  6. shell脚本条件测试与比较

    1.条件测试常用语法 test 测试表达式 利用test命令进行条件测试表达式,test命令与测试表达式之间至少有一个空格 [ 测试表达式 ] 通过[ ]中括号进行条件测试表达式,[]中括号边界与测试 ...

  7. shell脚本--文件测试

    文件测试是指测试某一个文件或者目录是否存在 测试文件格式[ 操作符 目录或者文件 ]    注意左括号和操作符之间有一个空格,文件或者目录 与右边的括号之间也有一个空格. -d 测试是否为目录 -e ...

  8. shell脚本二

    在shell脚本一 中,我讨论了shell脚本的语法规范,shell脚本的变量,以及shell脚本的测试语句. 仅仅懂得这些只能写简单的脚本,在简单的脚本中各条语句按顺序执行,从而实现自动化的管理,顺 ...

  9. 一次shell脚本小事故,从中学习排错过程-软件测试

    一次shell脚本小事故,从中学习排错过程 事出,童鞋使用shell脚本搭建测试环境的过称中..... 配置环境变量文件:/etc/profile(用于升级JDK或其他) 手动编辑方法:vi /etc ...

随机推荐

  1. dubbo源码之三——dubbo重构

    dubbo版本:2.5.4 转自:http://javatar.iteye.com/blog/1041832

  2. 掌握Tiles 框架 (一)---Tiles入门和Tiles 框架和体系结构

    掌握Tiles 框架 (一)---Tiles入门和Tiles 框架和体系结构 入门 本教程所讲述的内容 本教程讲述如何使用 Tiles 框架来创建可重用的表示组件.(在最初创建它时,Tiles 框架被 ...

  3. JavaScript的循环语句

    JavaScript的循环语句 1.JavaScript的循环语句 (1)for循环语句 - 循环代码块一定的次数: (2)for/in循环语句 - 循环遍历对象的属性: (3)while循环语句 - ...

  4. Oracle中如何使用REGEXP_SUBSTR函数

    REGEXP_SUBSTR函数格式如下: function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier) __srcst ...

  5. BZOJ 1006 神奇的国度(弦图的染色数)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1006 题意:给定一个弦图,求最小染色数.就是用最小数目的颜色进行染色使得任意两个相邻的节 ...

  6. Android 获取存储空间

    package com.example.getMem; import java.io.File; import android.os.Build;import android.os.Bundle;im ...

  7. block 实现原理详解(一)

    对于大多数人来讲,block内部到底是怎样实现的呢?我们可以借助clang将其编译成为c++的代码,就可以看出,block到底是什么东西, 先来看这样一个问题, <!-- lang: cpp - ...

  8. __declspec关键字详细用法

    __declspec关键字详细用法 __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与extern等是C和C++语言的ANSI ...

  9. Java EE 在网页输出九九乘法表

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  10. Servlet上下文

    Servlet上下文 运行在Java虚拟机的每一个Web应用程序都有一个与之相关的Servlet上下文. Java Servlet API提供了一个ServletContext接口来表示上下文.在这个 ...