陈祉伊 · 测试岗面试题库

基于简历(大连海洋大学 · 计算机科学与技术 · 2027 届)与三份岗位 JD 定制 · 共 90+ 问,含参考答案与知识点

简历深挖岗位A:测试工程师(2年经验)岗位B:欧哈游测试实习岗位C:测试实习 J14829SQLServer 补差小程序测试

1简历画像与风险诊断

面试官手里只有这张纸。他被引导去问什么,取决于纸上写了什么。先看清自己的「钩子」和「漏洞」。

1.1 你的三张牌

资产面试官会怎么解读怎么用
两段完整项目(APP + Web 双端)不是只会点功能,Web 和移动端都碰过,工具链完整(Postman / MySQL / Fiddler / 禅道)主动讲「双端差异」,这是很多应届生没有的对比视角
有真实实习(2026.07–09,移动端 APP)进过公司、跟过版本、见过线上问题,不是纯校园项目把「线上问题跟进」讲成故事,这是最值钱的经历
具体数字:12+ bug、8 个高危、2 天内复测有量化意识,说明真的在执行而不是挂名必须能对每个数字讲出 2 个具体案例,否则会被追问穿

1.2 三个必须提前准备的漏洞

漏洞一:岗位A 要求「2 年以上功能/系统测试经验」,你是 2027 届在校生

这是硬伤,但不致命。HR 大概率是批量打招呼,真正筛人的是面试官。策略:不硬吹年限,用「项目密度 + 独立负责度」换「年限」,并主动说明你的可实习时间与转正意愿。详见 4.1。

漏洞二:简历写 MySQL,岗位C 明确要求 SQLServer

不能说「没接触过就完了」,也不能硬说「一样」。正确回答框架:「SQL 是通的,差异在方言,我列了 5 个差异点并已经自学」——把差异点背下来(见 6.3),这一题反而能变成加分项。

漏洞三:简历自我评价写「了解性能测试基础概念」,而岗位B 标签是「性能测试 / 压力测试」

「了解概念」在面试官耳朵里等于「不会」。必须准备到能说出:并发数、TPS、响应时间、错误率、资源瓶颈,以及 JMeter 的基本使用(线程组 / 断言 / 聚合报告)。见 5.4。

1.3 岗位匹配度速览

维度岗位A 测试工程师岗位B 欧哈游实习岗位C 实习 J14829
硬门槛本科 ✅ / 2年经验 ❌2027届 ✅ / 自研小程序+App ⚠️2027届 ✅ / SQLServer ⚠️
匹配度中(经验差一截,能力够)高(移动端经验直接对口)较高(流程与文档能力对口)
他们的真实痛点要能独立扛一个模块、会写文档会汇报、能推着研发改 bug小团队、人手少、要能自己找活干、项目要按时上线流程规范、要写测试分析报告、要查库验证数据
你的主打卖点双端项目 + 缺陷闭环 + 文档意识APP 功能测试实战 + 兼容性/抓包用例设计方法 + SQL 校验 + 报告习惯
最大风险题「你才实习 3 个月,怎么胜任 2 年岗?」「你一周能来几天?能实习多久?」「你会 SQLServer 吗?会自动化吗?」
一个策略建议

三个岗位同时推进时,不要用同一套答案。岗位A 讲「独立负责与推动」,岗位B 讲「上手快、能扛、小程序也能测」,岗位C 讲「流程规范、文档、SQL」。同一个项目,换三种切法讲——这是本页后面每章的核心逻辑。

2通用必答题(三岗通用)

这些题 100% 会被问到,且第一题就定基调。答案按你的真实经历写,可直接改词背诵。

必背2.1 请做个自我介绍

结构身份 → 一段实习 → 两个项目(一句话各概括)→ 技能栈 → 求职意向。控制在 60–80 秒。

面试官您好,我叫陈祉伊,大连海洋大学计算机科学与技术专业 2027 届本科生。

我有两段比较完整的测试经历。一段是在北京多拓世纪做测试实习生,负责移动端 APP 的功能测试,从梳理业务测试点、执行用例、提缺陷,到跟进线上问题、和研发一起定位,完整走过一个版本周期。

另外我自己做过两个项目:一个是校园生活 APP 的测试,覆盖功能、接口和兼容性,用 Postman 测接口时发现了一个未登录也能拿到消息数据的越权问题;另一个是图书借阅的 Web 系统,用 Fiddler 抓包定位到借阅接口超时,配合后端调整了逻辑。

工具上我熟悉禅道、Postman、Fiddler,能用 MySQL 写 SQL 做数据校验,掌握等价类、边界值这些用例设计方法,Linux 和 Git 的命令也会用。

我比较喜欢测试这种「把问题挖出来」的工作,也习惯把缺陷描述写得让开发一眼能复现。所以想找一份测试相关的岗位长期做下去。
加分细节

说到「未登录也能拿到消息数据」时停顿半秒,让面试官接话——他一定会追问,你就掌握了主动权。

2.2 为什么想做测试?为什么不做开发?

别踩千万别说「因为我代码写得不好」「测试比开发轻松」。这两句直接出局。

参考答案

我实习的时候其实两边都接触过。开发是「从 0 把一个功能造出来」,测试是「从各个角度去质疑它、把它逼到边界上」,我发现自己对后者的敏感度更高——比如看到登录框,我会本能地想密码框能不能粘贴、验证码能不能复用、连续点五次会怎样。

另外我很享受缺陷被修复的那个闭环感。我在校园 APP 项目里发现的越权问题,从提缺陷到复测通过大概三天,那种「这个风险是我拦下来的」的感觉,比写完一个功能更让我有成就感。

当然我也知道测试要做长期,光靠兴趣不够,所以我在补自动化(Python + pytest/requests)和性能基础,想往技术型测试走。
2.3 你的优点和缺点是什么?

优点挑一个和岗位强相关的,然后立刻给证据。

「细心 + 有记录习惯。我习惯把每个测试点列成清单,执行一条划一条,因为漏测往往不是因为不会,而是因为忘了。图书借阅项目里我按「借阅数量、归还时间、权限、库存」四类拆了 60 多条用例,就是为了不漏。」

缺点说一个真实但不致命、且已在改善的。

「我目前比较明显的短板是自动化经验偏少,之前的测试主要是手工功能测试。我现在在学 Python 写接口自动化,用 requests + pytest 把校园 APP 的登录和消息接口写成脚本跑起来,也看过 Selenium 的元素定位,但还没到能独立搭框架的程度。」

反面示例

「我的缺点是太追求完美,有时候会钻牛角尖」——面试官听过一千遍,且和测试岗需要的「按时交付」相冲突,别用。

2.4 你的职业规划是什么?(3–5 年)

参考答案

短期 1 年:把业务吃透,能独立负责一个模块的测试,用例和缺陷报告的质量做到不需要别人返工。
2–3 年:往技术方向走,把接口自动化和性能测试补起来,能自己搭一套接口自动化的用例集,回归的时候能跑起来而不是全靠手点。
3–5 年:希望能做到测试负责人或者测试开发的方向,能对一个项目的质量负责,从需求阶段就开始参与,而不是等开发提测了才介入。

别踩不要说「我想先做测试,以后转产品/转开发」——任何一句「转岗」都会让你出局。

2.5 你为什么选择我们公司?

必须先做功课回答里必须出现这家公司具体的东西:产品名、行业、技术栈、规模。空话(「贵公司平台大、发展好」)等于没答。

岗位B(欧哈游,动漫/游戏类,20–99 人,自研小程序 + App)示例:

我看了一下,你们是做自研产品的,团队 20 到 99 人,测试这块应该不像大厂那样分得很细,一个人可能要覆盖从需求到上线的全流程。这其实是我比较想要的环境——我在多拓实习的时候也是跟着一个版本从用例写到上线验证,我更喜欢这种能完整参与、能自己推动事情的状态。

另外你们的产品是小程序加 App,我之前的项目正好是移动端 APP,兼容性和抓包这些我都做过,上手会比较快。
2.6 你遇到过最大的困难是什么?怎么解决的?

用 STAR情境、任务、行动、结果,重点在行动和可量化的结果。

S:图书借阅项目里,借阅接口偶尔超时,但不是每次都复现,开发一开始觉得是环境问题,不太愿意查。
T:我需要拿出能说服人的证据。
A:我用 Fiddler 抓了十几次借阅请求,把每次的耗时、请求参数、响应都记下来,发现规律是——同一本书在被多人同时借的时候容易超时,单人借基本正常,耗时从 200ms 涨到 5 秒以上。我把这个对比截图整理成一页说明,附上慢的那几次的请求参数,一起发给开发。
R:开发看了之后判断是并发情况下库存扣减那块的锁等待,改了逻辑,后面复测 20 次没有再现。
这题真正被考的是什么

不是你解决了多难的技术问题,而是「遇到推不动的事,你会不会用证据去推进」。这正是岗位A JD 里写的「推动问题及时合理的解决」。

2.7 你能承受加班 / 压力吗?

参考答案「版本上线前赶进度我完全可以配合,实习的时候有过连着几天跟版本、晚上等开发修完 bug 再复测的情况,我觉得这是测试岗的正常节奏。我抗压的方式是把事情拆小:先列清楚还有多少条用例、多少个待复测的缺陷、哪些是阻塞上线的,按优先级排,心里有数就不慌了。」

不要只答「能」,要给方法论,这样听起来是成熟而不是顺从。

2.8 你手上还有其他 offer 吗?什么时候能到岗?

其他 offer有就说有(但别说具体公司名去抬价,除非你确实想比价);没有就说「目前主要在推进几个方向,还没有到最终确认的阶段」——既不撒谎也不显得没人要。

到岗时间(实习生必答,且是考察重点)

我现在是大三(2027 届),课程主要集中在……,每周可以到岗 5 天,能连续实习 6 个月以上,如果学校有答辩安排我会提前跟您沟通,不会影响项目节奏。
注意

实习生岗位最怕的是「来了两个月就走」。能实习的时长和每周天数,比你的技术细节更决定你能否拿到 offer。回答前先算清楚你的课表,给一个你能守住的承诺。

2.9 你觉得自己最适合做测试的特质是什么?

三个词 + 各一个证据,说完就停:

  • 较真:看到「保存成功」的提示,我会去数据库里确认那条记录真的写进去了,而不是只看页面。
  • 有条理:习惯用清单和表格管理测试点,缺陷描述固定写「环境 / 前置条件 / 步骤 / 实际 / 期望 / 影响范围」六段。
  • 愿意沟通:缺陷被判定「不是 bug」时,我会去翻需求文档或者拉产品确认,而不是自己憋着或者直接放弃。

3简历深挖:项目追问(最高频战场)

简历上写了什么,就会被问什么。这一章按项目逐个拆,每题都给出「他在验证什么」+ 参考答案。

3.1 校园生活移动端 APP 测试(2025.11–2026.01)

技术栈:Postman、MySQL、禅道 · 成果:12+ bug、发现越权缺陷、多机型兼容性问题

必问3.1.1 介绍一下这个项目,你负责什么?

答题结构项目是什么(一句话)→ 我负责的范围 → 我怎么做的(方法)→ 结果(数字)。

校园生活 APP 是面向在校学生的移动端应用,包含注册登录、消息通知、校园服务、个人中心四个核心模块。我在里面做测试,覆盖功能、接口、兼容性三个维度。

功能上我主要负责登录、消息推送、校园服务三块,先按模块梳理测试点,再写用例,覆盖正常流程、异常输入和边界值;执行完之后用 MySQL 查库核对前端展示和数据的是一致的。

接口上用 Postman 测了登录和消息推送的核心接口,发现了一个未登录状态下访问消息接口仍然返回数据的安全问题。

兼容性上在几台不同安卓机型上跑,发现部分机型布局错乱和闪退。

整个过程用禅道管理缺陷,一共提了 12 个以上的 bug,按严重程度分了级,最后全部回归验证通过。
注意

这段是「主干」,后面所有追问都是从这里面长出来的。你主动提到的每个词,都必须能被追问三层(见后面各题)。

必问3.1.2 登录模块你会怎么设计测试用例?

他在验证你是否真的会用等价类、边界值,而不是背概念。这题答得好,后面一半的技术题都不用答了。

答题框架先分类,再逐类展开,最后补「非功能」维度。

维度具体测试点
1. 正常流程账号密码正确 → 登录成功、跳转正确、token 已保存;勾选记住密码后重进 APP 免登录
2. 账号输入(等价类+边界值)手机号:空 / 10 位 / 11 位 / 12 位;非数字;带空格;+86 前缀;不存在的号码
密码:空 / 5 位 / 6 位 / 20 位 / 21 位(超长);纯数字、纯字母、特殊字符
3. 异常组合账号对密码错、账号错密码对、都错;密码大小写敏感;密码前后空格是否被 trim
4. 安全类连续输错 5 次是否锁定/加验证码;密码是否明文传输(抓包看);token 是否有时效;退出登录后 token 是否失效;未登录直接访问需要鉴权的页面
5. 交互与体验密码框是否密文、能否切换明文;键盘弹出是否遮挡按钮;加载中有无 loading、能否重复点击提交(防重复提交);断网时的提示文案
6. 兼容与性能不同分辨率/系统版本下键盘与布局;弱网(2G/丢包)下的登录耗时与超时提示;登录接口响应时间
7. 数据一致性登录成功后查库:最后登录时间、登录次数是否更新;多端登录是否互踢
收尾话术

「实际项目里我没有一次做这么全,但有这个框架在,即使时间只够测一部分,我也知道该优先测哪部分——先保正常流程和账号密码的边界,再看安全类。」——这句会让面试官觉得你有优先级意识。

必问 · 你的王牌3.1.3 那个「未登录能访问消息接口」的缺陷,详细说说

这题一定要背熟这是你简历上含金量最高的一个点,答好了直接证明「你有安全意识、会用工具、能推动修复」。

完整叙事(按这个顺序讲):

  1. 怎么发现的:我在 Postman 里测消息列表接口时,习惯把登录接口返回的 token 那行先注释掉再发一次,看看服务端有没有做校验。结果发现不带 token 请求,接口照样返回 200,而且返回了消息列表数据。
  2. 确认不是误判:我又换了两个账号试,发现 A 账号不带 token 也能拿到数据;再试了消息详情接口,同样能拿到。说明不是某一个接口的问题,是这一批消息接口都缺鉴权。
  3. 影响评估:这意味着任何人只要知道接口地址和参数格式,就能拉到别人的消息内容,属于越权访问(未授权访问),严重程度我定的是「严重」,优先级「高」——因为它涉及用户隐私数据泄露,且不需要任何前置条件。
  4. 怎么提的缺陷:在禅道里写清楚环境、请求方法、URL、Header(说明未携带 token)、请求体、实际响应(200 + 数据)、期望响应(401 或 403)、影响范围、复现步骤,并附上 Postman 的请求截图。
  5. 开发怎么修的:在网关/拦截器层加了统一鉴权,token 缺失或失效直接返回 401;同时把 token 的校验从「只在前端判断」改成「服务端强制校验」。
  6. 怎么复测的:回归时我不只测了原来那两个接口,而是把消息模块所有接口都跑了一遍不带 token 的情况,另外补测了「带过期 token」和「带伪造 token」两种,确认都返回 401,才关闭缺陷。同时建议把这类「未授权访问」加进回归清单。
延伸知识点(他可能会继续问)

水平越权:A 用户能操作 B 用户的数据(改一下 userId 就能看别人的)。垂直越权:普通用户能调管理员的接口。

怎么测越权:① 不登录直接调接口;② 用 A 的 token 改请求体里的 id 为 B 的;③ 用普通账号的 token 调管理员接口;④ 篡改 token 里的用户标识(JWT 可 base64 解码后改 payload,看服务端是否验签)。

常见鉴权方案:Session + Cookie(服务端存状态)、Token(JWT,无状态,服务端验签+验过期)、OAuth2。

对应状态码:401 未认证(没登录/ token 无效)、403 已认证但无权限。

3.1.4 12 个 bug 都分布在哪些模块?最难的 / 最典型的是哪个?

他在验证数字是不是编的。回答必须具体到「模块 + 现象 + 原因」。

安全答法给出分布比例 + 挑 2 个讲透(不要报流水账):

大致分布是:登录注册 3 个、消息通知 3 个、校园服务 4 个、其余是兼容性和 UI 类。

比较典型的一个:消息推送在 APP 切到后台一段时间后再切回来,未读数不刷新,要点进消息页才更新。查下来是前端只在页面 onResume 时拉一次接口,而后台期间推送到达时没有更新本地未读数。这个严格说算设计问题,我提的时候写的是「建议优化」,但被开发接受了,改成了收到推送就更新角标。

最难定位的一个是闪退:某台较老的安卓机型上,进入校园服务里的某个二级页面会直接闪退,其他机型正常。这个我没法从现象直接看出原因,是通过 adb logcat 抓日志,看到报的是空指针,定位到是老系统上某个控件属性不支持导致的,把日志片段一起提给了开发。
为什么这样答好

「未读数不刷新」体现你会判断这是 bug 还是设计问题;「adb logcat 抓日志定位闪退」体现你不止会点,还会查。这两点是应届生里少见的。

3.1.5 兼容性测试怎么做的?机型怎么选?

参考答案

  • 怎么选机型:不是越多越好,按「覆盖度」选 —— ① 主流品牌各一台(华为/小米/OPPO/vivo);② 高低版本系统各一台(如 Android 10 和 Android 14);③ 不同屏幕分辨率/比例(刘海屏、挖孔屏、平板比例);④ 条件允许加一台低配机测性能。
  • 测什么:安装卸载、启动、页面布局(是否错位/被状态栏遮挡/文字截断)、功能可用性、控件响应、系统权限弹窗(相机、存储、通知)、深色模式、字体放大、横竖屏切换、与系统返回键的交互。
  • 工具:真机 + 云测平台(如 Testin、WeTest)批量跑兼容;adb 连真机看日志。
  • 结果处理:记录「机型 + 系统版本 + 现象 + 截图/日志」,同一现象在多机型出现就合并成一个缺陷并列出受影响机型。
这题容易被追问

「布局错乱你觉得是 bug 吗?」——答:要看设计稿。如果设计稿规定了尺寸而实际不符,是 bug;如果是小屏机型上合理的自适应收缩,不算 bug。这个回答能体现你不是「见到不一样就提 bug」。

3.1.6 你怎么用 MySQL 核对前后端数据一致性?写过哪些 SQL?

参考答案「最常用的是按业务主键去查。比如测完登录,我会查用户表看最后登录时间有没有更新;测完消息已读,查消息表看 is_read 字段是不是从 0 变成了 1;测完列表分页,会对比接口返回的 total 和 select count(*) 的结果是否一致。」

可能会让你现场写提前准备这 4 条:

-- 1. 查某个用户的登录信息是否正确落库
SELECT user_id, phone, last_login_time, login_count
FROM t_user WHERE phone = '15940645583';

-- 2. 核对消息已读状态是否更新
SELECT msg_id, user_id, is_read, read_time
FROM t_message WHERE user_id = 1001 ORDER BY create_time DESC;

-- 3. 对比接口返回的总条数与库里的实际条数
SELECT COUNT(*) FROM t_message WHERE user_id = 1001 AND is_deleted = 0;

-- 4. 查有没有重复数据(数据异常排查常用)
SELECT phone, COUNT(*) AS cnt FROM t_user
GROUP BY phone HAVING cnt > 1;
追问预警

「如果数据库里的数据和页面不一致,一定是前端的问题吗?」——不一定。可能是:① 前端没刷新/取了缓存;② 接口返回的数据被前端二次处理错了;③ 后端写库失败但接口返回了成功(事务没回滚);④ 读写分离,读的是从库延迟数据。这个四选一的回答非常加分。

3.1.7 禅道里一个缺陷从提交到关闭,都经过哪些状态?

参考

激活(Active) → 测试提交,指派给开发 → 开发确认后改为 已解决(Resolved),并填写解决方案(已修复 / 设计如此 / 重复 / 无法复现 / 延期 / 不予修复)→ 测试回归验证:通过则 关闭(Closed);不通过则重新 激活并指派回开发。

可能出现的分支:开发认为不是 bug → 转给产品/测试确认;需求变更导致 → 挂起或关闭;版本发布后发现的 → 记录到线上问题清单。

加分句

「我习惯在关闭前补一句复测结论,比如『v1.2.3 版本,Android 13 已复测通过,另补测了 token 过期场景』,这样后面查历史的时候能看明白。」

3.1.8 缺陷的严重程度和优先级怎么定?

关键区分严重程度(Severity)看影响,优先级(Priority)看要不要马上改,两者不一定一致。

等级定义例子
致命 / P0系统崩溃、数据丢失、核心流程完全阻断、安全漏洞APP 启动闪退;支付后订单未生成;未授权可拉取他人数据
严重 / P1主要功能不可用,无替代方案登录一直失败;借阅提交后无响应
一般 / P2次要功能异常,有替代路径消息角标不刷新;筛选条件失效
轻微 / P3UI、文案、体验类按钮对齐偏了;提示文案有错别字

「高严重 + 低优先级」的例子:某个极少使用的老机型上闪退——影响严重(崩溃),但用户量极小,可以排到下个版本修。

「低严重 + 高优先级」的例子:登录页的错别字——不影响功能,但首页第一眼就能看到,上线前必须改。

3.2 图书借阅 Web 管理系统(2026.03–2026.06)

技术栈:Postman、MySQL、Fiddler、禅道 · 成果:定位借阅接口超时、8 个高危缺陷、2 天内复测

必问3.2.1 借阅接口超时你是怎么排查的?

他在验证你的排查方法论,而不是「我发现了然后交给开发」。

答题模板:分层定位

  1. 先确认现象边界:是一直超时还是偶发?单人借还是多人同时借?换了账号/书也一样吗?(排除账号、数据个例)
  2. 抓包看请求本身:用 Fiddler 看这条请求的耗时明细、请求体大小、有没有重复请求、网络是否正常。(排除网络和前端)
  3. 看服务端:响应是「慢」还是「根本没返回」?如果是 504 且有响应体,说明服务端处理超时;如果一直 pending,可能是连接没释放。
  4. 缩小范围:同样的接口,参数简单(只借 1 本)时快,参数复杂(一次借多本)时慢 → 怀疑业务逻辑里有循环查询或大事务。
  5. 给出结论:我在并发借阅同一本书时必现,耗时从两百毫秒涨到五秒以上,怀疑是库存扣减时的锁等待或慢 SQL,把对比数据给到开发。
追问:Fiddler 里你具体看什么?

① Statistics:请求总耗时、DNS 解析、TCP 握手、等待响应各占多少;② Inspectors → Request:请求头(token、Content-Type)、请求体参数;③ Inspectors → Response:状态码、返回内容、错误信息;④ AutoResponder / Composer:可以改请求重发,模拟异常参数。

怎么区分前后端问题:接口响应很快但页面慢 → 前端渲染/资源问题;接口本身就慢 → 后端问题。

加分句

「后来我建议把『并发借同一本书』这个场景固定加进回归用例,因为这种问题只在并发下才暴露,手工单点测永远测不出来。」

必问3.2.2 借阅业务的核心测试点有哪些?

参考答案(按业务规则拆)

维度测试点
借阅数量普通用户上限(如 5 本):借 4 本可借、借第 5 本可借、借第 6 本应提示超限;已还书后额度是否释放;不同用户等级额度是否不同
归还时间借期 30 天:第 29 天归还正常、第 30 天当天归还、第 31 天应算逾期并产生罚金;逾期天数计算是否含首尾;跨月/跨年计算;续借后到期时间是否顺延
权限控制普通用户不能进后台管理页;不能删改他人借阅记录;管理员能管理图书但不能越权改用户密码;未登录访问借阅页应跳登录
库存一致性借出后库存 -1、归还后 +1、库存为 0 时不可借、并发借同一本书不能超卖、取消借阅后库存要回滚
重复与幂等快速点两次「借阅」会不会生成两条记录;刷新页面会不会重复提交;同一本书能否被同一人重复借
异常场景图书已下架/被删除仍可借?借阅过程中断网/退出登录;借阅时图书状态被管理员改为「停借」
这题的高分点

说出「并发借同一本书不能超卖」和「快速双击不能生成两条记录」——这两个是业务测试里最容易被漏、也最能体现深度的地方。

3.2.3 权限控制你是怎么测的?

参考答案「我按纵向和横向两个方向测。纵向是不同角色:普通用户、管理员、未登录,分别去访问对方的页面和接口,看有没有被拦住。横向是同一角色不同人:用 A 的登录态去请求 B 的借阅记录 id,看能不能拿到——这个如果没做校验就是水平越权。」

具体动作:

  • 前端层面:直接输 URL 访问后台页面 → 应该被重定向或提示无权限
  • 接口层面:用 Postman 拿普通用户的 token 调管理员的删除图书接口 → 应该返回 403
  • 参数层面:把请求里的 userId 改成别人的 → 应该返回无权限或空数据
  • 状态层面:退出登录后用旧 token 再请求 → 应该 401
常见认知错误

很多人以为「前端把按钮隐藏了就是做了权限」。要强调:前端隐藏只是体验,真正的权限必须服务端校验,绕过前端直接调接口才是检验方式。

3.2.4 「8 个高危业务缺陷」举例?为什么是高危?

准备 2 个能讲透的(建议就用下面这两个,和你前面讲的技术点呼应):

  • 库存超卖:两个人同时借同一本只剩 1 本的書,都借成功了,库存变成 -1。高危原因:直接造成业务数据错误,且用户已经拿到书,事后修数据成本高。
  • 越权查看他人借阅记录:改 URL 里的 id 就能看到别人的借阅历史和手机号。高危原因:隐私泄露。
  • (备选)逾期罚金算错:跨月计算时把两个月的天数算成 30 天,导致少收罚金。
  • (备选)归还后库存没回补:书还了但库存没加回去,导致后面的人借不到。

怎么定义高危「我的判断标准是三条:会不会导致数据错误、会不会影响核心流程走不通、有没有安全风险。满足任意一条我就标高危。」

3.2.5 Web 测试和 APP 测试有什么区别?

你有双端经验,这题必须答得比别人好

维度WebAPP
兼容性浏览器(Chrome/Edge/Safari/Firefox)+ 分辨率机型 + 系统版本 + 屏幕尺寸 + 厂商定制 ROM,成本高得多
安装/升级无需安装,刷新即最新安装、卸载、覆盖安装、强制/非强制升级、跨版本升级
专项测试基本没有弱网、中断(来电/短信/切后台)、耗电、内存、流量、权限、推送、横竖屏、手势
抓包浏览器 F12 / Fiddler 直接抓需要手机代理 + 装证书;HTTPS 要信任证书;部分 APP 有 SSL Pinning 抓不到
性能关注首屏加载、资源大小、接口耗时启动时间(冷/热启动)、内存占用、CPU、耗电、卡顿/掉帧、流量
发布随时发版,回滚容易需过应用商店审核,发版慢,回滚难 → 上线前测试要求更严
收尾

「所以 APP 的测试更依赖专项测试和真机覆盖,Web 更依赖浏览器兼容和回归效率。两边我都做过,切换起来主要是补专项那块。」

3.3 实习经历追问(北京多拓世纪)

必问3.3.1 实习期间你的一天 / 一个版本是怎么过的?

他在验证你是不是真的进过公司,而不是挂名实习。

版本开始是先参加需求评审,听产品讲这次要做什么,我会在那时候就把疑问记下来,比如某个状态在不同角色下怎么显示。

然后我负责的模块我去梳理测试点、写用例,写完给带我的同事过一遍,他会指出漏的地方。

开发提测后先跑冒烟,主流程通了再执行全量用例。发现问题就在禅道提,写完会自己再看一遍步骤能不能照着复现出来。

版本后期主要是回归——开发修完的缺陷逐条复测,最后一天做上线前的检查清单,包括关键流程、支付相关、埋点这些。上线后如果线上有反馈,会跟着一起复现定位。
「冒烟测试」是什么

提测后先跑一遍核心主流程(能不能登录、能不能下单),确认版本基本可用再投入人力做全量测试。冒烟不通过就打回,不让版本进入正式测试——这样能避免在垃圾版本上浪费时间。这是加分词,务必用上。

3.3.2 实习中印象最深的一件事 / 你犯过的错

「犯过的错」这题在考反思能力必须有真错,且必须有后来改了什么机制。

有一次我提的缺陷被开发打回,说复现不了。我回头一看,我写的是「点击按钮没反应」,既没写是哪个页面、什么账号、也没写清是点了没反馈还是报错。开发那边环境不一样,自然复现不了,来回沟通了两轮才说清。

这件事之后我固定了一个模板:环境(机型/版本/账号)+ 前置条件 + 操作步骤(编号)+ 实际结果 + 期望结果 + 附件(截图/录屏/日志),并且提交前自己照着步骤走一遍。后来基本没有被退回重写的了。
3.3.3 跟进线上问题是种什么体验?你做了什么?

参考答案「线上问题和测试阶段不一样,用户反馈往往只有一句『打不开』,信息很少。我的做法是先去捞日志、看有没有对应的报错,再按用户给的机型、时间、账号去复现。」

  • 先定级:影响面多大?是所有用户还是个别机型?核心流程还是边缘功能?影响面大就立刻升级给负责人。
  • 先止血再定位:能回滚就回滚、能开关就关掉入口,先让用户能用。
  • 定位后再修:把复现步骤和日志给研发。
  • 事后闭环:问一句「这个场景为什么测试阶段没覆盖到」,把它补进用例库。这是我最看重的一步。

3.4 通用技术基础(简历里写了,就一定会问)

必问3.4.1 完整说一下软件测试流程

标准答案

  1. 需求分析:读需求文档/原型,参加需求评审,找出需求里的歧义、遗漏、不可测的点,产出「测试需求」
  2. 测试计划:定范围、策略、资源、排期、风险(谁测什么、什么时候测完)
  3. 测试用例设计:用等价类、边界值、场景法、判定表等方法写用例,然后用例评审(测试、开发、产品一起过)
  4. 测试环境与数据准备:搭环境、造数据
  5. 冒烟测试:提测后先跑主流程
  6. 测试执行:按用例执行,记录结果,提交缺陷
  7. 缺陷管理与回归:跟踪修复,逐条复测,做多轮回归
  8. 测试报告:用例执行率、通过率、缺陷统计与分布、遗留问题与风险、是否可上线的结论
  9. 上线验证 + 复盘:发布后线上冒烟,事后复盘漏测原因
一句话版本(先给结论再展开)

「需求评审 → 测试计划 → 用例设计与评审 → 环境数据准备 → 冒烟 → 执行与提缺陷 → 回归 → 测试报告 → 上线验证。」

必问3.4.2 黑盒测试方法有哪些?等价类和边界值怎么用?

七种方法等价类划分、边界值分析、判定表、因果图、场景法(流程分析)、错误推测法、正交实验法。

等价类把输入分成「有效等价类」和「无效等价类」,每一类取一个代表值。目标是少测但不能漏。

边界值错误最容易发生在边界上,所以取边界本身和它两侧的值。

举例:密码 6–20 位

方法取值
有效等价类8 位(6–20 之间任意一个)
无效等价类5 位(<6)、21 位(>20)、纯空格、含非法字符
边界值5、6、20、21(四个点,最少要覆盖 6 和 20 这两个「刚好合法」的)
追问:「什么时候用场景法?」

业务流程类需求用它最合适,比如「借书 → 到期 → 续借 → 归还」。场景法分基本流(一路顺畅走完)和备选流(中途出错、回退、取消)。

3.4.3 一条好的测试用例包含哪些要素?

用例编号、所属模块、用例标题、优先级、前置条件、测试数据、操作步骤、预期结果、实际结果、测试人/时间、备注。

好坏的标准(这句能加分):

  • 可执行:换一个人照着步骤也能跑,不需要问作者
  • 可判定:预期结果是明确的,「显示正常」不合格,要写「显示『登录成功』并跳转首页」
  • 独立:一条用例只验证一个点,失败时能直接定位
  • 可复用:能在下个版本回归时直接跑
3.4.4 接口测试你是怎么做的?关注哪些点?

答题顺序先讲流程,再讲关注点,最后讲工具。

流程:拿到接口文档(URL、方法、参数、返回结构)→ 设计用例 → 在 Postman 里配置环境和变量 → 发请求 → 校验状态码 + 响应体字段 + 数据库 → 异常场景。

关注点(按这个清单说):

  • 正常:必填参数齐全、类型正确,返回是否与文档一致
  • 参数校验:必填不传、传空、传 null、类型错(字符串传数字)、超长、特殊字符、SQL 注入字符串
  • 鉴权:不传 token、传错误 token、传过期 token
  • 业务异常:库存不足、余额不足、重复提交(幂等)
  • 边界:分页 page=0、pageSize=1000;金额 0、负数
  • 性能:响应时间是否在可接受范围
  • 数据一致性:接口返回成功,库里是否真的写进去了
常用 HTTP 状态码

200 成功 · 201 创建成功 · 301/302 重定向 · 400 参数错误 · 401 未认证 · 403 无权限 · 404 资源不存在 · 405 方法不允许 · 500 服务端错误 · 502 网关错误 · 504 网关超时

GET 和 POST 的区别

GET 参数在 URL 上、有长度限制、可被缓存和书签、幂等;POST 参数在 body 里、无长度限制、不缓存、非幂等。安全性上都不加密,别信「POST 比 GET 安全」这种说法。

3.4.5 Cookie、Session、Token 的区别?
  • Cookie:存在浏览器端的一小段数据,每次请求自动带上。本身不安全,可被篡改。
  • Session:存在服务端,用 sessionId 关联(sessionId 一般放在 Cookie 里)。服务端有状态,集群下需要共享(如存 Redis)。
  • Token(JWT):服务端签发、客户端保存(Header 或 localStorage),服务端不存状态,靠验签和过期时间校验。适合分布式和多端。

测试视角「我会关注:token 过期后是否跳登录、退出登录后旧 token 是否失效、多端登录是否互踢、token 在请求头还是 URL(放 URL 会留在日志里,有风险)。」

3.4.6 你熟悉哪些 Linux 命令?

面试只说「会 cd ls」等于不会要说「我用它干什么」:

场景命令
看日志、找报错tail -f app.log、grep -n "ERROR" app.log、grep -C 3 "NullPointer" app.log
看服务状态、端口ps -ef | grep java、netstat -tunlp | grep 8080
看磁盘/内存/CPUdf -h、free -m、top
找文件、算行数find / -name "*.log"、wc -l app.log
看文件内容cat、less、head -100

加分「定位问题时我一般先 tail -f 挂着日志,操作一次页面看日志有没有新报错,再去 grep 关键字找上下文。」

4岗位A · 测试工程师(要求 2 年经验)

JD 关键词:规范、独立完成、资材整理记录、定期汇报、缺陷推动、新旧业务梳理、项目总结。这是一个「要能自己扛一个模块、并且把过程管起来」的岗位——他们真正怕的是招个只会执行不会负责的人。

4.1 【生死题】我们要求 2 年以上经验,你只有 3 个月实习,怎么胜任?

最高风险先承认,再换维度,最后给承诺
三种必死答法

① 「我学习能力很强,很快就能上手」——空话,没有证据。
② 「虽然我没经验,但我可以不要那么高工资」——把自己贬成廉价劳动力。
③ 「不就是点点功能吗,我觉得 3 个月够了」——否定对方的用人标准,直接出局。

正确结构:承认差距(10%)→ 用经历密度替换年限(60%)→ 用可验证的东西背书(20%)→ 给承诺(10%)

我先说实话:我确实没有两年正式工作经验,我目前是大三,只有一段三个月的实习加两个完整项目。年限这一条我不占优势,这个我认。

但我想说一下我实际做的事情的密度。在多拓实习那三个月,我不是只跟着点功能——我带的是移动端 APP 的一个版本,从需求评审开始参与,自己梳理测试点、写用例、执行、提缺陷、跟回归,版本上线后还跟过线上问题。也就是说一个版本从需求到上线的完整链路我走过,不是只做了其中的执行环节。

另外两个项目是独立做的。校园 APP 那个,从梳理模块到提 12 个缺陷、包括那个未登录就能拉到消息数据的越权问题,全流程都是我自己推的;图书系统那个,借阅接口超时是我用 Fiddler 抓了十几次请求、整理出对比数据之后推动开发去改的。

所以我缺的是年限,不是从 0 到 1 走完一个版本的次数。如果贵司这个岗位更看重「能不能独立把一件事跟到底」,我觉得我可以试;如果是必须有两年积累才能处理的复杂系统,我也想知道具体是哪部分,我可以针对性补。
为什么这样答有效

① 承认让对方放下戒心,不再追问漏洞;② 「版本完整链路」是年限的本质替代品——2 年经验的人强在「见过多个版本」,你把一个版本讲透就等价;③ 最后的反问把球踢回去,显得自信而不是心虚。

备用弹药(如果对方继续追问)

  • 「我实习期间一共执行了多少条用例、提了多少缺陷、复测了多少条」——数字越具体越可信
  • 「我可以先做一个试用期,如果一个月内达不到您的预期,我自己会说明」——愿意被验证
  • 「我现在每周可以到岗 5 天,能长期实习到毕业,如果双方合适我希望能转正」——解决他们的用工顾虑

4.2 你怎么做需求分析?产出什么?

JD 原文需求分析是他们写进职责的第一项

他在验证你是不是「拿到需求就照着点」,还是真的会先想清楚。

答题框架:三步

  1. 读懂:逐条读需求文档和原型,把业务流程画一遍(谁、在什么条件下、做什么、结果是什么),画不出来说明没读懂。
  2. 找问题:重点看四类——歧义(「适当提示」是多长时间)、遗漏(异常情况怎么处理、失败了怎么办)、冲突(和新功能/旧功能有没有矛盾)、不可测(没有明确预期结果就没法判断对错)。
  3. 产出:① 一份测试需求/测试点清单(按模块列出要验证什么);② 一份需求疑问清单,在需求评审会上逐条问清楚,会后邮件/文档留档;③ 一份影响范围分析(这次改动会影响哪些老功能)。
加分句

「我习惯在需求评审的时候就把问题问掉,因为那时候改需求成本最低。等到提测了再说『这个需求没写清楚』,开发已经做完了,返工成本就很高了。」

对应知识点:测试左移

把质量活动往前移到需求和设计阶段,越早发现问题的修复成本越低(业界常引用的比例是:需求阶段发现问题的修复成本是上线后的 1/100)。测试左移的具体做法:参与需求评审、做需求可测性分析、提前设计用例、参与设计评审。

4.3 测试计划应该包含什么?

常问考的是「你有没有全局观」

六要素

部分内容
测试范围这次测什么、不测什么(明确不测的部分更重要,避免背锅)
测试策略功能/接口/兼容/性能各做到什么程度;手工还是自动化;重点风险在哪
资源与分工谁负责哪些模块、需要几台设备、什么环境
进度安排用例设计 → 评审 → 提测 → 执行 → 回归 → 上线,每段的时间点
准入准出标准准入:冒烟通过才进测试;准出:用例执行率 100%、遗留缺陷满足条件(如无 P0/P1)、回归通过
风险与应对提测延期怎么办、人手不足怎么办、环境不稳定怎么办

诚实处理如果没独立写过完整测试计划就直说:「完整计划我没独立写过,但实习时参与过排期,也看过同事的计划,我理解结构是这几块。」——不要编。面试官一追问细节就露馅。

4.4 JD 里「对执行过程进行资材整理和记录」指的是什么?

JD 原文这题能看出你懂不懂「测试资产」

拆解「资材」= 测试资产,包括:

  • 用例库:按模块归档、编号规范、可复用,下个版本能直接拿来回归
  • 缺陷记录:禅道里的缺陷单、统计、分布
  • 测试数据:账号、造数脚本、初始化 SQL
  • 环境信息:测试环境地址、版本号、配置说明
  • 执行记录:哪条用例什么时候跑的、结果如何、谁跑的(可追溯)

参考答案「我的理解是测试过程要可追溯、可复用。可追溯是指任何一个结论都能查到依据——这个功能测过没有、什么时候测的、谁测的;可复用是指用例、数据、环境这些下个版本还能用,不用每次从零开始。我在项目里会按模块建用例目录,缺陷单写全六要素,测试数据单独存一份说明,这样别人接手也能看明白。」

4.5 你怎么「主动定期汇报工作进展」?

JD 原文考的是沟通主动性和风险意识

参考答案「我的习惯是分两层:日常同步和节点汇报。」

  • 日常:每天在群里同步一句——今天测了什么模块、执行多少条、提了几个 bug、有没有阻塞。有阻塞当天就抛出来,不憋到最后一天。
  • 节点:用例设计完、测试执行过半、上线前,各做一次阶段性汇报。
  • 汇报结构:进度(计划 vs 实际)+ 质量(缺陷数量、严重程度分布、是否收敛)+ 风险(哪些没测完、哪些缺陷没修完、会不会影响上线)+ 需要支持(要谁配合做什么)。
关键认知(说出来很加分)

「我觉得汇报最重要的不是报告好消息,而是把风险提前暴露。如果到上线前一天才说『还有 20 条用例没跑完』,那就是我的问题;如果我提前三天就说『按现在进度上线前跑不完,建议砍掉某部分或者加人』,这个决策就是团队一起做的。」

4.6 一条「条理清晰、能辅助研发定位」的缺陷应该怎么写?

JD 原文 · 高含金量现场可能让你写一条

六要素 + 两个附加

要素说明
标题「【模块】+ 操作 + 现象」,一眼看懂。例:【消息中心】未登录状态下调用消息列表接口仍返回全部消息数据
环境机型/系统版本/APP 版本/账号/环境(测试还是预发)
前置条件要先把状态造成什么样才能复现
复现步骤编号,一步一个动作,不要合并
实际结果客观描述,不带主观判断(不要说「很严重」,要说「返回 200 + 20 条消息」)
期望结果依据是什么(需求文档第几条 / 常理)
附件截图、录屏、抓包、日志
影响范围哪些机型/账号/场景受影响,是否必现
示范一条(可以直接背):
标题:【消息中心】未登录状态下请求消息列表接口,仍返回用户消息数据
环境:测试环境 v1.2.3 / Android 13 / 小米 12 / 账号 13800000000
前置条件:该账号有 3 条未读消息
步骤:1. 打开 Postman,选择 GET /api/v1/message/list;2. Header 中不携带 Authorization 字段;3. 点击 Send
实际:返回 HTTP 200,响应体中包含 3 条消息的完整内容(含标题、正文、发送人)
期望:返回 HTTP 401,提示未登录/登录已失效
影响:必现。消息列表、消息详情两个接口均存在,可越权获取任意用户消息
附件:Postman 请求响应截图 2 张
为什么这条好

开发看完不需要问任何一句话就能复现,甚至能直接看出问题在「拦截器没覆盖到这个接口」。这就是 JD 里说的「辅助研发人员跟踪缺陷」。

4.7 让你梳理一个老系统的业务和功能,你会怎么做?

JD 原文「新旧业务需求与功能梳理分析」——这是资深岗的活

他在验证你有没有「从执行者到分析者」的意识。

四步法

  1. 摸清全貌:先看菜单和页面结构,画出功能地图(一级模块 → 二级功能 → 具体页面)。这一步不求深,求全。
  2. 理清业务流:挑核心链路(如「用户注册 → 借书 → 归还」)走一遍,画流程图,标出关键状态和判断条件。业务流程比功能列表更重要,因为 bug 往往出在流程的衔接处。
  3. 建立对应关系:把「功能」和「业务规则」对上——这个页面背后有哪些规则(额度、时限、权限)。做成一张功能-规则矩阵,这张表就是以后回归测试的底稿。
  4. 标注变更影响:新需求来了,对着这张表判断「这次改动会影响哪几个功能、哪些老功能要回归」。这是梳理老系统最实际的用途。
加分收尾

「梳理的产出我希望能变成可复用的资产——功能地图给新人看,规则矩阵当回归清单,变更影响分析用来定回归范围。不然梳理完就放那了,没意义。」

4.8 测试总结 / 项目复盘怎么写?

JD 原文「参与进行测试项目总结及业务个人总结」

项目总结四块

  • 数据:用例数/执行率/通过率、缺陷总数、按模块和严重程度分布、修复率、平均修复时长、遗留问题
  • 结论:本版本质量如何、是否可以上线、遗留风险是什么
  • 问题:哪些环节卡住了(提测质量差、需求变更频繁、环境不稳定)
  • 改进:每个问题对应一个具体动作(如「提测前要求开发自测并附自测清单」),并指定下版本落地

个人总结「我一般写三件事:这个版本我做得好的、做得不够的、下个版本要改的一个具体习惯。比如上个版本我发现自己的用例在『异常中断』这类场景覆盖不足,下个版本我就在用例模板里加了一栏『中断/异常』强制自己填。」

4.9 开发说「这不是 bug,是需求就这样」,你怎么办?

高频考的是推动力 + 分寸感

四步,别跳步

  1. 先自查:翻需求文档和原型,确认自己没理解错。有明确依据就直接贴出来(「需求文档 3.2 写的是 X」)。
  2. 找第三方:需求没写清楚 → 拉产品确认。产品说按现在这样,那就是需求问题,我把缺陷关掉并备注「产品确认按现设计」;产品说应该是 X,那这就是 bug。
  3. 讲影响不讲对错:不说「你做错了」,说「这个情况下用户会看到 XX,可能导致 XX 后果,你看要不要处理」。把问题从「谁对」转成「影响多大」。
  4. 留痕 + 升级:达不成一致就先记录(缺陷挂起并写清分歧点),在测试报告里列为「遗留风险」,由负责人决策。不要自己默默吞掉,也不要越级告状。
一句话总结(背下来)

「我的原则是不为了赢而争,但也不让风险消失。争不出结果的事,我会把它写进风险清单,让有决策权的人知道,而不是我替他们决定。」

4.10 时间不够、测不完,怎么办?

高频这题答「加班测完」是下策

参考答案:风险驱动

  1. 先保核心:按「用户使用频率 × 影响严重程度」排优先级,主流程、支付、登录这类先测,边缘功能和 UI 往后放。
  2. 砍范围不砍质量:明确说「这几块这次测不到」,而不是「都测了但都只点了一遍」。
  3. 提高效率:把重复性的回归用接口自动化或脚本替代;用等价类减少冗余用例。
  4. 提前暴露:在还有时间解决的时候说「按这个进度会漏掉 X 模块」,让团队决定是加人、延期还是砍需求。
  5. 记录下来:风险清单写进测试报告,上线后重点监控那部分。
不要说

「我会加班加点全部测完」——面试官会觉得你没有优先级概念,而且这种承诺在实际工作中会导致更严重的漏测。

4.11 你怎么衡量测试工作的价值?

加分题能答这题说明你在用管理视角看测试

参考答案「我觉得不能只用『提了多少 bug』来衡量,因为 bug 多可能是版本质量差,而不是测试厉害。我更看三个指标:」

  • 缺陷逃逸率:上线后发现的缺陷数 ÷(测试阶段 + 上线后发现的总数)。这个低,说明测得住。
  • 缺陷有效性:提的缺陷里被开发认可并修复的比例。这个高,说明不是瞎提。
  • 回归效率:同样范围的回归,这版用了多久。这个降,说明资产(用例、脚本)在起作用。

「还有一个不太好量化但我很在意的:开发愿不愿意提前找我聊需求。如果他们做之前会问一句『这个你怎么看』,说明测试已经往前站了。」

4.12 岗位A 知识点补充

三类测试的区别
  • 冒烟:提测后跑主流程,判断版本能不能测
  • 回归:改动后验证老功能没被改坏,范围由影响分析决定
  • 探索性测试:不写用例,边学边设计边测,靠经验和直觉挖深层问题
准入 / 准出标准
  • 准入:冒烟通过、开发自测完成、环境可用、需求文档齐全
  • 准出:用例执行 100%、无 P0/P1 遗留、P2 有明确计划、回归通过、测试报告已出
测试左移 / 右移
  • 左移:参与需求评审、可测性分析、代码评审、单元测试
  • 右移:上线后监控、日志告警、灰度观察、线上问题复盘
质量度量指标
  • 用例覆盖率、缺陷密度、缺陷逃逸率、缺陷修复时长、平均无故障时间
  • 别只报「提了多少 bug」,要报「漏了多少」

5岗位B · 欧哈游 测试实习生(小程序 + App)

画像:上海欧哈游动漫科技,20–99 人,未融资,计算机服务,自研项目、非外包非派遣。标签:性能测试 / 压力测试 / 功能测试。要求 2027 届。

先读懂这家公司在想什么

20–99 人的自研团队,测试大概率只有 1–2 个人。他们写的「能够独立并主动推动测试任务」「与开发团队紧密合作,确保缺陷及时被发现和解决」,翻译过来是:没人天天带你,你要自己找活干、自己盯进度、项目要按时上线。

所以这个岗位的胜负手不是技术深度,而是:① 你能不能立刻上手 ② 你能实习多久 ③ 你会不会自己推动事情。技术题答得中等但表现出「靠谱、能扛、待得久」,比技术满分但两个月就走更容易过。

5.1 你测过小程序吗?小程序和 App 测试有什么区别?

最高频如果你没测过小程序,怎么答

不要硬编「我测过小程序」很容易被一句「那你用什么工具看的?真机调试怎么开的?」问穿。

诚实 + 迁移 + 已自学,三段式

诚实:我之前测的主要是原生 APP 和 Web 系统,小程序没有在项目里正式测过。

迁移:不过小程序的测试思路和 APP 功能测试是通的——需求分析、用例设计、缺陷管理这些方法论完全一样,工具链也是一套(抓包、查库、禅道)。差异主要在专项部分:小程序不用安装,但有包体积限制、有审核、依赖微信的登录和分享,还有开发者工具可以真机调试。

已自学:这几点我提前看了——比如小程序主包有 2MB 的限制,超了要分包;登录是走微信授权拿 code 换 openid,所以我会重点测「拒绝授权」「授权后取消」「换手机登录」这些场景;抓包可以用微信开发者工具的 Network 面板直接看,也可以用 Charles/Fiddler 走代理。

承诺:我上手应该很快,因为测试流程和 APP 是一样的,我要补的只是小程序特有的那些点。
为什么这样答比硬编好

面试官能接受「没做过但研究过」,不能接受「被拆穿的谎」。而且你最后那句把差异点具体化了,可信度远高于空口说「我学习能力强」。

5.2 小程序和 App 的测试差异,具体有哪些?

知识点背这张表就够
维度小程序原生 App
安装无需安装,扫码/搜索即用,用完即走需下载安装,有安装包大小
更新发版即更新,用户无感;但本地有缓存,可能拿到旧版本需应用商店审核,有强制/非强制升级
体积限制主包 2MB,总包 20MB(可分包)——资源要压缩、图片走 CDN一般几十到上百 MB,受限较小
登录微信授权(code 换 openid/unionid),可拿头像昵称;需测拒绝授权、取消、多端同步手机号/密码/第三方 SDK
分享分享到聊天/朋友圈(朋友圈需特定条件),分享卡片标题、图片、路径要单独测系统分享面板
支付微信支付,需真实商户号或沙箱;测支付成功/取消/失败/掉单/重复支付微信/支付宝/苹果内购
兼容性微信版本 + iOS/Android + 机型 + 屏幕,主要看微信基础库版本差异系统版本 + 机型 + ROM
调试微信开发者工具(可看 Network、Storage、WXML)+ 真机调试 + vConsoleAndroid Studio / Xcode / adb logcat
权限受微信管控,弹窗样式固定;不能随意调系统权限可申请各种系统权限
上线提审 → 微信审核(1–7 天)→ 发布;审核有规范红线应用商店审核
后台/中断切后台一段时间会被微信回收,回来会重新加载——要测状态丢失可长期驻留后台
最容易说的两个差异(一定要提)

① 切后台被回收:小程序在后台停留久了会被微信销毁,用户切回来是重新打开的,如果业务有「填写到一半」的场景(如填表单),数据会丢——这是小程序特有的高发 bug。

② 缓存导致版本不一致:发了新版本但用户本地缓存还是旧的,会出现「我这边好好的,用户那边报错」——所以要测「强杀后重进」「清除缓存后重进」。

5.3 小程序的授权登录你会怎么测?

场景题考察你是否想过真实用户路径

先讲流程点击登录 → 调 wx.login() 拿 code → 后端用 code + appid + secret 换 openid/session_key → 生成业务 token 返回 → 前端存起来。

再讲测试点

  • 首次登录:弹出授权框 → 允许 → 登录成功、信息正确落库
  • 拒绝授权:点拒绝后是否还能浏览基础内容?再点登录是否会重新弹?会不会卡死在不允许就进不去的死循环?
  • 取消:弹窗直接关掉
  • 已授权再次登录:是否免弹窗直接登录
  • 在微信设置里删除授权后再进入:是否重新要求授权
  • 换设备/换微信号:同一微信在不同手机登录,数据是否同步;不同微信登录是否串号
  • code 只能使用一次:重复用同一个 code 请求应该失败
  • token 过期后:是否静默刷新或跳登录,不能白屏
  • 退出登录后再进:旧 token 是否失效
  • 请求头伪造/不带 token 调需要登录的接口 → 应 401
加分

「拒绝授权这条我特别在意,因为很多小程序会做成『不允许就不能用』,但微信的规范要求不能强制授权才能使用基础功能,这既是体验问题也是审核风险。」

5.4 性能测试和压力测试,你了解多少?

JD 标签简历只写了「了解基础概念」,必须补到能说

第一步:分清楚三种

类型目的
负载测试逐步加压,找到系统能承受的最大负载(正常范围内的极限)
压力测试超过极限继续加压,看系统会不会崩、崩了能不能恢复
并发测试同一时刻大量用户做同一操作,看有没有资源竞争(如超卖、死锁)
稳定性测试长时间(如 8 小时)中等压力跑,看内存泄漏、连接泄漏

第二步:四个核心指标(必须能脱口而出)

  • 并发数 / 线程数:同时发请求的用户量
  • TPS / QPS:每秒处理的事务数/请求数,衡量处理能力
  • 响应时间(RT):一般看平均、90%、99% 分位(P99 比平均值更能反映真实体验)
  • 错误率:失败请求占比,一般要求 < 1% 甚至 0
  • 辅助:CPU、内存、磁盘 IO、网络带宽——用来判断瓶颈在哪

第三步:JMeter 怎么做(说出组件顺序)

测试计划 → 线程组(设线程数、Ramp-Up 时间、循环次数)→ HTTP 请求(配协议、域名、路径、参数、Header)→ 断言(校验响应码和内容)→ 监听器(聚合报告、察看结果树)。
要模拟登录态的话,加一个「HTTP 请求」先登录,用JSON 提取器或正则把 token 取出来存成变量,后面的请求引用这个变量。
需要参数化就用 CSV Data Set Config 读测试数据。
被追问「你做过性能测试吗?」

不要谎称做过完整压测。答:「完整的性能测试我没做过,我做的是接口层面的耗时观察——用 Postman 和 Fiddler 看单个接口的响应时间,发现过借阅接口在并发时从 200ms 涨到 5 秒。JMeter 我自己搭过环境,能跑通『线程组 + HTTP 请求 + 聚合报告』这种基础脚本,但还没做过完整的场景设计和瓶颈分析。这块是我进来之后最想补的。」

诚实 + 有基础动作 + 明确学习意愿,这个组合在小公司面试里通常没问题。

小程序的性能关注点(不一样的)

小程序除了接口性能,还要看:首屏加载时间、小程序启动耗时、页面切换流畅度(掉帧)、setData 数据量过大导致的卡顿、图片资源大小、主包体积。这些在微信开发者工具里都能看到(体验评分、Trace 面板)。

5.5 弱网怎么测?

专项题移动端必问

怎么造弱网① 手机自带网络模拟(部分安卓开发者选项);② Charles / Fiddler 的限速功能(设置带宽和延迟,模拟 2G/3G/丢包);③ 专门的弱网工具(如 Network Link Conditioner);④ 真机进电梯/地下室实测。

测什么

  • 加载慢时有没有 loading 提示、有没有骨架屏,用户知不知道在等
  • 超时设置是否合理,超时后有没有友好提示和重试入口
  • 弱网下重复提交:网络慢用户会连点,会不会下两个单/借两次书
  • 弱网切换到 4G/WiFi 时,请求会不会中断、页面会不会白屏
  • 弱网下的数据一致性:请求发出去了但响应没回来,实际后端成功了没有
联系你的经历

「我在 APP 项目里测过弱网下的登录,发现网络差的时候点登录没有任何反馈,用户会以为没点上继续点,后来提了加 loading 和按钮置灰的建议。」——有具体例子就不像背书。

5.6 「确保项目平稳上线」,你会做哪些事?

JD 原文这题决定他觉得你「靠不靠谱」

按时间轴答,显得有条理

  1. 上线前:核心流程全量回归 + 上一版本线上问题的回归验证 + 兼容性抽查 + 上线检查清单(版本号、开关配置、域名指向、埋点)。
  2. 上线时:如果有灰度/白名单,先小范围放量,观察错误率和反馈;准备好回滚方案。
  3. 上线后:马上做一轮线上冒烟(用真实账号走主流程),盯日志和告警 30 分钟到 1 小时,看崩溃率、接口错误率。
  4. 出问题:先回滚止血,再定位,再修复重发——顺序不能反。
加分句

「我理解的『平稳上线』不是『没出问题』,而是出了问题能快速发现、快速回退。所以我会特别关注两件事:上线检查清单有没有漏项,回滚方案是不是真的可行。」

5.7 「独立并主动推动测试任务」——举个例子

JD 原文必须有一个「没人要求你做,但你做了」的故事

参考答案(用你真实的素材改编)

在多拓实习的时候,我发现每次回归都要手工把登录、消息、校园服务的主流程点一遍,很花时间,而且容易漏。没人要求我做这件事,但我觉得这是个明显的浪费。

我就把这几条主流程整理成了一份冒烟检查清单,大概十几条,每条写清楚操作和预期结果,放在共享文档里。后来每次提测,谁有空谁就照着清单跑一遍,二十分钟能出结论,比之前快很多。

这件事之后我带我的同事会把一些梳理的活直接交给我,因为他知道我会主动想「怎么让这件事更省事」。
这题的核心公式

发现低效 → 没人要求 → 我自己做了 → 有具体产出 → 别人开始依赖这个产出。「主动」的证据不是「我很主动」,是「我做了一个别人后来在用的东西」。

5.8 如果团队只有你一个测试,你怎么安排?

小公司必问在探你会不会慌

参考答案「一个人做测试,最怕的是什么都想测、结果什么都没测透。我的做法是:」

  • 先定底线:列出「上线绝对不能出问题的功能」,这部分每次必测、测透。
  • 建立资产:用例库、冒烟清单、上线检查清单先建起来——一个人的时候,靠流程和文档弥补人手的不足。
  • 借力:推动开发自测(提测前跑一遍自测清单)、推动产品在需求阶段把规则写清楚,这些都是不花钱的「测试资源」。
  • 提效:把重复的回归用接口自动化或脚本跑,人只做需要判断的部分。
  • 管住风险:明确告诉负责人「以现在的人手,这块我保不住,需要你决策」——不要一个人硬扛到上线爆炸。

5.9 「你是 2027 届,能实习多久?一周几天?」

决定性问题答不好,技术再强也没用

参考答法(先算清自己的课表再答)

我现在大三上,课主要集中在这学期,每周可以到岗 4–5 天,能连续实习 6 个月以上,寒暑假可以全勤。如果学校有考试或者答辩,我会提前两周跟您报备,尽量不影响版本节奏。

我个人是希望长期做的,如果实习期间双方都合适,我也希望能留下来。
别踩三个坑

① 「我看看课表再说」——显得没准备;
② 「只能来两天」——大概率直接淘汰,除非对方明确接受兼职;
③ 「我随时都能来」——过于绝对,后面请假反而失分。给一个有边界、能守住的承诺最可信。

5.10 我们是做动漫/游戏相关产品的,你了解吗?

业务理解小公司很在意「你是不是随便投的」

面试前必须做去应用商店/微信搜一下他们的产品,实际用 10 分钟,记下 3 个你觉得可以改进的点。

参考框架「我看了你们的小程序/APP,主要做 XX。我注意到两点:一是 XX 页面的加载有点慢,二是 XX 操作的路径比较长。如果我来测,我会先重点看这块。」

为什么有效

这句话同时证明了:你真的用过产品、你有用户视角、你已经在用测试的眼睛看东西。比任何自我评价都有说服力。

5.11 岗位B 知识点补充

APP 专项测试清单
  • 安装/卸载/覆盖安装/跨版本升级
  • 启动(冷启动/热启动)耗时
  • 中断:来电、短信、闹钟、切后台、锁屏
  • 网络切换:WiFi ↔ 4G ↔ 无网
  • 权限:首次申请、拒绝后再申请、去设置里改
  • 推送:前台/后台/杀进程后能否收到
  • 耗电、内存、流量、卡顿
adb 常用命令(说得出就够)
  • adb devices 查设备
  • adb install / uninstall
  • adb logcat 看日志(闪退必用)
  • adb shell dumpsys meminfo 包名 看内存
  • adb shell am start 启动页面
  • adb shell screencap 截图
常见崩溃原因
  • 空指针、数组越界、类型转换异常
  • 主线程做耗时操作 → ANR(应用无响应)
  • 内存泄漏 → OOM
  • 机型适配:控件属性不支持、分辨率越界
小程序特有风险点
  • 切后台被回收 → 页面状态丢失
  • 本地缓存 → 版本不一致
  • 主包 2MB 限制 → 资源加载失败
  • 分享路径参数丢失 → 打开白屏
  • 微信基础库版本差异 → API 不兼容

6岗位C · 测试实习生 J14829(SQLServer + 自动化)

JD 关键词:功能测试、自动化测试、掌握软件测试理论和流程、熟悉 SQLServer 数据库、掌握 SQL 语言、编写测试分析报告、计算机/软件工程/网络工程专业优先、参加过测试培训者更佳、2027 届。

这个岗位在挑什么样的人

它比岗位B 更「正规」——要求「掌握软件测试理论和流程」「编写测试分析报告」「熟悉 SQLServer」,说明团队有比较规范的流程,测试要写文档、要查库。
关键词「参加过软件测试培训者更佳」暗示:他们预期候选人是零基础或半基础,愿意培养。所以你的回答重点应该是:理论扎实(等价类/边界值说得清)、文档能写(报告结构清楚)、SQL 能写(这是硬门槛)、自动化有学习动作。

6.1 你学过自动化测试吗?

JD 标签诚实 + 展示学习路径 + 有动手证据

别答「没学过」四个字就结束,也不要吹「我很熟 Selenium」。

参考答案

系统学还没有,但我已经开始动手了,想跟您说说我做到哪一步。

理解上:我知道自动化一般分三层——单元测试、接口自动化、UI 自动化。性价比最高的是接口自动化,因为 UI 变化频繁、维护成本高,而接口相对稳定,适合做回归。

动手上:我用 Python 的 requests 库写了脚本,把之前项目里的登录接口和消息列表接口串起来跑,用 pytest 管理用例,断言就校验状态码和返回体里的关键字段。目前能跑通,但还没有做数据驱动和报告生成。

没做到的:UI 自动化我只看了 Selenium 的元素定位(八种方式)和基本操作,没写过完整脚本;框架层面(比如封装、参数化、持续集成)我还不会。

所以我的状态是:能看懂、能写简单的接口脚本、知道该往哪走,但还不能独立搭一套。这块我很想在实习里补上。
这个答法为什么好

「理解层 → 动手层 → 边界层 → 态度层」四段。主动说出「没做到的」反而让面试官相信你说的「做到的」是真的。

6.2 你用 Python 写过什么?

简历提到 Python 课程准备一个具体的小东西

推荐准备两个(都不难,今天就能写出来)

① 接口自动化小脚本:

import requests, pytest

BASE = "http://test.api.com"

def test_login_success():
    r = requests.post(f"{BASE}/api/login",
                      json={"phone": "13800000000", "pwd": "123456"})
    assert r.status_code == 200
    assert r.json()["code"] == 0
    assert "token" in r.json()["data"]

def test_login_wrong_pwd():
    r = requests.post(f"{BASE}/api/login",
                      json={"phone": "13800000000", "pwd": "wrong"})
    assert r.json()["code"] != 0

def test_message_no_token():
    # 不传 token,期望 401
    r = requests.get(f"{BASE}/api/message/list")
    assert r.status_code == 401

② 一个小工具脚本:比如读 Excel 里的用例数据,批量发请求校验(用 openpyxl + requests),或者批量比对数据库和接口返回的数据。

怎么讲「我写这个是为了解决一个具体问题——回归的时候那几条接口每次都要在 Postman 里手点,我就想能不能一键跑完。功能是能跑了,但写得很粗糙,没有做配置分离,换个环境还得改代码。」——能自嘲代码粗糙,反而显得真实。

6.3 【关键补差】你熟悉 SQLServer 吗?和 MySQL 有什么区别?

硬门槛简历写 MySQL,这里必须扛住
错误答法

① 「SQLServer 我没用过」——直接判不合格,因为这是 JD 明写的。
② 「都差不多,我会 MySQL 就会 SQLServer」——会被认为不严谨,而且一追问语法就露馅。

正确结构:SQL 通用能力(60%)+ 方言差异(30%)+ 学习动作(10%)

先说通用:SQL 语言本身是标准化的,增删改查、多表关联、分组统计、子查询这些我在项目里天天用——我用 MySQL 查过用户表、消息表、图书表,做过数据一致性校验,也写过 Group By 统计和 Having 筛重复数据。这部分换成 SQLServer 是一样的。

再说差异:我知道两者在方言上有几个明显区别,比如自增字段 MySQL 用 AUTO_INCREMENT,SQLServer 用 IDENTITY(1,1);取前 N 条 MySQL 用 LIMIT,SQLServer 用 TOP,2012 以后也能用 OFFSET FETCH 分页;字符串拼接 SQLServer 直接 +,MySQL 用 CONCAT;当前时间 SQLServer 是 GETDATE(),MySQL 是 NOW();空值处理 SQLServer 用 ISNULL,MySQL 用 IFNULL。

再给动作:这些差异我最近专门看过,也在本机装了 SQL Server Management Studio 练过建表和查询。如果有需要,我可以现场写几条 SQL 给您看。
这句话的杀伤力

「我可以现场写几条」——大部分候选人不敢说这句。敢说,就赢了一半。(前提:你真的要演练过,见 6.4)

SQLServer vs MySQL 差异速查表(背下来)

功能MySQLSQLServer
自增主键AUTO_INCREMENTIDENTITY(1,1)
取前 N 条LIMIT 10SELECT TOP 10 ...
分页LIMIT 10, 20ORDER BY id OFFSET 10 ROWS FETCH NEXT 20 ROWS ONLY
字符串拼接CONCAT(a,b)a + b(有 NULL 则整体为 NULL)
当前时间NOW() / CURDATE()GETDATE()
空值替换IFNULL(x,0)ISNULL(x,0)
字符串长度CHAR_LENGTH(s)LEN(s)
布尔类型TINYINT(1)BIT
类型转换CAST(x AS CHAR)CAST / CONVERT(VARCHAR, x, 120)
取刚插入的自增 IDLAST_INSERT_ID()SCOPE_IDENTITY()
表名前缀库名.表名dbo.表名(架构名)
大小写Linux 下表名区分大小写默认不区分
客户端工具Navicat、Workbench、DBeaverSSMS(SQL Server Management Studio)
补差动作(面试前必须做)

① 装 SQL Server Express + SSMS(免费),建一张用户表和一张订单表,插十几条数据;
② 把下面 6.4 的 4 条 SQL 在 SSMS 里跑通一遍;
③ 面试时你就能说「我在本机装了 SSMS 练过」——这句话直接把「不会」变成「会一点」。

6.4 现场写 SQL:4 道高频题

可能上机给你表结构让你写,写不出就凉

假设表结构

t_user(id, name, phone, status)                      -- 用户表
t_book(id, title, category, stock, total)            -- 图书表
t_borrow(id, user_id, book_id, borrow_time, return_time, status)
-- status: 0=借出未还, 1=已归还, 2=逾期

题 1:查询「张三」当前未归还的图书

-- 通用写法(MySQL / SQLServer 都一样)
SELECT u.name, b.title, br.borrow_time
FROM t_borrow br
JOIN t_user u ON br.user_id = u.id
JOIN t_book b ON br.book_id = b.id
WHERE u.name = '张三' AND br.status = 0;

讲思路「三张表要关联,用 JOIN;筛选条件一个是用户姓名、一个是借阅状态,都放在 WHERE 里。」

题 2:统计每个分类的借阅次数,取前 3 名

-- MySQL
SELECT b.category, COUNT(*) AS cnt
FROM t_borrow br JOIN t_book b ON br.book_id = b.id
GROUP BY b.category
ORDER BY cnt DESC
LIMIT 3;

-- SQLServer
SELECT TOP 3 b.category, COUNT(*) AS cnt
FROM t_borrow br JOIN t_book b ON br.book_id = b.id
GROUP BY b.category
ORDER BY cnt DESC;

讲思路「按分类分组 → COUNT 计数 → 按计数倒序 → 取前 3。唯一区别就是 MySQL 用 LIMIT,SQLServer 用 TOP。」(主动指出差异,正好呼应 6.3)

题 3:找出借阅超过 5 本的用户

SELECT u.id, u.name, COUNT(*) AS borrow_cnt
FROM t_borrow br JOIN t_user u ON br.user_id = u.id
GROUP BY u.id, u.name
HAVING COUNT(*) > 5;

讲思路「筛聚合结果要用 HAVING 不能用 WHERE——WHERE 在分组前执行,那时还没有 COUNT 的结果。」这是最常被考的细节。

题 4:找出所有逾期未还的记录(借出超过 30 天)

-- MySQL
SELECT * FROM t_borrow
WHERE status = 0 AND DATEDIFF(NOW(), borrow_time) > 30;

-- SQLServer
SELECT * FROM t_borrow
WHERE status = 0 AND DATEDIFF(DAY, borrow_time, GETDATE()) > 30;

讲思路「注意 DATEDIFF 的参数顺序不一样:MySQL 是 DATEDIFF(结束, 开始) 只用两个参数,SQLServer 是 DATEDIFF(单位, 开始, 结束) 三个参数。这个坑我踩过。」——说出「我踩过」比背文档可信十倍。

6.5 测试分析报告怎么写?

JD 原文「编写测试分析报告,总结测试过程、测试结果及缺陷修复情况」

JD 已经给了三段结构,顺着说

  1. 测试过程:测了什么范围、用了什么方法、多少条用例、执行了多少、在什么环境、什么时间完成。
  2. 测试结果:通过率、缺陷总数、按模块分布、按严重程度分布、遗留缺陷清单。
  3. 缺陷修复情况:已修复多少、修复率、未修复的原因和计划、复测结果。
  4. (加分)结论与建议:是否达到上线标准、存在哪些风险、下个版本建议改进什么。

加分话术「我写报告有个原则:结论先行。第一段就写『本次测试覆盖 XX 模块,执行用例 X 条,通过率 X%,遗留 X 个缺陷,其中 P1 有 X 个,建议 XX』,让别人三十秒能看完重点,细节放后面。」

可以带的作品

如果你有一份之前写的测试报告或缺陷单截图(可以脱敏),打印一份带着。面试时拿出来:「这是我之前写的测试报告结构,您可以看一下。」——比任何形容词都有力。

6.6 你怎么保证用例覆盖得全面?

方法论题给你一个「覆盖模型」,比空谈强

参考答案:六个维度扫描

维度问题
功能是否正确正常流程走通了吗?结果对不对?
输入是否完整必填项都测了吗?空、超长、特殊字符、类型错误?
边界是否覆盖最小、最大、刚好越界?空数据、单条、海量数据?
状态是否完整每个状态都进得去出得来吗?状态跳转合法吗?
异常是否处理网络断了、服务挂了、并发冲突、重复提交?
关联是否影响改了这里,别的地方会不会坏?(回归范围)

再补一句「另外我会做一次反向检查:把需求文档拿出来,逐条对应用例,看有没有哪条需求没有用例覆盖。这比凭感觉判断『应该够了』靠谱。」

6.7 举个边界值和异常场景的例子

必问答不上来等于不会测试

例子一:上传头像格式(jpg/png/gif/不支持格式)、大小(刚好 2MB / 2MB+1KB)、尺寸(超大图/1×1 像素)、文件名含中文/特殊字符、上传中断网、上传中取消、同一张图重复上传。

例子二:搜索框空搜索、单个字符、超长字符串(如 1000 字)、特殊字符('、%、_、emoji)、SQL 注入字符串(' or 1=1 --)、XSS 字符串(<script>)、前后空格是否被处理、无结果时的空状态展示。

例子三:借阅数量(你的项目)上限 5 本:借 4 本可借、借第 5 本可借、借第 6 本应提示超限;还 1 本后额度释放;同时借 2 本时是按总量判断还是逐本判断。

高分点

提到 SQL 注入和 XSS 这两类输入,会让面试官觉得你有安全意识——这是「了解测试理论」和「只会点功能」的分水岭。

6.8 你参加过软件测试相关的培训吗?

JD 原文「参加过培训者更佳」——诚实回答 + 补上等价物

如果没有「系统的培训班我没参加过,但我是按测试的知识体系自己学的——测试理论(流程、方法、用例设计)看书和文档,工具(禅道、Postman、Fiddler)是在项目里用起来的,MySQL 是课程学过加项目里练的。我觉得比培训更有用的是我真的在一个版本里从头跟到尾,踩过『缺陷描述写不清被开发打回』这种坑。」

要点不要为了迎合 JD 编造培训经历,但要证明「自学路径 = 培训内容」。把「理论 + 工具 + 实战」三块都说全,效果等同于培训。

6.9 岗位C 知识点补充

自动化测试分层(金字塔)
  • 单元测试(底层,量大,开发做)
  • 接口/服务测试(中间,性价比最高,测试主战场)
  • UI 自动化(顶层,量少,慢且脆弱)
  • 测试要问的第一个问题:哪些适合自动化?——稳定的、重复执行的、回归用的
pytest 基础(能说出来即可)
  • 用例以 test_ 开头
  • assert 断言,失败即用例失败
  • @pytest.fixture 做前置/后置(如登录拿 token)
  • @pytest.mark.parametrize 数据驱动
  • pytest -v 看详细结果,--html 出报告
Selenium 八种元素定位
  • id、name、class_name、tag_name
  • link_text、partial_link_text
  • xpath、css_selector(最常用后两个)
数据库测试常见校验点
  • 字段值是否正确落库(类型、长度、精度)
  • 关联表数据是否同步(订单 ↔ 库存)
  • 是否有脏数据、重复数据
  • 删除是物理删除还是逻辑删除(is_deleted)
  • 事务失败后有没有回滚

7压力题与刁难题

这些题的目的不是要答案,是看你在被质疑时的反应。核心原则:不慌、不顶、不虚、给具体。

必问7.1 如果线上出了严重问题,是你漏测的,你怎么处理?

顺序很重要:先解决,再解释,最后复盘

  1. 第一时间配合止血:不复现就先看日志和用户反馈,判断影响范围,配合开发回滚或修复。这时候不解释、不甩锅。
  2. 事后主动复盘:不等人来问,自己先写清楚——这个问题为什么没被测出来?是需求没写清、用例漏了、环境造不出来、还是时间不够没测到?
  3. 给出机制性的改进:不是「我下次注意」,而是「我把这个场景补进了用例库」「我建议这类改动要加一条回归项」。
  4. 承认该承认的:如果是我的疏漏,我说是我的问题;如果是需求变更没同步给测试,我说明流程断在哪一环。客观,不揽责也不推责。
这题真正的考点

你会不会在压力下先甩锅。答「这不怪我,需求没写清楚」的人,基本都会挂。

7.2 你觉得自己和 2 年经验的人比,差在哪?

这题要「真诚地承认 + 精准地缩小」

差在两块。

第一是见过的系统复杂度。两年的人大概率处理过高并发、做过数据迁移、碰过线上事故,这些我确实没见过,遇到的时候我的判断会慢。

第二是独立决策的经验。比如「这个版本到底能不能上」,两年的人心里有杆秤,我现在更多是依赖带我的同事判断。

但有一块我不觉得自己差太多:执行层面的完整度。需求分析、用例设计、缺陷描述、回归验证这套流程,我是完整走过一遍的,不是只知道概念。所以我的差距主要在「广度」和「判断力」,不在「能不能干活」。
7.3 你为什么从上一家实习离开?

原则不说前东家坏话,不显得是被淘汰,给一个「向前走」的理由。

参考「那段实习是三个月的固定实习期,到时间就结束了,不是因为我做得不好。走的时候带我的同事还问我要不要继续,但那时候我要回学校处理课程,就先结束了。这段经历让我确定了自己想做测试,所以现在想找一份能长期做下去的。」

绝对不能说的

「那边太闲了学不到东西」「领导不行」「加班太多」——负面评价前雇主是面试中的大忌。

7.4 如果这次没录用你,你觉得是什么原因?

这题在测自我认知答「不知道」显得没想法,答「我没什么问题」显得自大。

参考「如果没录用,我猜最大的可能是经验年限——我这个岗位要求两年,我确实不够,这个我能理解。其次可能是自动化这块,如果团队希望来了就能写脚本,我目前还做不到。但这两点我都在补,如果是因为这个,我希望能有机会用几个月证明一下。」

7.5 让你测一个完全没接触过的业务,第一天你会做什么?

这题在测方法论,不是知识量

  1. 要资料:需求文档、原型、历史用例、上一版的测试报告、缺陷列表(看历史缺陷最快了解系统哪里脆弱)
  2. 自己上手用:以用户身份把主流程走一遍,边用边记疑问
  3. 画图:画功能地图和核心流程图,画不出来的地方就是我不懂的地方
  4. 问人:把疑问整理成清单,一次性问产品/开发,而不是随时打断
  5. 定计划:根据以上,列出测试重点和排期,跟负责人对一次
加分

「我会先看历史缺陷列表——一个系统哪里最容易坏,历史缺陷都写着呢。这比从头看需求快得多。」

7.6 期望薪资是多少?

实习生「我了解这个岗位的实习薪资大概在 XX 到 XX 之间,我按公司的标准来就行,更看重能不能真的参与项目。」——实习生不要谈价,谈时长和成长。

正式岗(岗位A)给一个区间,不要给单点:「我了解同类岗位在这个城市大概是 X 到 Y,我的期望在这个区间内,具体可以看岗位职责和成长空间。」

如果被追问具体数字先问回去:「方便说一下这个岗位的预算范围吗?」对方给了,你说「这个范围我是可以接受的」。

7.7 长期做重复的回归测试,你会觉得枯燥吗?

诚实 + 转化「说实话重复的回归确实枯燥,我不否认。但我的处理方式是把它变成一次性的事——比如整理成检查清单、能脚本化的就脚本化。我在实习的时候就是把主流程整理成冒烟清单,后来别人也在用。所以我不会一直重复同一件事,我会想办法让它变少。」

这个回答既承认了现实(不装),又展示了主动性(这正是 JD 想要的)。

7.8 用三个词形容你自己 / 同事会怎么评价你?

三个词 + 每个一个证据(说完就停,别展开成长篇):

  • 细致——缺陷描述会自己先照着步骤走一遍再提交
  • 靠谱——答应今天给结论的事不会拖到明天
  • 爱琢磨——看到不顺的地方会想「能不能更省事」

同事评价「带我的同事说过一句我记到现在:『你提的 bug 我能直接看懂,不用问你。』我觉得这是对我最高的评价。」

8反问环节(几乎必问,且是最后一次加分)

「你还有什么想问我的?」——说「没有了」是最浪费的一次机会。准备 3 个,问 2 个。

8.1 通用三问(三岗都能用)

① 「如果我入职,前一个月您希望我做到什么程度,算是达到预期?」
—— 显得你在意结果,且暗示「我已经在想到岗后的事了」。

② 「团队现在的测试流程里,您觉得最想改善的是哪一块?」
—— 显得你在用「解决问题」的视角看岗位,而不是来学习的。

③ 「这个岗位接下来负责的产品/业务大概是什么方向,有没有我能提前准备的技术栈?」
—— 显得你愿意提前投入。

8.2 岗位A(正式岗)可以问

  • 「团队现在测试和开发的比例大概是多少?我主要负责哪条业务线?」
  • 「这个岗位是接现有业务,还是会有新项目?如果是老业务,我希望尽快把业务梳理清楚。」
  • 「如果我这边经验年限不够,您觉得我最需要先补的是哪一块?」(敢问这句,说明你真的想要这个岗位)

8.3 岗位B(欧哈游实习)可以问

  • 「咱们现在测试团队有几个人?我进来主要是跟着谁做?」
  • 「小程序和 App 两边的测试任务大概是几比几?」
  • 「我实习期间有机会接触到性能测试这块吗?我看到岗位标签里有,这块我很想学。」
  • 「实习表现好的话,后面有转正的机会吗?」(小公司问这个不唐突,反而显得你想长期做)

8.4 岗位C(J14829)可以问

  • 「咱们现在自动化这块做到什么程度了?我进去有机会参与吗?」
  • 「测试分析报告是每个版本都出,还是阶段性出?」
  • 「除了 SQLServer,日常还需要接触哪些工具或系统?」
不要问的

① 「加班多吗?」(可以问「团队一般几点下班」,但别用「加班多吗」这种问法)
② 「我什么时候能转正 / 工资多少」(第一轮别问)
③ 「你们公司是做什么的?」(说明你完全没做功课)
④ 「我表现怎么样?」(把评判权交给对方,且没有意义)

9知识点速查卡(面试前 10 分钟看这个)

全部压成短句,能背就能说。按「被问到立刻要能反应」的顺序排列。

9.1 测试流程一句话版

需求评审 → 测试计划 → 用例设计与评审 → 环境数据准备 → 冒烟 → 执行提缺陷 → 回归 → 测试报告 → 上线验证 → 复盘

9.2 七种黑盒方法

方法一句话什么时候用
等价类分有效/无效类,每类取代表值输入框、参数校验
边界值取边界及两侧(min-1, min, max, max+1)有范围限制的输入
判定表条件组合与动作的对应表多条件组合的业务规则
因果图输入与输出的因果逻辑条件之间有依赖
场景法基本流 + 备选流业务流程类
错误推测凭经验猜哪里容易错补充覆盖
正交实验用少量组合覆盖多维因素配置项组合爆炸时

9.3 缺陷管理

要能脱口而出的内容
缺陷状态流转激活 → 已解决 → 关闭;不通过则重新激活
缺陷六要素标题、环境、前置条件、步骤、实际结果、期望结果(+附件、影响范围)
严重程度致命(崩溃/数据丢失/安全)> 严重(主功能不可用)> 一般(次要功能)> 轻微(UI文案)
严重 vs 优先严重看影响,优先级看要不要马上改,两者可错位
解决方案类型已修复 / 设计如此 / 重复 / 无法复现 / 延期 / 不予修复

9.4 接口与 HTTP

状态码
  • 200 成功 / 201 已创建 / 204 无内容
  • 301 永久重定向 / 302 临时重定向
  • 400 参数错误 / 401 未认证 / 403 无权限 / 404 找不到
  • 405 方法不允许 / 408 请求超时 / 429 请求过多
  • 500 服务端错误 / 502 网关错误 / 504 网关超时
接口测试关注点
  • 正常参数、必填缺失、类型错误、超长
  • 鉴权:无 token / 错 token / 过期 token
  • 业务异常、幂等(重复提交)
  • 边界:分页、金额 0 和负数
  • 响应时间、数据一致性(查库)
GET vs POST
  • GET 参数在 URL、有长度限制、可缓存、幂等
  • POST 参数在 body、无长度限制、不缓存、非幂等
  • 都不加密,HTTPS 才加密
Cookie / Session / Token
  • Cookie:客户端存,自动带,可篡改
  • Session:服务端存,靠 sessionId 关联
  • Token:服务端不存状态,靠验签+过期校验

9.5 抓包工具

工具用途
FiddlerWindows 常用;抓请求、看耗时(Statistics)、改包重发(Composer)、断点改数据
CharlesMac 常用;功能同 Fiddler;限速模拟弱网很方便
浏览器 F12看 Network 请求、响应、Console 报错、Performance
Postman接口调试、集合管理、环境变量、断言、批量运行
微信开发者工具小程序调试:Network、Storage、WXML、体验评分

9.6 性能测试四个数

并发数(同时多少用户)· TPS/QPS(每秒处理多少)· 响应时间(看平均和 P99)· 错误率(要求 <1%)
辅助:CPU / 内存 / 磁盘 IO / 网络 —— 用来判断瓶颈
工具链路:JMeter = 线程组 + HTTP 请求 + 断言 + 聚合报告(+ CSV 参数化 + JSON 提取器取 token)

9.7 SQL 必会六条

-- 1. 条件查询
SELECT * FROM t_user WHERE status = 1 AND phone LIKE '138%';

-- 2. 多表关联
SELECT u.name, o.amount FROM t_user u
JOIN t_order o ON u.id = o.user_id;

-- 3. 分组统计(筛聚合结果用 HAVING)
SELECT user_id, COUNT(*) AS cnt FROM t_order
GROUP BY user_id HAVING COUNT(*) > 3;

-- 4. 排序 + 取前 N(SQLServer 用 TOP N)
SELECT * FROM t_order ORDER BY amount DESC LIMIT 10;

-- 5. 查重复数据
SELECT phone, COUNT(*) FROM t_user GROUP BY phone HAVING COUNT(*) > 1;

-- 6. 左连接找「没有关联数据」的记录
SELECT u.* FROM t_user u
LEFT JOIN t_order o ON u.id = o.user_id
WHERE o.id IS NULL;
几个必背概念

WHERE vs HAVING:WHERE 分组前过滤行,HAVING 分组后过滤组。
INNER JOIN vs LEFT JOIN:INNER 只留两边都匹配的;LEFT 保留左表全部,右表没匹配的补 NULL。
索引:加快查询,但会拖慢写入;在 WHERE、JOIN、ORDER BY 的字段上建;索引列上做函数运算会失效(如 WHERE DATE(create_time)='2026-01-01')。
事务 ACID:原子性、一致性、隔离性、持久性。

9.8 Linux + adb 各五条

Linux(说用途)
  • tail -f app.log 实时看日志
  • grep -n "ERROR" app.log 找报错
  • ps -ef | grep java 看进程
  • netstat -tunlp 看端口
  • df -h / free -m / top 看资源
adb(APP 测试)
  • adb devices 连设备
  • adb install -r x.apk 安装
  • adb logcat 抓日志(闪退必用)
  • adb shell dumpsys meminfo 包名 内存
  • adb shell screencap 截图

9.9 一张表记住「三种岗位要突出的词」

岗位反复要出现的词不要多说的
A 测试工程师独立、全流程、推动、梳理、汇报、风险、闭环、总结别过度强调「我是学生/我在学习」
B 欧哈游实习上手快、自己找活、能扛、小程序/App、时长稳定、主动别强调「我想学」,要说「我能做」
C 实习 J14829理论、流程、用例设计、报告、SQLServer、规范别吹自动化,会被追问穿

103 天冲刺计划

时间不多的话,按这个优先级来。带 ★ 的是「不做会扣分」的。

Day 1 · 把自己的东西讲圆

序做什么标准
★1背自我介绍(2.1),录音回放 3 遍60–80 秒,不看稿,不卡壳
★2把「未登录能拉消息」(3.1.3)讲到能一口气说完六步包括:怎么发现、怎么确认、影响多大、怎么提、怎么修、怎么复测
3给两个项目各准备 2 个「具体 bug 案例」每个都能说出模块 + 现象 + 原因
4翻一遍 3.1.2(登录用例)和 3.2.2(借阅测试点)能不看稿说出 5 个以上维度
5准备「实习期的一天」(3.3.1)和「主动做过的一件事」(5.7)都要有具体产出物

Day 2 · 补短板

序做什么标准
★1装 SQL Server Express + SSMS,跑通 6.4 的四条 SQL能现场写,能说出和 MySQL 的差异
★2背 6.3 的差异表(至少 6 条)自增、TOP、分页、拼接、GETDATE、ISNULL
3准备接口自动化小脚本(6.2),能在纸上/电脑上写出来requests + pytest + assert,20 行以内
4背性能测试四个指标 + JMeter 组件顺序(5.4)被问到能答满 30 秒
5看小程序和 App 的差异表(5.2),挑 4 条记牢能说出「切后台被回收」「缓存导致版本不一致」

Day 3 · 演练与包装

序做什么标准
★1对着镜子和手机录像,把「2 年经验怎么胜任」(4.1)讲一遍语气稳、不辩解、最后有反问
★2按岗位定制:投哪家就重点看哪一章A→第 4 章;B→第 5 章;C→第 6 章
3搜一下对方公司的产品,实际用 10 分钟能说出 2 个具体观察(5.10)
4准备 3 个反问(第 8 章),选 2 个用不要问加班和工资
5打印一份测试报告/缺陷单样例带在身上(脱敏)有机会就拿出来

面试当天清单

要说到的三个高频词
  • 「闭环」——提了 bug 跟到修复复测关闭
  • 「证据」——用数据/截图/日志推动开发
  • 「影响范围」——判断问题严重程度和工作优先级
三个不要
  • 不要编没做过的技术(一追问就崩)
  • 不要说前东家/学校/老师的坏话
  • 不要答「都可以」「听您的」——每问都要有观点
被问住时的三句话
  • 「这块我没实际做过,我的理解是……不知道对不对?」
  • 「我确认一下您问的是 A 还是 B?」(争取思考时间)
  • 「我记一下这个问题,回去查清楚再答复您。」
结束前一定要说的
  • 「我每周可到岗 X 天,能实习 X 个月以上。」
  • 「如果这次有机会,我希望能尽快上手,不拖团队节奏。」
  • 「谢谢您的时间,我这边很希望有机会加入。」
最后一句

你的优势不是「经验多」,是「一个 2027 届的学生,已经在真实项目里做过完整的测试闭环,并且能讲清楚自己为什么这么判断」。面试时把重心放在「我做过什么、我怎么想的」上,而不是「我愿意学」。愿意学是底线,做过事才是筹码。