过年后在公司做终端自动化测试工具的开发,整个项目采用qpython(针对安卓平台的python解释器)执行,下面对日志打印功能开发中遇到的2个问题做一些记录。其中框架打印功能模块是二次封装python的logging模块完成的。
问题一:重复打印问题
问题描述:在qpython中,每条日志会打印2次,但同样的代码在win32平台上则不会出现。
问题原因:python中logging getLogger本来就是单例的,且二次封装的日志打印类也是单例使用的;但测试框架采用动态导入脚本的方式,logging模块莫名其妙的进行了两次导入,导致有两个logger存在,所以会看到有每条日志会重复打印2次。
解决办法:查看logging模块源码发现,logging.getLogger()获取到的对象有一个handlers的列表记录了当前的日志对象,对其进行len()的判断即可避免两次初始化logger。
问题二:打印卡死问题
项目已经运行3、4个月了,期间没有任何问题,到之后某次运行中,测试人员发现终端一个Case脚本的某个步骤要卡好几个小时,最开始以为是uiautomator的问题,后来定位了好久才发现是日志打印的问题。
前期为方便调试,将控制台标准输出console_handl