zoukankan      html  css  js  c++  java
  • Appium中的logger

    原文地址http://blog.csdn.net/itfootball/article/details/45395901

    appium中的log输出量很大,我们分析问题的时候会依赖于这些log,但是你理解这些log输出一些标志么?你是否觉得它的输出晦涩难懂了?想不想改成自己的大名?那就看下面的文章吧。

    log形式

    首先我们来看一段log输出:

    info: Starting App
    info: [debug] Attempting to kill all 'uiautomator' processes
    info: [debug] Getting all processes with 'uiautomator'
    info: [debug] executing cmd: /Users/wuxian/Documents/tools/sdk/platform-tools/adb -s emulator-5554 shell "ps 'uiautomator'"
    info: [debug] No matching processes found
    info: [debug] Running bootstrap
    info: [debug] spawning: /Users/wuxian/Documents/tools/sdk/platform-tools/adb -s emulator-5554 shell uiautomator runtest AppiumBootstrap.jar -c io.appium.android.bootstrap.Bootstrap -e pkg com.example.android.apis -e disableAndroidWatchers false
    info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: numtests=1
    info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: stream=
    info: [debug] [UIAUTOMATOR STDOUT] io.appium.android.bootstrap.Bootstrap:
    info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
    info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: test=testRunServer
    info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: class="io".appium.android.bootstrap.Bootstrap
    info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: current=1
    info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS_CODE: 1
    info: [debug] [BOOTSTRAP] [debug] Socket opened on port 4724
    info: [debug] [BOOTSTRAP] [debug] Appium Socket Server Ready
    

    我将上面的log分为4种(message为消息体) 
    1. log等级:message 
    2. log等级:[debug] message 
    3. log等级:[debug] [BOOTSTRAP] [debug] message 
    4. log等级:[debug] [UIAUTOMATOR STDOUT] message

    1.log等级:message

    这一类log就是简单的appium服务器的log,切log等级为非debug

    2.log等级:[debug] message

    这一类log和上面是一样的,都是appium服务器的log,区别在于该log等级为debug,在logger.js模块中我们可以看到如下代码,下面的代码将debug等级的log,更改为info等级,然后在后面跟上[debug]的标志。

    if (levels[logger.transports.console.level] === levels.debug) {
        logger.debug = function (msg) { logger.info('[debug] ' + msg); };
      }

    3.[debug] [BOOTSTRAP] [debug] message

    这一类log为手机中的socket服务器包(放在android手机端的jar包称为bootstrap)返回的输出

    4.log等级:[debug] [UIAUTOMATOR STDOUT] message

    这一类log为执行case输出的log,我们可以理解为adb接受的log。我们一般执行uiautomator的case时候,控制台输出的就是这类带有uiautomator标识的log。

    自定义log部分

    log等级

    第一步我们来修改log等级。比如我们想将info级别改为warn级别,只需要将logger.js的223行左右的如下代码

    if (levels[logger.transports.console.level] === levels.debug) {
        logger.debug = function (msg) { logger.info('[debug] ' + msg); };
      }

    修改为 
    这里写图片描述

    这里就将debug等级的修改为了warn模式的,info模式还是info模式(我之前说过,你应该知道为什么改变的是debug而不是info等级吧?)。我们来看看输出:

    info: Starting App
    warn: [debug] Attempting to kill all 'uiautomator' processes
    warn: [debug] Getting all processes with 'uiautomator'
    warn: [debug] executing cmd: /Users/wuxian/Documents/tools/sdk/platform-tools/adb -s emulator-5554 shell "ps 'uiautomator'"
    warn: [debug] No matching processes found
    warn: [debug] Running bootstrap
    warn: [debug] spawning: /Users/wuxian/Documents/tools/sdk/platform-tools/adb -s emulator-5554 shell uiautomator runtest AppiumBootstrap.jar -c io.appium.android.bootstrap.Bootstrap -e pkg com.example.android.apis -e disableAndroidWatchers false
    warn: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: numtests=1
    warn: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: stream=
    warn: [debug] [UIAUTOMATOR STDOUT] io.appium.android.bootstrap.Bootstrap:
    warn: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
    warn: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: test=testRunServer
    warn: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: class="io".appium.android.bootstrap.Bootstrap
    warn: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: current=1
    warn: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS_CODE: 1
    warn: [debug] [BOOTSTRAP] [debug] Socket opened on port 4724
    warn: [debug] [BOOTSTRAP] [debug] Appium Socket Server Ready
    

    我们将info改变成了warn,但是还是存在info标志的,因为上面代码的改变是建立在你调用的logger.debug,因为我们之前说过了,appium会将debug等级改为info,然后在后面加一个[debug]标志,现在我们改为warn,那么之前debug会改为warn,然后加一个[debug]标志。所以凡是warn后面必然会跟一个[debug]。

    debug标识

    上面的debug,会在info/warn/error标识后面加一个[debug],是不是很丑,我是觉得很丑,我们将其改变一下改成[TesterHome],还是刚才的代码:

    这里写图片描述

    info: Starting App
    warn: [TesterHome] Attempting to kill all 'uiautomator' processes
    warn: [TesterHome] Getting all processes with 'uiautomator'
    warn: [TesterHome] executing cmd: /Users/wuxian/Documents/tools/sdk/platform-tools/adb -s emulator-5554 shell "ps 'uiautomator'"
    warn: [TesterHome] No matching processes found
    warn: [TesterHome] Running bootstrap
    warn: [TesterHome] spawning: /Users/wuxian/Documents/tools/sdk/platform-tools/adb -s emulator-5554 shell uiautomator runtest AppiumBootstrap.jar -c io.appium.android.bootstrap.Bootstrap -e pkg com.example.android.apis -e disableAndroidWatchers false
    warn: [TesterHome] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: numtests=1
    warn: [TesterHome] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: stream=
    warn: [TesterHome] [UIAUTOMATOR STDOUT] io.appium.android.bootstrap.Bootstrap:
    warn: [TesterHome] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
    warn: [TesterHome] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: test=testRunServer
    warn: [TesterHome] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: class="io".appium.android.bootstrap.Bootstrap
    warn: [TesterHome] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: current=1
    warn: [TesterHome] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS_CODE: 1
    warn: [TesterHome] [BOOTSTRAP] [debug] Socket opened on port 4724
    warn: [TesterHome] [BOOTSTRAP] [debug] Appium Socket Server Ready

    ok了。

    觉得UIAUTOMATOR STDOUT和BOOTSTRAP不理解?

    没关系,写成中文,在devices/android/uiautomator.js文件中,找到190和203行左右的语句,将上面两个标识符修改为中文: 
    修改前: 
    这里写图片描述
    修改后: 
    这里写图片描述

    输出:

    info: Starting App
    warn: [TesterHome] Attempting to kill all 'uiautomator' processes
    warn: [TesterHome] Getting all processes with 'uiautomator'
    warn: [TesterHome] executing cmd: /Users/wuxian/Documents/tools/sdk/platform-tools/adb -s emulator-5554 shell "ps 'uiautomator'"
    warn: [TesterHome] No matching processes found
    warn: [TesterHome] Running bootstrap
    warn: [TesterHome] spawning: /Users/wuxian/Documents/tools/sdk/platform-tools/adb -s emulator-5554 shell uiautomator runtest AppiumBootstrap.jar -c io.appium.android.bootstrap.Bootstrap -e pkg com.example.android.apis -e disableAndroidWatchers false
    warn: [TesterHome] [脚本输出] INSTRUMENTATION_STATUS: numtests=1
    warn: [TesterHome] [脚本输出] INSTRUMENTATION_STATUS: stream=
    warn: [TesterHome] [脚本输出] io.appium.android.bootstrap.Bootstrap:
    warn: [TesterHome] [脚本输出] INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
    warn: [TesterHome] [脚本输出] INSTRUMENTATION_STATUS: test=testRunServer
    warn: [TesterHome] [脚本输出] INSTRUMENTATION_STATUS: class="io".appium.android.bootstrap.Bootstrap
    warn: [TesterHome] [脚本输出] INSTRUMENTATION_STATUS: current=1
    warn: [TesterHome] [脚本输出] INSTRUMENTATION_STATUS_CODE: 1
    warn: [TesterHome] [设备socket服务器输出] [debug] Socket opened on port 4724
    warn: [TesterHome] [设备socket服务器输出] [debug] Appium Socket Server Ready
    

    哦了,就毁到这里吧。

  • 相关阅读:
    换手机了,dopod566,小E丢了 :(
    在a标签的href与onclick中使用javascript的区别
    我的SQL相关TIPS
    asp.net的ajax服务器端代理
    IE和Firefox中的dom加载完成执行代码(defer)
    看几个源码,自己多做项目了!
    数据层使用Server对象;动态生成控件多文件上传
    ref,out(摘)
    JavaScript和jQuery的DOM操作
    闭包
  • 原文地址:https://www.cnblogs.com/111testing/p/7841331.html
Copyright © 2011-2022 走看看