前言
做测试,如果不会看日志,那估计真的是很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质量,如果开发再说让你帮忙点一下,你就直接说:请认真看日志截图!!!如果你有代码能力,也可以进一步截图有问题的代码。