诺德凯社招软件测试一面:pytest fixture、C++ 指针与引用、测试流程与 bug 争议
- 轮次
- 一面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
- 你现在做的是偏硬件的测试还是偏软件的?我们这里有硬件岗和软件岗,你想投哪个方向?
- 你会哪些测试工具?
- 你刚介绍了 pytest,说一下 fixture 的用法。
- 你 C++ 会吗?说一下指针和引用的区别。
- 在 C++ 动态内存中会用到 new 和 delete,经常会遇到什么问题?
- 你会写 C++ 吗?
- 简单说一下测试的流程,以及流程中测试需要注意的点是什么?
- 你说了会有需求评审,如果需求文档有描述不清楚的地方,你会怎么做?
- 测试过程中你提交了一个 bug,开发不认同,怎么办?
- 你觉得测试对一个 bug 的底线是什么?
- 你在做测试的过程中遇到的最大的困难是什么?
- 你觉得一个优秀的软件测试工程师需要具备什么样的能力?你个人的短板是什么?
- 反问环节(原帖问了测试的工作内容——软件平台测试与数据标注,以及公司有没有应届生培养)。
《参考解析》
fixture 的用法。 pytest 的 fixture 是「测试前的准备与测试后的清理」的复用单元:用 @pytest.fixture 声明,测试函数把 fixture 名当参数就自动注入;scope 控制生命周期(function / class / module / session),yield 前是 setup、后是 teardown,autouse=True 自动生效,params 做参数化,conftest.py 里定义可跨文件共享。面试里最好补一句实践:数据库连接用 session 级、每个用例用 function 级事务回滚,避免用例之间互相污染。
指针与引用。 指针是保存地址的变量,可以为空、可以改指向、可以算术运算,需要解引用;引用是已有对象的别名,必须在定义时绑定、之后不能改绑、不能为空,语法上像值一样用。底层实现上引用通常也是地址,但语言层面约束更强,所以传参时「不想拷贝又不想处理空指针」用 const 引用。
new/delete 的常见问题。 忘记 delete 造成内存泄漏;new[] 配 delete(或反过来)导致未定义行为;delete 后继续使用形成悬垂指针;异常路径上没释放;多次 delete 同一指针。现代 C++ 的正解是 RAII——std::unique_ptr / shared_ptr / 容器,把释放交给析构。被追问「怎么排查泄漏」可以答:Valgrind、ASan/LSan,或统计分配计数。
测试流程与需求评审。 需求评审 → 测试方案与用例设计 → 环境与数据准备 → 执行与缺陷跟踪 → 回归与上线验证 → 复盘。注意点在于:需求阶段就把验收标准和边界条件问清(歧义留到后期就是返工),用例覆盖正常流、异常流与边界,缺陷要可复现(步骤、环境、预期与实际、日志),上线前明确回滚方案。需求文档写不清时不要自己猜着测,先列出歧义点找产品确认并把结论写进用例备注——这是把「测什么」定死的过程。
开发不认同 bug。 先回到证据:复现步骤、日志、预期与实际分别对照需求或设计文档;能当着开发面复现一次最好。分歧往往来自「这是需求还是缺陷」,那就把产品拉进来三方确认,结论落到文档。态度上不对人、不对情绪,只对事实和影响面——这个 bug 影响到多少用户、什么场景、有没有绕过方案。
「bug 的底线」。 底线是:影响正确性、数据安全、资损、可用性的问题不能带着上线;体验类问题可以排期但不能瞒报。回答时给一条可执行的判断标准,比表决心有说服力。
能力与短板。 优秀测试的能力可以拆成:业务理解(知道哪里最容易出错)、用例设计(等价类、边界、场景组合)、技术手段(自动化、接口测试、日志与抓包)、沟通推进(缺陷的说服与优先级)。说短板时要挑真实但不致命的,并给出正在做的改进(比如自动化覆盖不足,正在用 pytest 补接口回归)——空答「我太追求完美」反而扣分。