zoukankan      html  css  js  c++  java
  • 查看日志小技巧

    前言

    做测试,如果不会看日志,那估计真的是很out了,因为你看到的永远是表象,

    估计有人说,不就是tail这个命令么?是的,问题是,一长串日志内容,可能好几屏,你能看懂问题在哪么?

    或者说,调用栈那么长,你能在日志中找到抛出异常的准确位置么?这些信息对开发来说才是有用的,这也是bug质量,

    如果你的日志截图毫无相关或者说对开发毫无帮助,估计开发又得自己去看日志,或者大吼一声:嘿,老铁,再点一波,我看下日志。。。

    脾气好的测试,会老老实实配合再点一次,但是,这不浪费时间么?

    脾气不好的测试,点你妹啊,你自己不会看啊?发泄完后,问题不解决,测试没法进行啊,依然乖乖的配合点一下了。

    (如果你说没你们公司测试看日志权限,那我也不知道该说啥了)

    举例

    真实项目,调用链很长,日志也很多,这里只简单模拟介绍代码问题的日志

    下面代码,main调A中方法、A调B中方法、B调C中方法,C中方法会往外抛异常,B捕获到异常后,对异常进行了转换,然后继续往外抛

    package com.qzcsbj;
    
    /**
     * @create : 2020/12/13 22:54
     * @description : <描述>
     * @作者微信: ren168632201
     */
    public class TestException {
        public static void main(String[] args) throws ByZeroArithmeticException {
            System.out.println("Here is TestException.main");
            TestA a = new TestA();
            a.a();
        }
    }
    
    class TestA {
        public void a() throws ByZeroArithmeticException {
            System.out.println("Here is TestA.a");
            TestB b = new TestB();
            b.b();
        }
    }
    
    class TestB {
        public void b() throws ByZeroArithmeticException {
            System.out.println("Here is TestB.b");
            TestC c = new TestC();
            try {
                c.c();
            } catch (ArithmeticException e) {
                // 转换为自定义的异常;也是为了不把原始异常信息抛到外面
                throw new ByZeroArithmeticException("除数不能为0哦", e);
            }
        }
    }
    
    class TestC {
        public void c() throws ArithmeticException {
            System.out.println("Here is TestC.c");
            System.out.println(5/0);
        }
    }
    
    // 自定义异常类
    class ByZeroArithmeticException extends Exception {
        public ByZeroArithmeticException() {
        }
    
        public ByZeroArithmeticException(String message) {
            super(message);
        }
    
        public ByZeroArithmeticException(String message, Throwable cause) {
            super(message, cause);
        }
    
        public ByZeroArithmeticException(Throwable cause) {
            super(cause);
        }
    
        public ByZeroArithmeticException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
            super(message, cause, enableSuppression, writableStackTrace);
        }
    }
    

     

    结果

    这种情况,从Caused by开始找到第一行本公司包名的代码。所以,问题就是在上图箭头指向的代码行。

    有人说,我们的日志里面没有Caused by,比如下面这种情况 

    package com.qzcsbj;
    
    /**
     * @create : 2020/12/13 22:59
     * @description : <描述>
     * @作者微信: ren168632201
     */
    public class TestException {
        public static void main(String[] args) throws ArithmeticException {
            System.out.println("Here is TestException.main");
            TestA a = new TestA();
            a.a();
        }
    }
    
    class TestA {
        public void a() throws ArithmeticException {
            System.out.println("Here is TestA.a");
            TestB b = new TestB();
            b.b();
        }
    }
    
    class TestB {
        public void b() throws ArithmeticException {
            System.out.println("Here is TestB.b");
            TestC c = new TestC();
            c.c();
    
        }
    }
    
    class TestC {
        public void c() throws ArithmeticException {
            System.out.println("Here is TestC.c");
            System.out.println(5/0);
        }
    }
    

      

    结果

    这种情况,没有Caused by就从头开始找到第一行本公司包名的代码。所以,问题就是在上图箭头指向的代码行。

    最后,你就可以有目的的截图作为bug的附件了,这样也提高了bug质量,如果开发再说让你帮忙点一下,你就直接说:请认真看日志截图!!!如果你有代码能力,也可以进一步截图有问题的代码。

  • 相关阅读:
    比特币and区块链
    C#汽车租赁系统 完整版
    C#托盘程序设置
    网络电视精灵项目
    C#文件操作 File(静态类)
    深入解读XML解析
    ListView 控件总结
    DataGridView 的使用总结
    动态添加节点
    IrisSkin2.dll 添加皮肤
  • 原文地址:https://www.cnblogs.com/uncleyong/p/14053130.html
Copyright © 2011-2022 走看看