zoukankan      html  css  js  c++  java
  • [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

  • 相关阅读:
    UVA 10617 Again Palindrome
    UVA 10154 Weights and Measures
    UVA 10201 Adventures in Moving Part IV
    UVA 10313 Pay the Price
    UVA 10271 Chopsticks
    Restore DB後設置指引 for maximo
    每行SQL語句加go換行
    种服务器角色所拥有的权限
    Framework X support IPV6?
    模擬DeadLock
  • 原文地址:https://www.cnblogs.com/faithfu/p/10715145.html
Copyright © 2011-2022 走看看