关于软件测试:干货app自动化测试之Appium问题分析及定位

3次阅读

共计 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
正文完
 0