測試還是要學會看日志:查看日志小技巧


前言

做測試,如果不會看日志,那估計真的是很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質量,如果開發再說讓你幫忙點一下,你就直接說:請認真看日志截圖!!!如果你有代碼能力,也可以進一步截圖有問題的代碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM