Raina测试学习指南Raina测试学习指南
导读
面试题
对话式面试题
AI 测试教程
软件测试教程
🌍 知识星球
学习交流群
  • Raina测试工具集
  • Raina常用网站&工具合集
  • 小红书
  • B站
  • 作者介绍
导读
面试题
对话式面试题
AI 测试教程
软件测试教程
🌍 知识星球
学习交流群
  • Raina测试工具集
  • Raina常用网站&工具合集
  • 小红书
  • B站
  • 作者介绍
  • 基础测试对话

    • 测试基础理论
    • 测试用例设计
    • 功能测试
    • 接口测试
    • 自动化测试
    • 性能测试
    • 安全测试
    • 移动端与兼容性测试
    • 测试管理与工程实践
    • 综合与开放题
    • 数据库与数据测试
    • Linux 与测试环境
    • 微服务与分布式系统
    • Web 前端专项
    • DevOps 与 CI/CD
    • 业务领域专项
    • 测试工具与效率
    • 质量度量与测试策略
    • 软技能与职业发展
    • 进阶综合题
    • 网络与 HTTP 协议(高频)
    • SQL 与数据库基础(高频)
    • 自动化落地细节(高频)
    • 缺陷与质量过程(高频)
    • 经典业务 / 场景设计题(高频)
    • Web / App 实战补充(高频)
    • 接口与联调实战(高频)
    • 性能与稳定性补充(高频)
    • 编程与工具基础(高频)
    • 行为面试与综合高频
  • AI 测试对话

    • AI 测试基础与方法论
    • 大模型(LLM)功能测试
    • Prompt 与对话质量测试
    • Agent / Skill / MCP 测试
    • RAG 与知识库测试
    • 评测体系与 Eval
    • 自动化测试与 CI/CD
    • 性能、成本与稳定性
    • 安全、合规与伦理
    • 测试工程实践与职业发展

自动化里断言(Assert)一般断言哪些内容?

👔 Raina面试官: 自动化里 Assert 一般断言哪些东西?是不是页面没报错就行?

🙋 候选人:

  • 不是没报错就行,要断言业务结果而不只是操作成功。
  • UI 层:页面标题/文案、元素状态(可见/禁用)、跳转 URL、Toast 提示、列表条数变化。接口层:HTTP 状态码、响应体字段值、schema 结构、响应时间阈值。数据层:DB 记录状态、库存/余额变化、日志和消息是否发出。
  • 断言要少而精——一条 case 聚焦一个业务验收点,多个断言用 soft assert 或拆 case,失败时能一眼看出哪条业务规则破了。

👔 Raina面试官: 动态内容比如订单号怎么断言?

🙋 候选人:

  • 用模式匹配而非硬编码:正则、长度范围、前缀格式。
  • 或先提取再存变量,后续步骤用这个值做关联断言,验的是链路一致性而不是固定值。


如何处理弹窗、iframe、下拉框、日期控件这些难定位元素?

👔 Raina面试官: 弹窗、iframe、下拉框、日期控件这些难搞的元素,你怎么处理?

🙋 候选人:

  • 难元素的处理思路是先识别类型,再切上下文,能绕 UI 就绕 UI。
  • 弹窗:区分 alert(driver.switch_to.alert)和自定义 modal(等 modal 容器出现再操作内部元素);必要时用 ESC 或点遮罩关闭。iframe:switch_to.frame 切进去操作,完事 switch_to.default_content 切回。下拉框:优先 Select 类;自定义下拉用 click 展开 + 选项定位,或直接用 value 设 hidden input。日期控件:能调 API 设值就不点日历;必须 UI 操作时拆成年月日分步点选。
  • 通用技巧:Playwright 的 frameLocator、shadow DOM 穿透;实在搞不定评估是否下沉到接口层断言。

👔 Raina面试官: 嵌套 iframe 两层以上呢?

🙋 候选人:

  • 逐层 switch,或用 frame 的 name/id 直接定位。
  • 封装成 Page 方法隐藏切换逻辑,用 try/finally 保证一定切回主文档,避免后续 case 全挂。


自动化脚本里如何做失败重试和失败截图?

👔 Raina面试官: 自动化脚本失败重试和失败截图,你们怎么做的?

🙋 候选人:

  • 重试和截图要分层做:框架层统一兜底,case 层谨慎加。
  • 截图:pytest hook(pytest_runtest_makereport)或 afterEach 里,失败时自动截图+保存 page source/HTML;Allure 附件 attach。重试:pytest-rerunfailures 或自写 decorator,CI 里失败重跑 1-2 次排除环境抖动;flaky case 打 tag 单独统计。
  • 注意:重试不能掩盖真 bug——连续失败 N 次要 quarantine;截图路径按时间+用例名归档,CI artifact 永久存储方便回溯。

👔 Raina面试官: 重试 3 次都过了,算 pass 吗?

🙋 候选人:

  • 算 pass 但要记 flaky 指标,不能当没事。
  • 报告里标 rerun 次数,定期修 flaky case;P0 门禁对 rerun pass 可以 warn 甚至 block,看团队成熟度。


接口自动化框架你用过哪些?(pytest + requests / RestAssured 等)

👔 Raina面试官: 接口自动化框架你用过哪些?pytest + requests、RestAssured 这类。

🙋 候选人:

  • Python 栈我最熟pytest + requests + jsonschema/Pydantic,Java 栈用过 TestNG/JUnit + RestAssured。
  • pytest 优势:fixture 管前置后置、参数化、插件生态(allure、rerun、xdist 并行)。requests 轻量直接;复杂场景用 httpx 支持 async。RestAssured 链式断言可读性好,和 Java 项目集成自然。
  • 框架层我会封装:BaseClient 统一 base_url/headers/token 刷新;响应断言工具;日志和报告;环境配置切换。工具选型看团队语言栈,工程化能力比框架名字重要。

👔 Raina面试官: Postman 写的接口 case 怎么和 CI 集成?

🙋 候选人:

  • Newman CLI 跑 collection,或导出转 pytest/RestAssured 脚本进 Git。
  • Postman 适合探索,回归集最终要版本化管理;环境变量用 CI secret 注入,别提交明文 token。


数据驱动(DDT)和关键字驱动有什么区别?

👔 Raina面试官: 数据驱动和关键字驱动,很多人混为一谈,你怎么区分?

🙋 候选人:

  • 简单说:数据驱动是同逻辑多数据,关键字驱动是同关键字拼流程。
  • 数据驱动(DDT):一条用例模板 + CSV/YAML/Excel 多组输入输出,pytest parametrize 或 TestNG DataProvider 实现;适合边界值、算价规则、多账号场景。关键字驱动:把操作抽象成关键字(登录、搜索、下单),用例用表格或 DSL 排列关键字序列,非开发也能维护;Robot Framework 是典型代表。
  • 实际项目常组合:Page Object 封装操作,DDT 喂数据,关键字层给业务方低代码维护入口。别为了关键字而关键字——维护成本可能比直接写代码还高。

👔 Raina面试官: 小团队适合哪种?

🙋 候选人:

  • 先pytest 参数化做 DDT,ROI 最高。
  • 关键字驱动适合有专职业务测试写 case 且流程相对固定的团队;三人以下测试组直接代码+参数化更务实。


自动化项目里配置文件、环境切换怎么设计?

👔 Raina面试官: 自动化项目配置文件和环境切换,你怎么设计?

🙋 候选人:

  • 设计原则是配置与代码分离、环境变量优先、敏感信息不入库。
  • 结构:config/base.yaml 放公共项;config/dev.yaml、staging.yaml、prod.yaml 放环境差异(base_url、账号前缀、超时);.env 或 CI secret 管密码 token。切换方式:命令行 --env=staging、环境变量 TEST_ENV、或 pytest ini 配置。
  • 代码里通过 Config 单例读取,禁止硬编码 URL。多环境账号用 data factory 按 env 前缀造数;prod 只跑 read-only smoke,写操作限 test/staging。

👔 Raina面试官: 本地和 CI 配置不一致导致偶发失败怎么办?

🙋 候选人:

  • 统一配置源和默认值,CI 和本地读同一套 yaml 模板。
  • 差异项全部走 env override;启动时打印当前 env 和 base_url,失败报告附配置快照,方便 diff。


如何保证自动化用例可独立运行、互不依赖?

👔 Raina面试官: 自动化用例怎么保证能独立跑、互相不依赖?

🙋 候选人:

  • 核心是每条 case 自包含:自己造数、自己清理、不依赖执行顺序。
  • 做法:fixture setup/teardown 或 API 前置造数,保证初始状态已知;用唯一前缀(时间戳+随机)避免并发冲突;禁止 case A 创建的数据给 case B 用;共享状态放 session 级 fixture 且只读。
  • pytest 用独立 function scope fixture;并行跑(xdist)时必须数据隔离。发现依赖时拆成独立 case 或合并成一条端到端,别用 depends 硬串。

👔 Raina面试官: 登录态能不能全局只登一次?

🙋 候选人:

  • 可以,但用session token 注入而非 UI 登录串依赖。
  • 全局 fixture 调登录 API 拿 token 写 header,各 case 独立带 token 跑;UI 登录 case 单独一条验证登录功能,其他 case 不重复走 UI 登录。


App 自动化(Appium)和 Web 自动化主要差异是什么?

👔 Raina面试官: Appium 做 App 自动化和 Web 自动化,主要差异在哪?

🙋 候选人:

  • 差异主要在驱动模型、元素定位、环境依赖和稳定性挑战。
  • Web:浏览器标准化,DOM 稳定,Playwright/Selenium 生态成熟,auto-wait 好做。App:Android/iOS 双端,Native/WebView/Flutter 混合,用 UiAutomator2/XCUITest 驱动;定位靠 accessibility id、xpath、Android uiautomator;受设备、系统版本、安装包、权限弹窗影响大。
  • App 额外要管:真机/模拟器池、WDA 稳定性、应用 reset 策略、手势操作、前后台切换。执行慢、flaky 率通常高于 Web,所以 App 自动化更聚焦 P0 主路径,细节探索性手工补。

👔 Raina面试官: 混合 App 里 H5 页面怎么测?

🙋 候选人:

  • 识别 context 后switch_to.context 切 WebView,再用 Web 定位策略。
  • 封装自动检测 WebView 可用;测完切回 NATIVE_APP。H5 和 Native 断言分层,别在一个 case 里混太多 context 切换。

一份好的 Bug 单应该包含哪些字段?

👔 Raina面试官: 提 Bug 的时候,你觉得一份好的缺陷单最少要有什么?

🙋 候选人:

  • 好 Bug 单要让开发不用猜就能复现、能判断严重度、能追溯版本。
  • 必填:标题(现象+模块)、复现步骤、实际结果 vs 期望结果、环境(版本/浏览器/账号/数据)、严重度和优先级、附件(截图/日志/录屏)。加分项:影响范围、是否阻塞、关联需求或用例 ID、初步根因猜测。
  • 标题别写太泛,比如登录失败不如写 iOS 15 微信登录点击无响应。步骤要可执行,别写操作一下就不行。

👔 Raina面试官: 开发说信息不够复现不了,你怎么补?

🙋 候选人:

  • 按复现三角补:步骤、数据、环境。
  • 附上 HAR、接口请求响应、服务端 traceId、数据库快照。能录屏就录屏,偶现 Bug 标注概率和触发条件。目标是让开发 10 分钟内进入排查,而不是来回问测试。


Bug、Defect、Error、Failure 有什么区别?

👔 Raina面试官: Bug、Defect、Error、Failure 这几个词经常混用,你怎么区分?

🙋 候选人:

  • 按发生阶段理解最清晰:Error → Defect → Failure,Bug 是口语统称。
  • Error:人写代码时的失误,比如边界条件写错。Defect:Error 进入产品后的静态缺陷,代码或文档里已存在。Failure:运行时暴露的失效,用户看到崩溃、算错账。Bug 日常指 Defect 或 Failure,面试说清因果链即可。
  • 测试发现的是 Failure,追溯到 Defect,根因往往是开发阶段的 Error。别纠结术语宗教战争,团队统一词典更重要。

👔 Raina面试官: 测试能发现 Error 吗?

🙋 候选人:

  • 测试直接发现的是Failure 和 Defect 表现,Error 要靠代码审查、静态分析、单测在编码阶段抓。
  • Shift-left 的意义就是让 Error 少变成 Defect——需求评审、设计评审、CR 都是测 Error 的延伸。


严重程度(Severity)和优先级(Priority)不一致时怎么处理?

👔 Raina面试官: Severity 和 Priority 对不上的时候,比如严重但优先级低,你怎么处理?

🙋 候选人:

  • 两者独立是常态,处理原则是测试定 Severity,项目组定 Priority。
  • 典型冲突:后台报表小数点偏差 Severity 高(数据错)但 Priority 低(少量用户、下版本修);首页错别字 Severity 低但 Priority 高(大促前品牌敏感)。我会在缺陷单写清技术影响和业务影响,让 PO/项目经理拍 Priority,不自己改对方的字段。
  • 若开发擅自调低 Severity 逃避修复,拿 AC 和影响数据说话,必要时三方会议定夺并留痕。

👔 Raina面试官: 发布前还有 P1 Severity 但 Priority 被标 P3,你怎么办?

🙋 候选人:

  • 在测试报告和发布评审里单独列出,写清风险、影响面、workaround,要求决策人签字。
  • 测试职责是暴露矛盾,不是替业务做发布决定。没有书面接受风险,我会给出不建议发布的结论。


什么是缺陷逃逸?你怎么统计和降低逃逸率?

👔 Raina面试官: 缺陷逃逸是什么?你怎么统计、怎么降?

🙋 候选人:

  • 逃逸指测试阶段未发现、上线后才暴露的缺陷,逃逸率是质量门禁的核心指标之一。
  • 统计:逃逸数 /(测试发现数 + 逃逸数),按版本、模块、严重度拆分。数据源对齐缺陷系统标签——线上 Bug 打 production-found,回溯是否测试环境可复现、用例是否覆盖。
  • 降低:逃逸复盘找根因(用例缺失、环境差异、需求变更未回归);补自动化和探索性 charter;高风险模块加结对测试;发布前对照逃逸历史 checklist。

👔 Raina面试官: 逃逸率多少算合格?

🙋 候选人:

  • 没有 universal 标准,看业务容忍度和趋势。
  • 核心模块 P0/P1 逃逸应趋近零;整体逃逸率逐季下降比绝对值更重要。配合缺陷密度、发布成功率一起看,单指标容易 gaming。

最近更新: 2026/8/21 08:07
Contributors: weixin_55062269
Prev
DevOps 与 CI/CD
Next
测试工具与效率