共计 4384 个字符,预计需要花费 11 分钟才能阅读完成。
应用 Appium 进行测试时,会产生大量日志,一旦运行过程中遇到报错,能够通过 Appium 服务端的日志以及客户端的日志剖析排查问题。
Appium Server 日志 - 开启服务
通过命令行的形式启动 Appium Server,上面来剖析一下启动日志,日志第一行显示了 Appium 版本信息和服务在本地的运行地址。
$ appium -g appium.log | |
[Appium] Welcome to Appium v1.8.0-beta3 (REV \ | |
40e40975ebd3593d08c3f83de2546258f7ddf11d) | |
[Appium] Appium REST http interface listener started \ | |
on 0.0.0.0:4723 |
如果启动 Appium 服务时增加了参数,会在启动日志中展现,比方增加了 defaultCapabilities,启动日志也会显示进去。
Hogwarts $ appium --log-timestamp --log-no-colors --no-reset | |
2021-04-29 10:11:58:545 - [Appium] Welcome to Appium v1.17.0 | |
2021-04-29 10:11:58:547 - [Appium] Non-default server args: | |
2021-04-29 10:11:58:547 - [Appium] logTimestamp: true | |
2021-04-29 10:11:58:547 - [Appium] logNoColors: true | |
2021-04-29 10:11:58:547 - [Appium] noReset: true | |
2021-04-29 10:11:58:548 - [Appium] Deprecated server args: | |
2021-04-29 10:11:58:548 - [Appium] --no-reset => --default-capabilities '{"noReset":true}' | |
2021-04-29 10:11:58:548 - [Appium] Default capabilities, which will be added to each request unless overridden by desired capabilities: | |
2021-04-29 10:11:58:548 - [Appium] noReset: true | |
2021-04-29 10:11:58:567 - [Appium] Appium REST http interface listener started on 0.0.0.0:4723 |
- Appium 参数:http://appium.io/docs/en/writ…
-
defaultCapabilities 详见:http://appium.io/docs/en/writ…
运行时的 Session 日志
自动化测试运行起来之后,Appium Server 的日志提供了一些根本的 Session 信息,特地是 desired capabilities 的配置信息。应该时刻留神 Appium 服务是否正确接管了申请内容。
... [debug] [BaseDriver] Creating session with W3C capabilities: {[debug] [BaseDriver] "alwaysMatch": {[debug] [BaseDriver] "platformName": "android", [debug] [BaseDriver] "appium:appActivity": ".view.WelcomeActivityAlias", [debug] [BaseDriver] "appium:appPackage": "com.xueqiu.android", [debug] [BaseDriver] "appium:automationName": "UiAutomator2", [debug] [BaseDriver] "appium:deviceName": "emulator-5554", [debug] [BaseDriver] "appium:noReset": "true", [debug] [BaseDriver] "appium:udid": "emulator-5554" [debug] [BaseDriver] }, ...
下面的日志创立了一个 Session,设置了 Capabilities 参数,以 JSON 格局通知 AppiumServer 被测试设施的一些重要信息。
Appium GET 申请的日志
Appium 是一个 REST 服务,接管 HTTP 申请,返回后果。Appium 服务端日志用 [HTTP] –> 和 [HTTP] <– 展现了申请和返回的信息。
[HTTP] --> GET /wd/hub/status {} | |
[debug] [MJSONWP] Calling AppiumDriver.getStatus() with args: [] | |
[debug] [MJSONWP] Responding to client with driver.getStatus()\ | |
result: {"build":{"version":"1.8.0-beta3","revision":"30e7b45bdc5668124af33c41492aa5195fcdf64d"}} | |
[HTTP] <-- GET /wd/hub/status 200 121 ms - 126 |
“–>”代表收回 HTTP 申请,“<–”代表响应,两头是指令细节。[MJSONWP] 指应用 MJSONWP(Mobile JSON Wire Protocol 协定),调用 AppiumDriver.getStatus()这个办法(无参),返回给客户端 result 信息,整个过程耗时 121 毫秒,传输了 126 个字节。
通过日志进行谬误排查
利用日志能够非常容易的排查和定位问题,问题通常产生在 automation Session 之后,如果 Session 继续存在,谬误也可能产生。
[HTTP] --> POST /wd/hub/session | |
... | |
[debug] [ADB] 1 device(s) connected | |
[debug] [ADB] Running '/home/user/Android/Sdk/platform-tools//adb' \ | |
with args: ["-P",5037,"-s","ec8c4df","shell","am","force-stop",\ | |
"io.appium.unlock"] | |
[debug] [AndroidDriver] Not cleaning generated files. Add \ | |
`clearSystemFiles` capability if wanted. | |
[MJSONWP] Encountered internal error running command: Error: \ | |
Cannot stop and clear com.company.app. Original error: Error \ | |
executing adbExec. Original error: 'Command'/home/user/Android\ | |
/Sdk/platform-tools//adb -P 5037 -s ec8c4df shell pm clear com.\ | |
company.app'exited with code 1'; Stderr: 'Error: java.lang.SecurityException:\ | |
PID 22126 does not have permission android.permission.CLEAR_APP_USER_DATA to \ | |
clear data of package com.company.app'; Code:'1' | |
at Object.wrappedLogger.errorAndThrow (../../lib/logging.js:63:13) | |
at ADB.callee$0$0$ (../../../lib/tools/adb-commands.js:334:9) | |
at tryCatch (/home/linuxbrew/.linuxbrew/lib/node_modules/appium/node_modules\ | |
/babel-runtime/regenerator/runtime.js:67:40) | |
at GeneratorFunctionPrototype.invoke [as _invoke] (/home/linuxbrew/.\ | |
linuxbrew/lib/node_modules/appium/node_modules/babel-runtime/regenerator\ | |
/runtime.js:315:22) | |
.... | |
[HTTP] <-- POST /wd/hub/session 500 40811 ms - 557 |
Appium Driver 启动 Session,清理 com.company.app 时产生谬误。这个谬误让咱们晓得两件事:“Appium 正在尝试做什么”,“哪里出错了”。
在这个例子中,Appium 尝试运行 adb 命令(adb shell am force-stop),adb 参数在错误信息中也有显示。产生了 Android 零碎权限谬误。此时,能够手动运行这个 adb 命令,查看谬误是否能够重现。如果谬误重现,能够通过谬误类型定位问题。
这个例子只是泛滥谬误中的一个,但它阐明至关重要的一点,当谬误产生时,日志能够提供更多的信息,如果没有残缺的日志信息,对 Appium 排错难上加难。
扭转日志输入的参数
上面的参数能够扭转 Appium 服务端的日志行为:
–log-level:扭转 Appium 日志显示级别。Appium 默认展现所有日志
,它有以下一些选项:’info’, ‘info:debug’, ‘info:info’, ‘info:warn’, ‘info:error’, …
–log-no-colors:敞开色彩,如果日志是黑白的,可能会呈现奇怪的字符,比方 ”TODO: find the color”,你能够用这个参数敞开色彩。
–log-timestamp:在日志前增加工夫戳
展现如下:
2018-03-15 13:17:58:663 - [Appium] Welcome to Appium v1.8.0-beta3 (REV 30e7b45bdc5668124af33c41492aa5195fcdf64d) | |
2018-03-15 13:17:58:664 - [Appium] Non-default server args: | |
2018-03-15 13:17:58:665 - [Appium] logTimestamp: true | |
2018-03-15 13:17:58:732 - [Appium] Appium REST http interface listener started on 0.0.0.0:4723 |