App测试面试问答(二)
1、Appium是什么?
Appium 是一个开源的自动化测试框架,主要用于移动应用程序的测试,支持 Android、iOS 和 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 差异 |
整理面试过程中的测试问答,常看常新,多多学习!有些问题是从其他人那里转载而来,会在文章下面注明出处,希望大家多多支持~~