某个周四早上,沏好一杯茶,刚要坐到座位上,就听开发说,你们测试怎么提的Bug,给个截图能说明啥?截图上面显示的奔溃,如果是必现还好,如果不是必现,那么我们怎么去定位?至少给个日志吧?当时我的内心活动是,昨晚你们下班走了,留下我们测试,5分钟找出两个奔溃,这两处奔溃是用户必须去操作的两个按钮,你们打完包居然连点都没点就直接发布了,说好的自测,说好的版本质量呢?但是嘴上却说,你们要日志,你们早说呀,那不能我们随便给个日志给你吧?日志是什么类型?总得有约束吧......
我叫皮皮,是一名软件测试工程师,上面的经历是我真实的经历。之所以出现上面的问题可以说是项目中没有明确的规范或者说项目有明确的规范但是没有按规范去执行。我相信这也是部分公司的通病,又或者说是部分开发人员和测试人员的的通病。而通病产生的原因有很多,其中一点可能是彼此的心照不宣。比如开发人员看到测试人员提的奔溃性Bug,内心可能已经绝望,我擦?又没日志?算了,我先自己复现一波吧,然后通过不懈努力,出现两种情况,一是复现出来,并且把Bug单提给测试人员,告知已解决。二是复现不出来,并且把Bug单提给测试人员,告知未复现。测试看到第一种情况后回归一波,果然被解决了,高高兴兴的把Bug单关闭了,测试看到第二种情况后,我擦?这都复现不出来?说完拿过手机,经过不懈努力,最终没有复现出来,然后仰天长叹,这么神奇吗?最后这个Bug单被测试关闭,关闭结果是未能复现或已解决。最终陷入一个死循环,测试依旧按照习惯提Bug,开发依旧按照习惯解Bug,毕竟社会主义的和谐,需要我们每个人的努力~
有的朋友会说,不应该呀,一般像这种错误日志不都会直接传到数据库或者存在本地吗?我们先说第一种情况,如果某个应用需要在弱网下甚至是无网情况下测试,这个时候恰巧程序出现错误,可以确保日志文件插入到数据库吗?弱网有几率,但是无网多半没有几率。我们再说第二种情况,Log日志存在本地,存在本地一般有两种做法,第一种是手机自带存储日志功能,第二种是开发人员在程序中写入可以捕获错误日志的方法,并且保存在本地。第一种情况我们先不讨论,因为这个跟手机系统有关系,没有绝对的方法去控制。我们来讨论第二种,第二种确实是解决问题的方法之一,但是也有一种情况是公司不希望用户看到相关日志信息,这就需要开发人员在测试环境和线上环境做隔离。这种方法较为推荐。但是我们身为测试人员,还应该想到,你把手机送往开发的途中,手机进水了呢?哈哈哈哈.....
那么除了开发人员帮助我们生成日志,我们测试人员应该如何去捕获日志呢?答案有很多种,Android studio、SDK下面的monitor.bat、adb命令等等等等。对于这些,相信绝大多数人都听说过,或者说是非常熟悉。一开始我尝试过用Android studio和SDK下面的monitor.bat去捕获Log日志,但是打开Android studio和monitor.ba时,感到一阵头疼,因为全是英文,后来也就捡起了最常用的adb命令,用了之后再也没想换过。哈哈哈哈....
为什么选择adb命令?我选择的原因相对简单,第一是adb命令较为简洁,第二是adb命令可以帮助测试人员进行monkey压力测试,第三是adb命令可以帮助我们捕获某个activity的Log信息。下面介绍一些adb常用命令。
- 查看设备
adb devices
- 安装、卸载软件
adb uninstall <软件名>
adb uninstall -k <软件名>
3. 进入设备或模拟器的shell环境
adb shell
- 打印log信息
adb logcat
............
关于adb命令太多,百度上都有答案,这里就不一一举例,我们说回今天的主题。如何获取Log日志。这就需要用到上面的第4个命令:adb logcat。如果直接使用adb logcat,基本是打印所有的Log日志,这样不方便我们去排查,所以我们做了一个简单的优化,使用adb.exe logcat | find "xxx" >E:/1.txt。这里面的xxx是你的包名,如果你不知道你的APP包名,推荐使用一个APP叫做包名查看器,这个软件可以查看你手机的所有包名,如果你是测试手机的,可以查看你手机里的比如设置、时钟这些包名。反正用了都说好,哈哈哈哈....后面的E:/1.txt是把获取到的Log信息保存在你的本地。一般执行操作是,电脑先装adb环境,然后手机打开USB调试(注意,我说的都是Android手机~苹果的相关adb命令百度也有),然后打开cmd输入adb.exe logcat | find "xxx" >E:/1.txt,这个时候如果你手机没打开这个程序是不会有日志产生的,当你打开的时候,所有Log只记录当前程序的Log。比如你运行adb.exe logcat | find "xxx" >E:/1.txt这行命令后,打开你要测试应用,出现奔溃,这个时候你可以按ctrl+c终止Log输出。这个时候你这个1.txt就记录了奔溃的信息(注意1.txt这个文件可以不用创建)。那么我们测试人员需要看Log里面的哪些信息呢?毕竟可能是几十K甚至几M的文件。我一般会在Log搜索error、crash、ANR这几种情况(当然还有很多种,也可以百度)如果你的日志里面有这些相关字样,那么恭喜你,你的这个日志可以交给开发了,当然如果你希望能够读懂相关日志信息,可以学习java和Android相关知识。
最后,想起一个事情,有次下班问开发,为什么还不走?开发说,我再写几个Bug....我的心愿是,世界和平。adb下载及安装地址 链接:链接:http://pan.baidu.com/s/1c2CPpQC 密码:7uu4