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

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 干货|app自动化测试之Appium问题分析及定位

使用 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

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



相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
3月前
|
前端开发 定位技术
《仿盒马》app开发技术分享-- 定位获取(25)
上一节我们实现了地址管理页面的数据查询和展示,接下来我们要实现的功能是地址添加相关的,我们想实现的功能是地图选点,那么在地图选点之前我们要做的就是先获取用户当前的定位。获取定位后我们拿到经纬度和其他信息,然后在对应的地图上展示。
83 0
|
5月前
|
监控 C#
【Function App】如果一个拥有多个Function App的Plan遇见了High CPU问题? 如何方便定位是哪一个Function App引发的呢?
在Azure Function App测试中,若多个Function App共用同一App Service Plan资源,当出现High CPU问题时,由于Function App公开指标无法直接观测CPU状态,可通过启用Application Insights解决。其Live Metrics功能可过滤并查看每个Function App的CPU使用情况。具体步骤为:将所有Function App连接至同一Application Insights资源,进入Live Metrics页面按Role筛选监控数据。附有三段C#代码示例,分别展示占用CPU、Memory及普通功能的实现方法。
152 36
|
11月前
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
|
10月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
571 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
基于LangChain手工测试用例转App自动化测试生成工具
在传统App自动化测试中,测试工程师需手动将功能测试用例转化为自动化用例。市面上多数产品通过录制操作生成测试用例,但可维护性差。本文探讨了利用大模型直接生成自动化测试用例的可能性,介绍了如何使用LangChain将功能测试用例转换为App自动化测试用例,大幅节省人力与资源。通过封装App底层工具并与大模型结合,记录执行步骤并生成自动化测试代码,最终实现高效自动化的测试流程。
|
敏捷开发 Java 测试技术
探索自动化测试的奥秘:从Selenium到Appium
【9月更文挑战第14天】软件测试,这个看似枯燥乏味却至关重要的领域,正经历着一场革命。随着技术的进步,自动化测试工具如Selenium和Appium已成为质量保证的利器。本文将带你一探这些工具的神秘面纱,了解它们如何简化测试流程、提升效率,并确保软件产品的质量。准备好,我们将深入自动化测试的世界,解锁其背后的原理和实践技巧。
|
Java 测试技术 API
探索自动化测试的奥秘:从Selenium到Appium
【8月更文挑战第31天】本文旨在引导读者理解自动化测试的重要性,并逐步深入介绍如何利用Selenium和Appium这两个强大的工具来提升测试效率和质量。文章不仅分享理论知识,还通过具体代码示例,展示如何在Web应用和移动应用测试中实施自动化策略。
|
测试技术 Android开发 iOS开发
探索自动化测试的奥秘:从Selenium到Appium
【8月更文挑战第31天】在软件测试的海洋中,自动化测试如同一艘快艇,带领我们高效地穿越波涛汹涌的手动测试海域。本文将带你从Selenium的网页自动化测试出发,一路驶向Appium的移动应用自动化测试岛屿,揭秘这两种工具如何改变软件测试的航向。你将看到代码示例的灯塔,指引你理解它们如何在实战中发挥作用,以及为什么掌握这些技能对于测试人员来说至关重要。
|
11月前
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。
|
11月前
|
测试技术 数据安全/隐私保护 开发者
自动化测试的奥秘:如何用Selenium和Python提升软件质量
【9月更文挑战第35天】在软件开发的海洋中,自动化测试是那艘能引领我们穿越波涛的帆船。本文将揭开自动化测试的神秘面纱,以Selenium和Python为工具,展示如何构建一个简单而强大的自动化测试框架。我们将从基础出发,逐步深入到高级应用,让读者能够理解并实现自动化测试脚本,从而提升软件的质量与可靠性。