App测试面试问答(二)

1、Appium是什么?

Appium 是一个开源的自动化测试框架,主要用于移动应用程序的测试,支持 AndroidiOS 和 Windows 平台。它允许开发者使用相同的 API 编写测试脚本,并在多个平台上运行,实现跨平台的自动化测试。

同一套测试代码可运行在 Android、iOS 和 Windows 上(基于 WebDriver 协议),支持多种编程语言(如 Java、Python、JavaScript、Ruby、C# 等),可以测试原生应用(Native App)、混合应用(Hybrid App)和移动端网页(Web App)。

2、Appium工作原理是什么?

Appium 基于 Client-Server 架构:

1)Appium Server(服务端)接收测试脚本的请求,并转发给对应的设备或模拟器。

2)Appium Client(客户端)使用支持的编程语言编写测试脚本,通过 WebDriver 协议与 Server 通信。

3)底层驱动

  • Android:使用 UiAutomator2(官方推荐)或 Selendroid(旧版)。
  • iOS:使用 XCUITest(Apple 官方框架)。
  • Windows:使用 WinAppDriver。

3、APP测试发现Bug:白屏,崩溃等要怎么复现以及定位,如何与开发沟通?

1)复现问题

  • 明确复现条件
  • 设备信息:机型、系统版本(如 iPhone 12/iOS 16.4 或 Pixel 6/Android 13)。
  • 操作路径:详细步骤(例如:“从首页点击‘我的’→快速滑动→点击‘设置’→白屏”)。
  • 网络环境:Wi-Fi/4G/弱网(可模拟弱网使用 Charles 或 Fiddler)。
  • 数据依赖:特定账号、缓存数据(如首次安装或已登录状态)。
  • 尝试不同场景
  • 在不同设备/系统版本上测试。
  • 重复操作(例如连续快速点击)。
  • 清理缓存后复现(Android: adb shell pm clear <package> / iOS: 卸载重装)。
  • 记录关键信息
  • 截图/录屏(Android: adb screenrecord / iOS: 系统录屏)。
  • 控制台日志(Android: adb logcat / iOS: Xcode -> Devices 查看日志)。

2)定位问题

  • 抓取日志
  • iOS:
  • 连接 Xcode → Window -> Devices → 选择设备 → 查看控制台日志。
  • 导出崩溃报告(.crash 文件):Xcode → Window -> Organizer → Crashes。
  • Android:
# 崩溃日志
adb logcat | grep "AndroidRuntime"
# 特定App日志
adb logcat --pid=$(adb shell pidof -s com.example.app)
  • 分析崩溃堆栈
  • 查找 Exception、Crash、NullPointerException 等关键词。
  • 示例(Android 崩溃堆栈):

java.lang.NullPointerException: at com.example.app.MainActivity.onClick (MainActivity.java:42),

表明MainActivity.java第42行出现空指针。

  •  辅助工具
  • Android Studio Profiler / Xcode Instruments:检测内存泄漏、CPU占用。
  • Firebase Crashlytics:自动化收集崩溃报告(需集成SDK)。

与开发沟通:

  • 提交有效Bug报告
  • 避免模糊描述:不要说“App崩了”,而是“执行XX操作后触发崩溃,日志显示XXX异常”
  • 提供对比数据:如“旧版本正常,新版本必现”
  • 协作调试:必要时与开发一起复现问题(共享测试设备或远程调试)
  •  跟进与验证

4、APP测试兼容性测试有什么问题?要怎么解决?

兼容性测试常见问题

问题

表现

设备碎片化严重

Android 设备型号、屏幕尺寸、分辨率差异大(如折叠屏、刘海屏)。

iOS 版本升级率高,但仍有旧版本用户(如 iOS 14~17 共存)。

UI 错位、文字截断、触摸响应异常。

特定机型崩溃(如低内存设备)。

操作系统版本兼容性

新 API 在旧系统上不兼容(如 Android 12 的 Bluetooth 权限变更)。

iOS 15 与 iOS 17 的隐私策略差异。

功能失效(如相机权限被拒绝)。

应用闪退(调用不支持的 API)。

第三方依赖库冲突

SDK 版本与设备系统不兼容(如高德地图 SDK 仅支持 Android 8+)。

库之间的冲突(如 Glide 和 Picasso 混用)。

初始化失败、内存泄漏。

网络与环境差异

弱网、DNS 污染、代理设置导致请求失败。

不同地区服务限制(如 Google 服务在国内不可用)。

数据加载超时、CDN 资源无法访问。

自动化测试覆盖概率不足

自动化脚本无法覆盖所有机型/场景(如手势操作验证困难)。

动态元素(如广告弹窗)导致脚本失败。

解决方案

设备与系统覆盖策略

云测试平台

使用 AWS Device Farm、Firebase Test Lab、Sauce Labs 覆盖主流真机。

优先级策略:

Android:Top 50 机型(根据市场占有率,如三星、小米、华为)。

iOS:覆盖最新 3 代 iPhone 和 iPad。

模拟器/虚拟机

Android Studio AVD 模拟不同分辨率。

Xcode 模拟器测试 iOS 版本兼容性。

分层测试设计

UI兼容性

使用 Appium 或 Maestro 自动化验证布局适配。

工具辅助:

Android:uiautomatorviewer 检查元素坐标。

iOS:Accessibility Inspector 检测约束布局

功能兼容性

重点测试系统级功能(如权限管理、通知、深色模式)。

依赖库管理

版本控制

使用gradle/ CocoaPods锁定库版本(避免自动升级冲突)

降级方案

为旧系统提供备用逻辑(如用HttpURLConnection替代OkHttp)

网络兼容性测试

工具模拟

Charles:模拟弱网、延迟、丢包。

Android ADB 命令:

adb shell settings put global captive_portal_server 1.1.1.1 # 模拟网络异常

地域测试

使用VPN 或云服务器(如AWS 多区域部署)

自动化优化

动态元素处理

使用 WebDriverWait 显式等待

from selenium.webdriver.support.ui import WebDriverWait

element = WebDriverWait(driver, 10).until(EC.presence_of_element_located(("id", "dynamic_button")))

视觉测试

集成Applitools 或Screenshot Tests 检测UI 差异

#测试问题##自动化测试##测试#
测试岗面经 文章被收录于专栏

整理面试过程中的测试问答,常看常新,多多学习!有些问题是从其他人那里转载而来,会在文章下面注明出处,希望大家多多支持~~

全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务