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