使用 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 参数:CLI Arguments - Appium 1
defaultCapabilities 详见:The --default-capabilities flag - Appium 1

运行时的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

最后感谢每一个认真阅读我文章的人,下面这个网盘链接也是我费了几个月时间整理的非常全面的,希望也能帮助到有需要的你!

这些资料,对于想转行做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……

如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流,同时我也把上面花几个月整理的资料放里边了,赶快加入吧。

敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。

自学推荐B站视频:

零基础转行软件测试:38天自学完软件测试,拿到了字节的测试岗offer,堪称B站最好的视频!

自动化测试进阶:已上岸华为,涨薪20K,2022最适合自学的python自动化测试教程,自己花16800买的,无偿分享

app自动化测试之Appium问题分析及定位相关推荐

  1. |app自动化测试之Appium问题分析及定位

    Appium 是由 Node.js 来实现的 HTTP 服务,它并不是一套全新的框架,而是将现有的优秀的框架进行了集成,在 Selenium WebDriver 协议(JsonWireProtocol ...

  2. 干货|app自动化测试之Appium 原理 与 JsonWP 协议分析

    想要使用 Appium 进行测试,那么就一定要先了解Appium的原理.Appium 不仅能够实现移动端的 JSONWP,并且延伸到了 Selenium 的 JSONWP,它能够控制不同移动设备的行为 ...

  3. 干货|app自动化测试之Appium 源码修改定制分析

    Appium 是由 Node.js 来实现的 HTTP 服务,它并不是一套全新的框架,而是将现有的优秀的框架进行了集成,在 Selenium WebDriver 协议(JsonWireProtocol ...

  4. app自动化测试之Appium 源码分析

    Appium 是由 Node.js 来实现的 HTTP 服务,它并不是一套全新的框架,而是将现有的优秀的框架进行了集成,在 Selenium WebDriver 协议(JsonWireProtocol ...

  5. 干货|app自动化测试之Appium WebView 技术原理

    混合应用测试或微信小程序测试,都会涉及到 WebView 组件,这节内容将分析一下 WebView 的技术原理.首先通过日志分析查看 Appium 的运行过程. WebView日志分析 要想查看 Ch ...

  6. app自动化测试之Appium WebView 技术原理

    混合应用测试或微信小程序测试,都会涉及到 WebView 组件,这节内容将分析一下 WebView 的技术原理.首先通过日志分析查看 Appium 的运行过程. WebView日志分析 要想查看 Ch ...

  7. APP自动化测试之录制脚本:3.运行录制的脚本

    APP自动化测试之录制脚本:3.运行录制的脚本 1.前提 基于win10专业版64位系统+jdk1.8+python3+pycharm+android SDK+appium+unittest.运行录制 ...

  8. APP自动化测试-12.Appium日志分析(原理)

    APP自动化测试-12.Appium日志分析 文章目录 APP自动化测试-12.Appium日志分析 前言 一.应用启动 二.元素定位与操作 总结 前言 以Android原生应用为例,记录使用appi ...

  9. java appium_Android应用开发之AS+Appium+Java+Win自动化测试之Appium的Java测试脚本封装(Android测试)...

    本文将带你了解Android应用开发AS+Appium+Java+Win自动化测试之Appium的Java测试脚本封装(Android测试),希望本文对大家学Android有所帮助. 一.为什么需要封 ...

最新文章

  1. mongodb 聚合 分组查询
  2. 欧拉降幂及其扩展欧拉降幂
  3. tf rnn layer
  4. PyTorch官方教程中文版:Pytorch之图像篇
  5. source insight 解决自动缩进 和 TAB键=4个SPACE
  6. php flash 图片上传,Flash教程:flash+php实现图片上传
  7. 关于Linux MongoDB的安装
  8. imewlconverter 制作Rime词库
  9. html提醒用户IE浏览器版本过低,引导更新或下载其他浏览器
  10. spark大数据技术与应用 实训
  11. Python的6种内置对象
  12. java解析project mpp文件,如何在Java中创建.mpp文件?
  13. 华大单片机开发板HC32L13X上手入门
  14. 交换机上网显示本地未连接服务器,本地连接提示受限制或无连接,处理思路?...
  15. 计算机总是无法完成更新失败,Win10系统更新失败无法完成更新正在撤销更改的解决方法...
  16. VAX v10.9.2062.0-52pj vDie 分析 【转载请注明出处】
  17. java socket分包粘包 代码_分享java中处理socket通信过程中粘包情况的实例代码
  18. 【巨人的肩膀上制造世界】——5——Unity3D实用插件之Mouse Interaction-Object Highlight,快速构建模型的悬浮高亮!悬浮提示!悬浮动画!
  19. 单调队列水题 刷广告
  20. 好用的在线画图工具processon

热门文章

  1. Qt Creator打造VScode one dark pro主题配色
  2. JAVA多线程技术-IO密集型与CPU密集型
  3. 5.1.6 守护进程daemon
  4. Linux CFS中的进程调度
  5. PYGAME初学笔记(pygame的导入)
  6. 【人体骨骼点】数据集
  7. 腾讯云创建辅助网卡实现源进源出
  8. 如何快速剪辑音频,简单易上手
  9. LeetCode1309
  10. 《嵌入式 - Lwip开发指南》第4章 移植LWIP(基于RT-Thead系统-以太网+Wifi)