面经基本信息:
- 公司未公开|Senior QA
- 日期:2026-08-10
- 适用难度:中级—高级
来源说明:Reddit本人面试回忆;公司匿名;原帖包含具体追问。原帖共9组主问题;Appium架构、iOS启动、Playwright执行、Android包名/Activity等有连续追问,已置于对应主问题下,不拆成伪造独立原题。
内容说明
本篇为社区对用户分享面经的整理汇编,旨在帮助求职者了解面试考察方向。问题部分力求忠实还原原帖问答脉络;「参考答案 / 复盘思路」为整理方结合工程实践原创补充,仅供交流参考,不代表官方标准答案。
面试问题与参考答案 / 复盘思路
1. 你有多少年自动化测试经验?
参考答案 / 复盘思路: 这是一道背景核实题,回答应区分“从事QA的年限”和“真正编写维护自动化框架的年限”。可以按Web、API、移动端分别说明承担过的任务,再用一个具体例子展示深度:设计框架、解决不稳定、维护CI或分析失败。不要把只执行过现成脚本等同于独立开发框架。面试官继续追问时,应能说清语言版本、工具链和自己维护的模块。
2. 你是否做过移动端自动化测试?
参考答案 / 复盘思路: 先说明Android、iOS或跨端的实际覆盖情况,以及用过的设备云、真机、模拟器与自动化框架。移动端比Web多出权限弹窗、后台切换、设备状态、系统版本和安装升级等维度。若只做过Android,就如实说明iOS经验不足,但可以展示理解的差异,如签名、WebDriverAgent和设备配置。准备一个稳定性案例:如何区分应用崩溃、驱动异常、网络失败和定位器不稳定。
3. 请解释Appium的架构与执行流程。追问:能否讲得更细?
参考答案 / 复盘思路: Appium通常由测试客户端、遵循WebDriver协议的Appium Server以及平台驱动构成。测试代码发起创建会话请求,服务端按automationName等能力选择驱动;Android常用UiAutomator2,iOS常用XCUITest并通过WebDriverAgent与设备交互。命令经HTTP传递、驱动执行并返回元素或状态。深入解释要包括驱动与插件机制、会话生命周期、设备连接、定位与等待,以及日志从哪一层采集。不能把Appium说成直接操作每个平台的原生控件。
4. 如何启动已安装在iOS设备上的App?追问:如果只是启动现有App,需要哪些Capabilities?
参考答案 / 复盘思路: 首先区分“安装并启动”与“启动已安装应用”。常见会话配置包括platformName=iOS、automationName=XCUITest、设备UDID以及目标应用的bundleId;真机环境还需要正确的WebDriverAgent签名和连接条件。对于已安装应用,不一定需要app安装包路径;可以用bundleId识别应用,并根据驱动能力控制启动行为。不同Appium/XCUITest版本的Capability名称和默认行为可能变化,面试时应以所用版本文档及真实设备试跑为准,避免死背固定参数组合。
5. Python+Playwright项目里有多组测试类,怎样通过命令运行它们?追问:假设有10个类,应如何批量执行?
参考答案 / 复盘思路: 先问清使用的是Playwright Python与pytest集成,还是直接运行普通Python脚本。常见pytest项目可以用 pytest tests/ 发现测试,按文件、类、方法或 -k 表达式筛选;例如 pytest tests/test_login.py::TestLogin。批量运行10个类通常通过目录发现或标记管理,而不是手写10条命令。还应说明pytest fixture生命周期、并行插件的使用条件以及CI如何收集报告。原帖问的是执行方式,不宜误答为Node版 npx playwright test。
6. Playwright的定位器如何设计?
参考答案 / 复盘思路: 优先使用可访问性语义与稳定标识,例如get_by_role、get_by_label、get_by_test_id,避免依赖易变的绝对XPath或随机CSS类名。定位器应与用户可感知的业务含义对应,并确保唯一性;动态列表需要缩小容器范围而不是盲目取第一个。执行前利用自动等待和可操作性检查,失败时保存Trace、截图与DOM快照。测试框架应制定定位约定并在代码评审中检查,而不是每个人随意复制浏览器生成的长选择器。
7. HTTP 401与403有什么区别,属于哪类错误?
参考答案 / 复盘思路: 两者都属于4xx客户端错误,但含义不同:401通常表示请求缺少有效认证凭据,响应可能携带WWW-Authenticate挑战;403表示服务端理解请求,但拒绝授权,重新登录未必能解决。接口测试应覆盖未带Token、Token过期、角色权限不足、跨租户资源访问和权限撤销后的行为。不能把“认证失败一定401、权限失败一定403”当作所有产品的铁律,具体实现还可能为了防止资源枚举而返回404。
8. 你使用过哪个Appium版本?
参考答案 / 复盘思路: 不要编造版本号。应说明自己最后一次实际使用的Appium主版本、客户端语言绑定、Android或iOS驱动版本,以及升级时遇到的兼容问题。Appium 2把驱动安装与服务端核心解耦,Appium 3又引入新的运行环境要求;如果只熟悉某个版本,坦诚说明并讲清能力配置、驱动安装和迁移验证的方法。回答重点不是背一个数字,而是证明你能复现环境并处理版本差异。
9. 如何独立查询Android应用的包名与启动Activity?追问:开发没给这些信息时,能用什么ADB命令?
参考答案 / 复盘思路: 在授权调试的设备上,可先用 adb shell pm list packages 查候选包名,再用 adb shell dumpsys package 包名 查看可启动Activity或用 adb shell cmd package resolve-activity --brief -a android.intent.action.MAIN -c android.intent.category.LAUNCHER 包名 解析入口。对已启动应用还可通过 adb shell dumpsys activity activities 观察前台Activity,具体输出随系统版本变化。要区分包名、入口Activity和当前前台Activity,验证后再填入自动化配置。
延伸思考(社区补充)
如果同一套移动端自动化在Android稳定、iOS却频繁启动失败,怎样从Appium Server、XCUITest驱动、WebDriverAgent签名和设备状态四层定位,而不是直接增加重试次数?
参考链接
参考链接:https://www.reddit.com/r/QualityAssurance/comments/1vketaj/my_recent_qa_interview_experience/
