接口压测时,参数化和关联(Correlation)为什么重要?
👔 Raina面试官: 接口压测里参数化和关联为什么重要?不做会怎样?
🙋 候选人:
- 参数化是让每个虚拟用户用不同数据——不同账号、商品 ID、订单号,模拟真实并发,避免所有请求打同一条数据导致缓存命中虚高或业务冲突。
- **关联(Correlation)**是提取上游响应里的动态值(Token、sessionId、orderId)传给下游请求,模拟完整业务链路。
- 不做参数化:压测结果失真,可能把 DB 单行锁打爆。不做关联:链路走不通,错误率 100%,压了个寂寞。
👔 Raina面试官: 参数化数据不够怎么办?
🙋 候选人:
- 几种办法:预生成 CSV 数据池、压测前 API 批量造数、用随机算法生成合法格式数据。
- 数据量至少 >= 并发数,最好 10 倍避免碰撞。敏感数据脱敏,测完清理。
性能测试报告应该包含哪些内容?
👔 Raina面试官: 性能测试报告应该写什么?怎么给开发 actionable 的建议?
🙋 候选人:
- 报告结构:测试目标 → 环境说明 → 场景描述 → 关键指标 → 瓶颈分析 → 优化建议 → 风险结论。
- 指标要有图表:RT 分布、TPS 曲线、错误率、资源利用率随时间变化。对比 SLA 和 baseline,标红未达标项。
- 给开发的建议要具体:不是优化 SQL,而是order 表 idx_user_id 缺失,SELECT xxx 扫描 200 万行,建议加索引,预计 RT 降 60%。附 trace 和慢查询截图。
👔 Raina面试官: 开发不认可你的瓶颈分析呢?
🙋 候选人:
- 邀请一起看 APM 和 DB 监控,用同一份数据对话。
- 必要时做对照实验:加索引/加缓存/限流后复压,用前后对比证明。测试提供证据,开发做方案,而不是互相猜。
常见的 Web 安全漏洞有哪些?
👔 Raina面试官: 常见的 Web 安全漏洞有哪些?别只报名字,说测试时怎么关注。
🙋 候选人:
- 高频的几类:SQL 注入、XSS、CSRF、越权、敏感信息泄露、SSRF、文件上传漏洞、不安全的反序列化。
- 测试时按 OWASP Top 10 做 checklist,结合业务场景——有文件上传就测类型绕过,有支付就测越权和重放,有管理后台就测垂直越权。
- 安全测试不是扫一遍工具就完事,要理解业务逻辑哪里可能被绕过。
👔 Raina面试官: 功能测试和安全测试边界在哪?
🙋 候选人:
- 功能测正常路径对不对,安全测恶意输入和异常路径能不能被挡住。
- 但功能测试应该具备基础安全意识——登录、权限、输入校验这些常规 case 里就要带安全维度,不必等专职安全测试。
SQL 注入的原理是什么?测试时怎么构造用例?
👔 Raina面试官: SQL 注入原理是什么?测试时怎么构造用例?
🙋 候选人:
- 原理是用户输入被拼进 SQL 语句执行,攻击者通过特殊字符('、--、;、UNION)改变原 SQL 语义。
- 测试用例:每个输入点试
' OR '1'='1、1; DROP TABLE--、时间盲注' AND SLEEP(5)--、UNION 查询。GET/POST/Header/Cookie 都要测,不只表单。 - 判定标准:返回异常数据、SQL 报错信息泄露、响应时间明显延迟、后台数据被篡改。同时验证 parameterized query / ORM 是否生效。
👔 Raina面试官: 用了 ORM 是不是就不用测了?
🙋 候选人:
- 不是。原生 SQL 拼接、动态排序字段、报表查询仍可能有注入点。
- 还要测 stored procedure 和 batch 接口。ORM 用对了大部分场景安全,但不能当免死金牌。
XSS 分为哪几种?测试时怎么验证?
👔 Raina面试官: XSS 分哪几种?测试时怎么验证?
🙋 候选人:
- 三类:存储型(恶意脚本存 DB,其他用户访问触发)、反射型(URL 参数回显到页面)、DOM 型(纯前端 JS 处理不当)。
- 测试 payload 如
alert(1)、``、编码绕过%3Cscript%3E。 - 验证:payload 是否在页面执行、是否被 HTML encode、CSP 头是否生效。存储型还要测提交 → 其他用户可见的跨账号场景。
👔 Raina面试官: 页面没弹窗是不是就安全了?
🙋 候选人:
- 不一定。看 HTML 源码里 payload 是否原样输出,没执行可能是浏览器拦截或 CSP,但输出本身已是漏洞。
- 还要测事件 handler 绕过、SVG/MathML 向量、富文本编辑器的白名单策略。
敏感信息(密码、Token)在传输和存储上怎么测?
👔 Raina面试官: 密码、Token 这些敏感信息,传输和存储你怎么测?
🙋 候选人:
- 传输层:全站 HTTPS、禁止 HTTP 降级、HSTS 头、敏感接口禁止 URL 传参。用抓包工具看 password/token 是否明文、是否出现在 log 和 Referer 里。
- 存储层:密码必须加盐 hash(bcrypt/argon2),不能 reversible 加密存明文;Token 有过期机制;前端 localStorage 不应存 refresh token(看架构)。
- 还要测:错误信息不泄露用户不存在 vs 密码错误、接口响应不返回完整 token/密码、截图/日志脱敏。
👔 Raina面试官: 抓包看到 HTTPS 加密就安全了吗?
🙋 候选人:
- 传输加密只是基础,还要看服务端怎么存、日志怎么打、前端怎么缓存。
- 很多泄露发生在日志、错误栈、调试接口和前端 JS 变量里,这些都要单独测。
越权访问(水平越权、垂直越权)怎么设计测试场景?
👔 Raina面试官: 水平越权和垂直越权,测试场景怎么设计?
🙋 候选人:
- 水平越权:同角色用户 A 能否访问用户 B 的数据——改 URL 里的 userId/orderId、换 Token 调 API。
- 垂直越权:普通用户能否执行管理员操作——直接调 admin 接口、改 role 参数、访问未授权菜单。
- 每个涉及 ID 的接口都要测自己的 ID OK、别人的 ID 403。管理功能测低权限账号调用。自动化可以参数化两套账号轮换验证。
👔 Raina面试官: 前端隐藏按钮是不是就不用测了?
🙋 候选人:
- 必须测。安全靠后端鉴权,不靠前端隐藏。
- 直接调 API 绕过 UI 是基本操作。还要测 JWT 篡改、Cookie 里 role 字段伪造(如果存在这种设计)。
安全测试和渗透测试有什么区别?
👔 Raina面试官: 安全测试和渗透测试有什么区别?
🙋 候选人:
- 安全测试是测试活动的一部分,按 checklist 和用例验证已知漏洞类型是否被防护,通常在 test/staging 环境,频率高。
- 渗透测试是模拟黑客攻击,由安全专家做深度挖掘和链式利用,偏对抗性,一般上线前或定期(季度/年)做,可能在预发或专门靶场。
- 测试工程师做前者为主,后者通常需要专业资质和授权。但测试要有安全意识,能覆盖 OWASP 基础项。
👔 Raina面试官: 我们没预算做渗透测试怎么办?
🙋 候选人:
- 最低配:自动化 DAST 扫描 + 人工安全用例 + 依赖漏洞扫描(SCA)。
- 开源工具如 OWASP ZAP 做 baseline scan,高危项人工复现验证。推动重大版本前至少做一次外部渗透或 Red Team。
Android 和 iOS 测试有哪些差异?
👔 Raina面试官: Android 和 iOS 测试有什么差异?你会分别关注什么?
🙋 候选人:
- Android:碎片化严重,关注机型/ROM/分辨率适配、后台保活策略、权限模型、APK 多渠道包。
- iOS:机型相对少但系统版本迭代快,关注 Apple 审核规则、沙盒机制、推送/APNs、TestFlight 流程。
- 共性:生命周期、网络、性能、安全。差异:Android 用 ADB/logcat,iOS 用 Xcode Instruments/Console;自动化 Android 常用 Appium+UiAutomator2,iOS 用 XCUITest。
👔 Raina面试官: 资源有限只能测一个平台呢?
🙋 候选人:
- 看用户分布,主平台深测 + 另一平台冒烟。
- 核心业务双端必测,UI 差异大的页面分开验,后端接口共用同一套接口自动化。
弱网、断网、网络切换场景怎么测?
👔 Raina面试官: 弱网、断网、WiFi 切 4G 这些场景怎么测?
🙋 候选人:
- 工具:Charles/Proxyman 限速、Android Emulator 网络模拟、iOS Network Link Conditioner、真机弱网 App。
- 场景设计:高延迟(500ms-3s)、低带宽(50KB/s)、高丢包(10-30%)、完全断网、网络切换中途。
- 验证点:有没有友好提示、数据是否丢失、重连后能否恢复、重复提交是否幂等、loading 状态是否正确。支付/提交类要重点测。
👔 Raina面试官: 弱网测试需要每台真机都做吗?
🙋 候选人:
- 不必。选 2-3 台代表性真机 + 模拟器覆盖矩阵,核心链路必测。
- 自动化弱网较难,关键场景手工 + 录制回放辅助。上线前至少做一次专项 weak network regression。
