美文网首页赏味不足Android技术测试开发栈
UiAutomator2.0日志输出本地化方案

UiAutomator2.0日志输出本地化方案

作者: 测试开发栈 | 来源:发表于2017-04-11 19:39 被阅读277次

利用过UiAutomator2.0或者Espresso(Espresso也是android近年新出的一款Android自动化测试框架)做Android自动化测试的同学应该肯定会遇到这样的一个问题:自动化测试执行完后,不知道在哪里查看执行的log以及结果报告,除非每次都连着USB,在Android Studio中查看,但那样也是临时性的log和报告输出,清除或关闭AS就没有了……那么我们想把自动化测试做的更“专业”,执行的log每个测试机上总得生成一份吧,没log的定位跟踪错误
那不是盲人摸象嘛。所以今天要分享的内容就是基于这个痛点来设置解决方案。

一、方案思路

既然Android提供的Log类没有输出到文件,那么我们为何不借助其他Log框架呢?比如Log4j啊,没错,思路就是用Log4j。

二、实现步骤

1、log4j相关依赖包
在android中使用log4j日志文件使用需要两个jar包,但是我们不再需要进行log4j.properties配置文件的配置,所有配置一切都在代码中完成。
log4j 包下载:
下载地址:http://logging.apache.org/log4j/1.2/download.html
android-logging-log4j包下载:
下载地址:https://code.google.com/archive/p/android-logging-log4j/downloads
下载完毕后放到Android Studio对应moudle的libs目录下。

2、log4j初始化配置
新建Log4jConfigure 类,初始化log文件夹及log4j的一些配置:

public class Log4jConfigure {
    private static final String DEFAULT_LOG_DIR =  
    Environment.getExternalStorageDirectory() + 
    File.separator + "U2AutoTest" + File.separator ;//HOME文件夹
    private static final String DEFAULT_LOG_FILE_NAME = "u2Test.log";
    private static final String TAG = BaseCase.testTag;

    public static void configure() {
        final LogConfigurator logConfigurator = new LogConfigurator();
        try {
            File logFile = new File(DEFAULT_LOG_DIR + DEFAULT_LOG_FILE_NAME);
            if(logFile.exists() && ! FileUtil.getIsLog4jConfigured(BaseCase.AD_CONFIG_FILE)){
                logFile.delete();
                FileUtil.updateConfigFile(BaseCase.AD_CONFIG_FILE,"isLog4jConfigured","true");
            }
            logConfigurator.setFileName(DEFAULT_LOG_DIR + DEFAULT_LOG_FILE_NAME);

            //以下为通用配置
            logConfigurator.setUseLogCatAppender(false);//不输出到logcat
            logConfigurator.setUseFileAppender(true);
            logConfigurator.setImmediateFlush(true);
            logConfigurator.setRootLevel(Level.DEBUG);
            logConfigurator.setFilePattern("%d\t%p/%c:\t%m%n");
            logConfigurator.configure();

            android.util.Log.i(TAG, "Log4j config finished");
        } catch (Throwable throwable) {
            logConfigurator.setResetConfiguration(true);
            android.util.Log.e(TAG, "Log4j config error, use default config. Error:" + throwable);
        }
    }
}

3、新建Log工具类
封装各种级别的日志输出方法:

public class LogUtil {
    private String tag;
    private String logPath = BaseCase.U2_HOME_PATH + File.separator + "screenshot" + File.separator;

    private Logger logger;

    public LogUtil(String tag) {
        this.tag = tag;
        logger = getLogger(tag);
        File logFile = new File(logPath);
        if (! logFile.exists()) {
            logFile.mkdir();
        }
    }

    public void i(Object msg){
        Log.i(this.tag, msg + "");
        logger.info(msg);
    }

    public void v(Object msg){
        Log.v(this.tag, msg + "");
        logger.info(msg);
    }

    public void d(Object msg){
        Log.d(this.tag, msg + "");
        logger.debug(msg);
    }

    public void w(Object msg){
        Log.w(this.tag, msg + "");
        logger.warn(msg);
    }

    public void e(Object msg){
        Log.e(this.tag, msg + "");
        logger.error(msg);
    }

    public void e(Object msg,String srceenshot){
        Log.e(this.tag, msg + "");
        logger.error(msg);
        takeScreenshot(srceenshot);
    }

    private Logger getLogger(String tag) {
        Log4jConfigure.configure();
      if ("".equals(tag)) {
            return Logger.getRootLogger();
      }
        return Logger.getLogger(tag);
   }
}

4、使用示例:

public static LogUtil log = new LogUtil(testTag);
log.i("退出应用(" + packageName + ")成功");
log.e("退出应用(" + packageName + ")失败");

三、总结

在测试用例方法中使用上面的Log工具类封装的方法打印log,即可在手机的SD卡指定路径生成测试执行的log文件,这样就再也不用担心手机没连USB数据线就看不到执行log的尴尬了。此外,在此基础上, 还可以进一步完善和扩展,比如写一个工具或者平台增加代码推送到指定手机池等功能,再将执行完后的log或数据传回平台,分析后生成一张漂亮的报告……

更多原创技术好文和资料,请关注公众号:测试开发栈

相关文章

  • UiAutomator2.0日志输出本地化方案

    利用过UiAutomator2.0或者Espresso(Espresso也是android近年新出的一款Andro...

  • 魅族adb logcat开启

    默认情况下logcat不输出 解决方案: 设置->辅助功能->开发者选项->性能优化->高级日志输出 打开即可

  • linux启动tomcat没有启动日志

    tomcat 用sh startup.sh启动没有日志输出,需要切换到logs目录看日志太麻烦 解决方案:在tom...

  • Swift日志输出方案

    翻了好多的资料发现了一种比较方便的打印日志的方式: 感觉比较完美,顺便也学习了一下swift的 Literal E...

  • kubernetes filebeat日志采集方案

    常见的方案: 日志输出到stdout stderr相关的路径有两个/var/lib/docker/containe...

  • UiAutomator2.0

    UiAutomator2.0介绍 UiAutomator2.0是android的自动化测试框架,可跨APP。与in...

  • UiAutomator2.0颜色验证方案

    Android自动化测试中会有不少背景色、透明度等测试验证,但各种框架都没有提供获取对象背景色等API,那么面对这...

  • 03-pch文件

    pch文件 pch的作用 日志输出——发布和调试下NSlog的输出 为什么要管理日志输出?因为日志输出非常耗性能,...

  • Unity Tool - Lua编辑

    用途 关联Project窗口lua脚本文件 关联Console窗口lua输出的日志 方案 监听打开资源事件Unit...

  • CocoaLumberjack 日志分文件输出

    CocoaLumberjack 是 iOS 下强大的日志解决方案,项目开发中,需要将不同模块代码下的 Log 输出...

网友评论

  • 张敏_7c75:if(logFile.exists() && ! FileUtil.getIsLog4jConfigured(BaseCase.AD_CONFIG_FILE)){
    logFile.delete();
    FileUtil.updateConfigFile(BaseCase.AD_CONFIG_FILE,"isLog4jConfigured","true");
    }
    logConfigurator.setFileName(DEFAULT_LOG_DIR + DEFAULT_LOG_FILE_NAME);

    这段代码中调用的方法,有源码吗?谢谢
    测试开发栈:可能要去公众号里面查看,上面复制的链接黏贴出来被转义了。。。
    测试开发栈:@张敏_7c75 这个请看我后面在公众号更新的文章哈 : https://mp.weixin.qq.com/s?__biz=MzIwMzc5ODQzNw==&;mid=2247484090&idx=1&sn=d28c5410be41eebd65a4586ca882a5ed&chksm=96c8a070a1bf2966c1edbe87e2a54e4355037ee342f396fa54bfce4f1925a4142a12845d9987&token=1606332017&lang=zh_CN#rd

本文标题:UiAutomator2.0日志输出本地化方案

本文链接:https://www.haomeiwen.com/subject/ftiuattx.html