测试工程师要不要会写代码?你会到什么程度?
👔 Raina面试官: 测试工程师到底要不要会写代码?你自己会到什么程度?
🙋 候选人:
- 要会,但目标是能写测试代码、能读业务代码,不是和开发拼算法。
- 我会 Python 写接口/UI 自动化、数据处理脚本、日志分析;能读 Java/Go 接口逻辑定位边界。Shell 做环境部署和数据清理;SQL 查数验库。
- 不写生产功能代码,但脚本 + 调试能力决定效率上限——手工能测的,会代码的人能测十倍场景还可持续回归。
👔 Raina面试官: 不会代码能不能做好测试?
🙋 候选人:
- 能做好探索和业务验收,但自动化、性能、复杂联调会吃瘪。
- 建议先学 Python + requests + pytest,一个月能跑通接口冒烟,ROI 最高。
Python 里 list、dict、set 常见用法你熟悉吗?举个测试场景。
👔 Raina面试官: Python 的 list、dict、set 你熟吗?结合测试举个用法。
🙋 候选人:
- 熟,测试里list 存用例集、dict 做映射、set 做去重对比最常见。
- list:接口返回列表断言条数、排序、首尾元素;参数化用例数据
[{user, pwd, expect}, ...]。dict:JSON 响应转 dict 按 key 断言;headers/cookies 配置;接口字段映射表。set:两接口返回 ID 列表做差集,找漏同步的数据;日志里提取订单号去重统计。 - 举个实际场景:批量注册后用 set 对比 DB 用户 ID 与 API 列表 ID,差集就是有问题的账号,比双重 for 循环清晰。
👔 Raina面试官: dict 嵌套很深怎么断言?
🙋 候选人:
- 用jsonpath 或递归 get,别一层层硬写。
- pytest 里封装
get_nested(data, 'a.b.c'),失败时打印完整路径,维护成本低。
Git 常用命令有哪些?遇到冲突怎么解决?
👔 Raina面试官: Git 日常你常用哪些命令?冲突了怎么处理?
🙋 候选人:
- 日常就pull、branch、commit、push、merge/rebase 这几类,测试脚本和用例都走 Git 版本管理。
- 常用:clone/init;checkout -b 开分支;add + commit;pull --rebase 更新;push 提 MR。查历史用 log、diff、blame;回滚用 revert 或 reset(本地)。stash 临时存改动;tag 打版本对应测试报告。
- 冲突处理:先 pull 再改,冲突文件里搜 <<<<<< 标记,手动保留正确版本,删标记后 add + commit。拿不准就和对方沟通谁改哪块;大冲突用 IDE 三路合并更直观。测完再 push,别 force push 公共分支。
👔 Raina面试官: rebase 和 merge 你更用哪个?
🙋 候选人:
- 个人分支用rebase 保持线性历史,合 main 用 merge 或 PR squash。
- 已 push 的公共分支别 rebase,避免别人本地乱掉。
正则表达式在日志过滤、断言里怎么用?
👔 Raina面试官: 正则表达式在日志过滤和断言里你怎么用?
🙋 候选人:
- 正则适合模式匹配和半结构化提取,日志 grep 和自动化断言都会用到。
- 日志:
grep -E 'ERROR|Exception'筛异常;orderId=\d{16}提订单号;tail -f app.log | grep --line-buffered traceId=xxx跟一条请求全链路。Pythonre.findall(r'traceId=(\w+)', log)批量提取。 - 断言:响应里订单号格式
^ORD\d{12}$、手机号脱敏1\d{2}\*\*\*\*\d{4}、时间戳 ISO8601 格式校验。别滥用——固定字符串用 equals,正则只在动态值或格式校验时用。
👔 Raina面试官: 正则写错了怎么调试?
🙋 候选人:
- 用regex101 或 Python 小脚本先离线验证,再放进用例。
- 断言失败时打印实际字符串和 pattern,方便 diff;复杂规则拆成多个简单 regex。
JSON / XML 解析出错时,你怎么定位问题?
👔 Raina面试官: JSON 或 XML 解析报错,你怎么定位?
🙋 候选人:
- 先分是数据本身坏了,还是代码解析方式不对,再逐层缩小范围。
- JSON:看报错行号/列号,常见是尾逗号、单引号、未转义换行、BOM 头。用 jq 或 jsonlint 在线校验;对比接口 raw body 和文档示例。XML:命名空间缺失、标签未闭合、特殊字符未转义;xmllint 验证。
- 定位步骤:抓 raw 响应 → 格式化工具校验 → 对比 Content-Type 和 charset。若是第三方返回,保存原始报文提缺陷;若是己方序列化问题,让开发看对象转 JSON 时的 null/日期/枚举处理。
👔 Raina面试官: 接口返回 200 但解析失败呢?
🙋 候选人:
- 多半是实际 body 不是 JSON——HTML 错误页、空 body、gzip 未解压。
- 打印 response.text 前 200 字符和 headers,一眼能看出是网关 502 还是编码问题。
编码问题(UTF-8 / GBK)导致乱码,你怎么排查?
👔 Raina面试官: UTF-8 和 GBK 编码乱码,你怎么排查?
🙋 候选人:
- 乱码本质是读写用了不同编码,按数据流逐段对齐编码声明和实际字节。
- 排查链:浏览器/客户端显示乱 → 看响应头 Content-Type 是否带 charset=utf-8;抓包看 raw bytes。文件乱 → file 命令或 chardet 检测;Excel CSV 用 GBK 打开 UTF-8 文件必乱。日志乱 → 启动参数 -Dfile.encoding=UTF-8;Linux locale 是否 UTF-8。
- Python 读写明确指定:
open(f, encoding='utf-8'),requests 后r.encoding = r.apparent_encoding。DB 连接串加 characterEncoding=utf8;前后端统一 UTF-8,老系统 GBK 要在边界做转码并单测。
👔 Raina面试官: 怎么快速判断当前是哪种编码?
🙋 候选人:
- 看hex 前缀:EF BB BF 是 UTF-8 BOM;乱码形如 锟斤拷 多是 UTF-8 当 GBK 解。
- 用 iconv 试转:
iconv -f gbk -t utf-8 file,转对就说明源编码猜对了。
Shell / Python 脚本你写过哪些提高效率的工具?
👔 Raina面试官: 你写过哪些 Shell 或 Python 小工具提效?
🙋 候选人:
- 我写过几类重复劳动自动化脚本,都是日常痛点攒出来的。
- Shell:一键启停测试环境 docker-compose;cron 清理过期测试数据;grep 聚合 ERROR 发钉钉告警;批量 curl 健康检查。Python:Excel 用例转 YAML 供 pytest 读;造数脚本批量注册/充值;日志按 traceId 串联输出;接口回归报告 diff 两次 JSON 响应。
- 原则:第三次手工操作就脚本化,加 README 和参数说明,放团队 Git 共享;敏感信息走环境变量,别写死密码。
👔 Raina面试官: 脚本谁来维护?
🙋 候选人:
- 谁用谁 PR,放 tests/tools 目录进 CI 冒烟。
- 核心脚本加简单单元测试,避免环境升级后 silently break。
如何用 Charles / Fiddler 做弱网模拟和接口改包?
👔 Raina面试官: Charles 或 Fiddler 怎么做弱网模拟和改包?
🙋 候选人:
- 弱网用Throttle 限速,改包用 Breakpoints / Map Local / Rewrite,都在代理工具里完成。
- 弱网:Charles → Proxy → Throttle Settings,设 3G/高延迟/丢包;Fiddler → Rules → Performance → Simulate Modem。验 loading、超时重试、重复提交。改包:Breakpoints 断住请求/响应手动改 JSON;Map Local 用本地文件替换响应;Rewrite 批量改 host、header、body 字段。
- 场景举例:把支付接口响应改成失败码,验前端提示和订单状态,不用等后端配合造异常。仅限测试包和测试环境,HTTPS 需装并信任根证书。
👔 Raina面试官: 移动端弱网怎么配?
🙋 候选人:
- 手机 WiFi 代理指到 PC,Charles 开 SSL Proxying 抓 HTTPS。
- App 有 SSL Pinning 要 debug 包关闭;改包后记得关 Breakpoint,否则所有请求都卡住。
Postman 里环境变量、前置脚本、断言你会怎么用?
👔 Raina面试官: Postman 的环境变量、前置脚本、断言你怎么配合用?
🙋 候选人:
- 我的套路是环境管配置、脚本管动态值、Tests 管验收,一条请求自包含。
- 环境变量:、 分 dev/staging 切换;Collection 变量放公共 header。前置脚本:登录接口把 token 写入 pm.environment.set;时间戳、随机手机号动态生成;签名字段按规则计算。断言:pm.test 验 status、响应时间;pm.expect(json).to.have.property;JSON schema 或嵌套字段校验。
- 进阶:Collection 级 pre-request 统一加 Authorization,Tests 里 pm.collectionVariables 传递 orderId 给下游请求,串业务流程。
👔 Raina面试官: 和 Newman CI 怎么衔接?
🙋 候选人:
- Newman 跑 collection,--environment 注入 CI secret,报告接 Allure 或 HTML Extra。
- token 过期问题在 CI 里先调登录请求写 env file,再跑业务 collection。
你怎么搭建一套本地可运行的接口自动化 Demo?
👔 Raina面试官: 如果要搭一套本地能跑的接口自动化 Demo,你怎么做?
🙋 候选人:
- 我会用pytest + requests + 公开 Mock API,半小时能 clone 就跑通,展示工程化结构。
- 目录:tests/ 放用例;common/client.py 封装 HTTP;config/env.yaml 管 base_url;conftest.py 提供 fixture(session、token)。选 jsonplaceholder.typicode.com 或 httpbin 做被测服务,零依赖。写 3~5 条 CRUD 用例 + 参数化边界 + Allure 报告。
- 加分项:README 一键 pip install && pytest;Makefile 或 run.sh;GitHub Actions 跑 CI badge。Demo 重点是结构清晰——配置分离、断言封装、日志可读,而不是 case 数量。
👔 Raina面试官: 没有真实项目接口怎么办?
🙋 候选人:
- 用WireMock 或 Flask 写 stub 服务,自己定义接口契约。
- docker-compose 起 mock + 测试容器,面试官本地 docker compose up && pytest 即可复现。
