陈祉伊 · 测试岗面试题库
基于简历(大连海洋大学 · 计算机科学与技术 · 2027 届)与三份岗位 JD 定制 · 共 90+ 问,含参考答案与知识点
1简历画像与风险诊断
面试官手里只有这张纸。他被引导去问什么,取决于纸上写了什么。先看清自己的「钩子」和「漏洞」。
1.1 你的三张牌
| 资产 | 面试官会怎么解读 | 怎么用 |
|---|---|---|
| 两段完整项目(APP + Web 双端) | 不是只会点功能,Web 和移动端都碰过,工具链完整(Postman / MySQL / Fiddler / 禅道) | 主动讲「双端差异」,这是很多应届生没有的对比视角 |
| 有真实实习(2026.07–09,移动端 APP) | 进过公司、跟过版本、见过线上问题,不是纯校园项目 | 把「线上问题跟进」讲成故事,这是最值钱的经历 |
| 具体数字:12+ bug、8 个高危、2 天内复测 | 有量化意识,说明真的在执行而不是挂名 | 必须能对每个数字讲出 2 个具体案例,否则会被追问穿 |
1.2 三个必须提前准备的漏洞
这是硬伤,但不致命。HR 大概率是批量打招呼,真正筛人的是面试官。策略:不硬吹年限,用「项目密度 + 独立负责度」换「年限」,并主动说明你的可实习时间与转正意愿。详见 4.1。
不能说「没接触过就完了」,也不能硬说「一样」。正确回答框架:「SQL 是通的,差异在方言,我列了 5 个差异点并已经自学」——把差异点背下来(见 6.3),这一题反而能变成加分项。
「了解概念」在面试官耳朵里等于「不会」。必须准备到能说出:并发数、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 秒。
我有两段比较完整的测试经历。一段是在北京多拓世纪做测试实习生,负责移动端 APP 的功能测试,从梳理业务测试点、执行用例、提缺陷,到跟进线上问题、和研发一起定位,完整走过一个版本周期。
另外我自己做过两个项目:一个是校园生活 APP 的测试,覆盖功能、接口和兼容性,用 Postman 测接口时发现了一个未登录也能拿到消息数据的越权问题;另一个是图书借阅的 Web 系统,用 Fiddler 抓包定位到借阅接口超时,配合后端调整了逻辑。
工具上我熟悉禅道、Postman、Fiddler,能用 MySQL 写 SQL 做数据校验,掌握等价类、边界值这些用例设计方法,Linux 和 Git 的命令也会用。
我比较喜欢测试这种「把问题挖出来」的工作,也习惯把缺陷描述写得让开发一眼能复现。所以想找一份测试相关的岗位长期做下去。
说到「未登录也能拿到消息数据」时停顿半秒,让面试官接话——他一定会追问,你就掌握了主动权。
2.2 为什么想做测试?为什么不做开发?
别踩千万别说「因为我代码写得不好」「测试比开发轻松」。这两句直接出局。
参考答案
另外我很享受缺陷被修复的那个闭环感。我在校园 APP 项目里发现的越权问题,从提缺陷到复测通过大概三天,那种「这个风险是我拦下来的」的感觉,比写完一个功能更让我有成就感。
当然我也知道测试要做长期,光靠兴趣不够,所以我在补自动化(Python + pytest/requests)和性能基础,想往技术型测试走。
2.3 你的优点和缺点是什么?
优点挑一个和岗位强相关的,然后立刻给证据。
「细心 + 有记录习惯。我习惯把每个测试点列成清单,执行一条划一条,因为漏测往往不是因为不会,而是因为忘了。图书借阅项目里我按「借阅数量、归还时间、权限、库存」四类拆了 60 多条用例,就是为了不漏。」
缺点说一个真实但不致命、且已在改善的。
「我目前比较明显的短板是自动化经验偏少,之前的测试主要是手工功能测试。我现在在学 Python 写接口自动化,用 requests + pytest 把校园 APP 的登录和消息接口写成脚本跑起来,也看过 Selenium 的元素定位,但还没到能独立搭框架的程度。」
「我的缺点是太追求完美,有时候会钻牛角尖」——面试官听过一千遍,且和测试岗需要的「按时交付」相冲突,别用。
2.4 你的职业规划是什么?(3–5 年)
参考答案
2–3 年:往技术方向走,把接口自动化和性能测试补起来,能自己搭一套接口自动化的用例集,回归的时候能跑起来而不是全靠手点。
3–5 年:希望能做到测试负责人或者测试开发的方向,能对一个项目的质量负责,从需求阶段就开始参与,而不是等开发提测了才介入。
别踩不要说「我想先做测试,以后转产品/转开发」——任何一句「转岗」都会让你出局。
2.5 你为什么选择我们公司?
必须先做功课回答里必须出现这家公司具体的东西:产品名、行业、技术栈、规模。空话(「贵公司平台大、发展好」)等于没答。
岗位B(欧哈游,动漫/游戏类,20–99 人,自研小程序 + App)示例:
另外你们的产品是小程序加 App,我之前的项目正好是移动端 APP,兼容性和抓包这些我都做过,上手会比较快。
2.6 你遇到过最大的困难是什么?怎么解决的?
用 STAR情境、任务、行动、结果,重点在行动和可量化的结果。
T:我需要拿出能说服人的证据。
A:我用 Fiddler 抓了十几次借阅请求,把每次的耗时、请求参数、响应都记下来,发现规律是——同一本书在被多人同时借的时候容易超时,单人借基本正常,耗时从 200ms 涨到 5 秒以上。我把这个对比截图整理成一页说明,附上慢的那几次的请求参数,一起发给开发。
R:开发看了之后判断是并发情况下库存扣减那块的锁等待,改了逻辑,后面复测 20 次没有再现。
不是你解决了多难的技术问题,而是「遇到推不动的事,你会不会用证据去推进」。这正是岗位A JD 里写的「推动问题及时合理的解决」。
2.7 你能承受加班 / 压力吗?
参考答案「版本上线前赶进度我完全可以配合,实习的时候有过连着几天跟版本、晚上等开发修完 bug 再复测的情况,我觉得这是测试岗的正常节奏。我抗压的方式是把事情拆小:先列清楚还有多少条用例、多少个待复测的缺陷、哪些是阻塞上线的,按优先级排,心里有数就不慌了。」
不要只答「能」,要给方法论,这样听起来是成熟而不是顺从。
2.8 你手上还有其他 offer 吗?什么时候能到岗?
其他 offer有就说有(但别说具体公司名去抬价,除非你确实想比价);没有就说「目前主要在推进几个方向,还没有到最终确认的阶段」——既不撒谎也不显得没人要。
到岗时间(实习生必答,且是考察重点)
实习生岗位最怕的是「来了两个月就走」。能实习的时长和每周天数,比你的技术细节更决定你能否拿到 offer。回答前先算清楚你的课表,给一个你能守住的承诺。
2.9 你觉得自己最适合做测试的特质是什么?
三个词 + 各一个证据,说完就停:
- 较真:看到「保存成功」的提示,我会去数据库里确认那条记录真的写进去了,而不是只看页面。
- 有条理:习惯用清单和表格管理测试点,缺陷描述固定写「环境 / 前置条件 / 步骤 / 实际 / 期望 / 影响范围」六段。
- 愿意沟通:缺陷被判定「不是 bug」时,我会去翻需求文档或者拉产品确认,而不是自己憋着或者直接放弃。
3简历深挖:项目追问(最高频战场)
简历上写了什么,就会被问什么。这一章按项目逐个拆,每题都给出「他在验证什么」+ 参考答案。
3.1 校园生活移动端 APP 测试(2025.11–2026.01)
技术栈:Postman、MySQL、禅道 · 成果:12+ bug、发现越权缺陷、多机型兼容性问题
必问3.1.1 介绍一下这个项目,你负责什么?
答题结构项目是什么(一句话)→ 我负责的范围 → 我怎么做的(方法)→ 结果(数字)。
功能上我主要负责登录、消息推送、校园服务三块,先按模块梳理测试点,再写用例,覆盖正常流程、异常输入和边界值;执行完之后用 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 那个「未登录能访问消息接口」的缺陷,详细说说
这题一定要背熟这是你简历上含金量最高的一个点,答好了直接证明「你有安全意识、会用工具、能推动修复」。
完整叙事(按这个顺序讲):
- 怎么发现的:我在 Postman 里测消息列表接口时,习惯把登录接口返回的 token 那行先注释掉再发一次,看看服务端有没有做校验。结果发现不带 token 请求,接口照样返回 200,而且返回了消息列表数据。
- 确认不是误判:我又换了两个账号试,发现 A 账号不带 token 也能拿到数据;再试了消息详情接口,同样能拿到。说明不是某一个接口的问题,是这一批消息接口都缺鉴权。
- 影响评估:这意味着任何人只要知道接口地址和参数格式,就能拉到别人的消息内容,属于越权访问(未授权访问),严重程度我定的是「严重」,优先级「高」——因为它涉及用户隐私数据泄露,且不需要任何前置条件。
- 怎么提的缺陷:在禅道里写清楚环境、请求方法、URL、Header(说明未携带 token)、请求体、实际响应(200 + 数据)、期望响应(401 或 403)、影响范围、复现步骤,并附上 Postman 的请求截图。
- 开发怎么修的:在网关/拦截器层加了统一鉴权,token 缺失或失效直接返回 401;同时把 token 的校验从「只在前端判断」改成「服务端强制校验」。
- 怎么复测的:回归时我不只测了原来那两个接口,而是把消息模块所有接口都跑了一遍不带 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 个讲透(不要报流水账):
比较典型的一个:消息推送在 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 | 次要功能异常,有替代路径 | 消息角标不刷新;筛选条件失效 |
| 轻微 / P3 | UI、文案、体验类 | 按钮对齐偏了;提示文案有错别字 |
「高严重 + 低优先级」的例子:某个极少使用的老机型上闪退——影响严重(崩溃),但用户量极小,可以排到下个版本修。
「低严重 + 高优先级」的例子:登录页的错别字——不影响功能,但首页第一眼就能看到,上线前必须改。
3.2 图书借阅 Web 管理系统(2026.03–2026.06)
技术栈:Postman、MySQL、Fiddler、禅道 · 成果:定位借阅接口超时、8 个高危缺陷、2 天内复测
必问3.2.1 借阅接口超时你是怎么排查的?
他在验证你的排查方法论,而不是「我发现了然后交给开发」。
答题模板:分层定位
- 先确认现象边界:是一直超时还是偶发?单人借还是多人同时借?换了账号/书也一样吗?(排除账号、数据个例)
- 抓包看请求本身:用 Fiddler 看这条请求的耗时明细、请求体大小、有没有重复请求、网络是否正常。(排除网络和前端)
- 看服务端:响应是「慢」还是「根本没返回」?如果是 504 且有响应体,说明服务端处理超时;如果一直 pending,可能是连接没释放。
- 缩小范围:同样的接口,参数简单(只借 1 本)时快,参数复杂(一次借多本)时慢 → 怀疑业务逻辑里有循环查询或大事务。
- 给出结论:我在并发借阅同一本书时必现,耗时从两百毫秒涨到五秒以上,怀疑是库存扣减时的锁等待或慢 SQL,把对比数据给到开发。
① 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 测试有什么区别?
你有双端经验,这题必须答得比别人好
| 维度 | Web | APP |
|---|---|---|
| 兼容性 | 浏览器(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 完整说一下软件测试流程
标准答案
- 需求分析:读需求文档/原型,参加需求评审,找出需求里的歧义、遗漏、不可测的点,产出「测试需求」
- 测试计划:定范围、策略、资源、排期、风险(谁测什么、什么时候测完)
- 测试用例设计:用等价类、边界值、场景法、判定表等方法写用例,然后用例评审(测试、开发、产品一起过)
- 测试环境与数据准备:搭环境、造数据
- 冒烟测试:提测后先跑主流程
- 测试执行:按用例执行,记录结果,提交缺陷
- 缺陷管理与回归:跟踪修复,逐条复测,做多轮回归
- 测试报告:用例执行率、通过率、缺陷统计与分布、遗留问题与风险、是否可上线的结论
- 上线验证 + 复盘:发布后线上冒烟,事后复盘漏测原因
「需求评审 → 测试计划 → 用例设计与评审 → 环境数据准备 → 冒烟 → 执行与提缺陷 → 回归 → 测试报告 → 上线验证。」
必问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、负数
- 性能:响应时间是否在可接受范围
- 数据一致性:接口返回成功,库里是否真的写进去了
200 成功 · 201 创建成功 · 301/302 重定向 · 400 参数错误 · 401 未认证 · 403 无权限 · 404 资源不存在 · 405 方法不允许 · 500 服务端错误 · 502 网关错误 · 504 网关超时
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 |
| 看磁盘/内存/CPU | df -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/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 原文「新旧业务需求与功能梳理分析」——这是资深岗的活
他在验证你有没有「从执行者到分析者」的意识。
四步法
- 摸清全貌:先看菜单和页面结构,画出功能地图(一级模块 → 二级功能 → 具体页面)。这一步不求深,求全。
- 理清业务流:挑核心链路(如「用户注册 → 借书 → 归还」)走一遍,画流程图,标出关键状态和判断条件。业务流程比功能列表更重要,因为 bug 往往出在流程的衔接处。
- 建立对应关系:把「功能」和「业务规则」对上——这个页面背后有哪些规则(额度、时限、权限)。做成一张功能-规则矩阵,这张表就是以后回归测试的底稿。
- 标注变更影响:新需求来了,对着这张表判断「这次改动会影响哪几个功能、哪些老功能要回归」。这是梳理老系统最实际的用途。
「梳理的产出我希望能变成可复用的资产——功能地图给新人看,规则矩阵当回归清单,变更影响分析用来定回归范围。不然梳理完就放那了,没意义。」
4.8 测试总结 / 项目复盘怎么写?
JD 原文「参与进行测试项目总结及业务个人总结」
项目总结四块
- 数据:用例数/执行率/通过率、缺陷总数、按模块和严重程度分布、修复率、平均修复时长、遗留问题
- 结论:本版本质量如何、是否可以上线、遗留风险是什么
- 问题:哪些环节卡住了(提测质量差、需求变更频繁、环境不稳定)
- 改进:每个问题对应一个具体动作(如「提测前要求开发自测并附自测清单」),并指定下版本落地
个人总结「我一般写三件事:这个版本我做得好的、做得不够的、下个版本要改的一个具体习惯。比如上个版本我发现自己的用例在『异常中断』这类场景覆盖不足,下个版本我就在用例模板里加了一栏『中断/异常』强制自己填。」
4.9 开发说「这不是 bug,是需求就这样」,你怎么办?
高频考的是推动力 + 分寸感
四步,别跳步
- 先自查:翻需求文档和原型,确认自己没理解错。有明确依据就直接贴出来(「需求文档 3.2 写的是 X」)。
- 找第三方:需求没写清楚 → 拉产品确认。产品说按现在这样,那就是需求问题,我把缺陷关掉并备注「产品确认按现设计」;产品说应该是 X,那这就是 bug。
- 讲影响不讲对错:不说「你做错了」,说「这个情况下用户会看到 XX,可能导致 XX 后果,你看要不要处理」。把问题从「谁对」转成「影响多大」。
- 留痕 + 升级:达不成一致就先记录(缺陷挂起并写清分歧点),在测试报告里列为「遗留风险」,由负责人决策。不要自己默默吞掉,也不要越级告状。
「我的原则是不为了赢而争,但也不让风险消失。争不出结果的事,我会把它写进风险清单,让有决策权的人知道,而不是我替他们决定。」
4.10 时间不够、测不完,怎么办?
高频这题答「加班测完」是下策
参考答案:风险驱动
- 先保核心:按「用户使用频率 × 影响严重程度」排优先级,主流程、支付、登录这类先测,边缘功能和 UI 往后放。
- 砍范围不砍质量:明确说「这几块这次测不到」,而不是「都测了但都只点了一遍」。
- 提高效率:把重复性的回归用接口自动化或脚本替代;用等价类减少冗余用例。
- 提前暴露:在还有时间解决的时候说「按这个进度会漏掉 X 模块」,让团队决定是加人、延期还是砍需求。
- 记录下来:风险清单写进测试报告,上线后重点监控那部分。
「我会加班加点全部测完」——面试官会觉得你没有优先级概念,而且这种承诺在实际工作中会导致更严重的漏测。
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 功能测试是通的——需求分析、用例设计、缺陷管理这些方法论完全一样,工具链也是一套(抓包、查库、禅道)。差异主要在专项部分:小程序不用安装,但有包体积限制、有审核、依赖微信的登录和分享,还有开发者工具可以真机调试。
已自学:这几点我提前看了——比如小程序主包有 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)+ 真机调试 + vConsole | Android 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 怎么做(说出组件顺序)
要模拟登录态的话,加一个「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 原文这题决定他觉得你「靠不靠谱」
按时间轴答,显得有条理
- 上线前:核心流程全量回归 + 上一版本线上问题的回归验证 + 兼容性抽查 + 上线检查清单(版本号、开关配置、域名指向、埋点)。
- 上线时:如果有灰度/白名单,先小范围放量,观察错误率和反馈;准备好回滚方案。
- 上线后:马上做一轮线上冒烟(用真实账号走主流程),盯日志和告警 30 分钟到 1 小时,看崩溃率、接口错误率。
- 出问题:先回滚止血,再定位,再修复重发——顺序不能反。
「我理解的『平稳上线』不是『没出问题』,而是出了问题能快速发现、快速回退。所以我会特别关注两件事:上线检查清单有没有漏项,回滚方案是不是真的可行。」
5.7 「独立并主动推动测试任务」——举个例子
JD 原文必须有一个「没人要求你做,但你做了」的故事
参考答案(用你真实的素材改编)
我就把这几条主流程整理成了一份冒烟检查清单,大概十几条,每条写清楚操作和预期结果,放在共享文档里。后来每次提测,谁有空谁就照着清单跑一遍,二十分钟能出结论,比之前快很多。
这件事之后我带我的同事会把一些梳理的活直接交给我,因为他知道我会主动想「怎么让这件事更省事」。
发现低效 → 没人要求 → 我自己做了 → 有具体产出 → 别人开始依赖这个产出。「主动」的证据不是「我很主动」,是「我做了一个别人后来在用的东西」。
5.8 如果团队只有你一个测试,你怎么安排?
小公司必问在探你会不会慌
参考答案「一个人做测试,最怕的是什么都想测、结果什么都没测透。我的做法是:」
- 先定底线:列出「上线绝对不能出问题的功能」,这部分每次必测、测透。
- 建立资产:用例库、冒烟清单、上线检查清单先建起来——一个人的时候,靠流程和文档弥补人手的不足。
- 借力:推动开发自测(提测前跑一遍自测清单)、推动产品在需求阶段把规则写清楚,这些都是不花钱的「测试资源」。
- 提效:把重复的回归用接口自动化或脚本跑,人只做需要判断的部分。
- 管住风险:明确告诉负责人「以现在的人手,这块我保不住,需要你决策」——不要一个人硬扛到上线爆炸。
5.9 「你是 2027 届,能实习多久?一周几天?」
决定性问题答不好,技术再强也没用
参考答法(先算清自己的课表再答)
我个人是希望长期做的,如果实习期间双方都合适,我也希望能留下来。
① 「我看看课表再说」——显得没准备;
② 「只能来两天」——大概率直接淘汰,除非对方明确接受兼职;
③ 「我随时都能来」——过于绝对,后面请假反而失分。给一个有边界、能守住的承诺最可信。
5.10 我们是做动漫/游戏相关产品的,你了解吗?
业务理解小公司很在意「你是不是随便投的」
面试前必须做去应用商店/微信搜一下他们的产品,实际用 10 分钟,记下 3 个你觉得可以改进的点。
参考框架「我看了你们的小程序/APP,主要做 XX。我注意到两点:一是 XX 页面的加载有点慢,二是 XX 操作的路径比较长。如果我来测,我会先重点看这块。」
这句话同时证明了:你真的用过产品、你有用户视角、你已经在用测试的眼睛看东西。比任何自我评价都有说服力。
5.11 岗位B 知识点补充
APP 专项测试清单
- 安装/卸载/覆盖安装/跨版本升级
- 启动(冷启动/热启动)耗时
- 中断:来电、短信、闹钟、切后台、锁屏
- 网络切换:WiFi ↔ 4G ↔ 无网
- 权限:首次申请、拒绝后再申请、去设置里改
- 推送:前台/后台/杀进程后能否收到
- 耗电、内存、流量、卡顿
adb 常用命令(说得出就够)
adb devices查设备adb install / uninstalladb 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%)
再说差异:我知道两者在方言上有几个明显区别,比如自增字段 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 差异速查表(背下来)
| 功能 | MySQL | SQLServer |
|---|---|---|
| 自增主键 | AUTO_INCREMENT | IDENTITY(1,1) |
| 取前 N 条 | LIMIT 10 | SELECT TOP 10 ... |
| 分页 | LIMIT 10, 20 | ORDER 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) |
| 取刚插入的自增 ID | LAST_INSERT_ID() | SCOPE_IDENTITY() |
| 表名前缀 | 库名.表名 | dbo.表名(架构名) |
| 大小写 | Linux 下表名区分大小写 | 默认不区分 |
| 客户端工具 | Navicat、Workbench、DBeaver | SSMS(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 已经给了三段结构,顺着说
- 测试过程:测了什么范围、用了什么方法、多少条用例、执行了多少、在什么环境、什么时间完成。
- 测试结果:通过率、缺陷总数、按模块分布、按严重程度分布、遗留缺陷清单。
- 缺陷修复情况:已修复多少、修复率、未修复的原因和计划、复测结果。
- (加分)结论与建议:是否达到上线标准、存在哪些风险、下个版本建议改进什么。
加分话术「我写报告有个原则:结论先行。第一段就写『本次测试覆盖 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 如果线上出了严重问题,是你漏测的,你怎么处理?
顺序很重要:先解决,再解释,最后复盘
- 第一时间配合止血:不复现就先看日志和用户反馈,判断影响范围,配合开发回滚或修复。这时候不解释、不甩锅。
- 事后主动复盘:不等人来问,自己先写清楚——这个问题为什么没被测出来?是需求没写清、用例漏了、环境造不出来、还是时间不够没测到?
- 给出机制性的改进:不是「我下次注意」,而是「我把这个场景补进了用例库」「我建议这类改动要加一条回归项」。
- 承认该承认的:如果是我的疏漏,我说是我的问题;如果是需求变更没同步给测试,我说明流程断在哪一环。客观,不揽责也不推责。
你会不会在压力下先甩锅。答「这不怪我,需求没写清楚」的人,基本都会挂。
7.2 你觉得自己和 2 年经验的人比,差在哪?
这题要「真诚地承认 + 精准地缩小」
第一是见过的系统复杂度。两年的人大概率处理过高并发、做过数据迁移、碰过线上事故,这些我确实没见过,遇到的时候我的判断会慢。
第二是独立决策的经验。比如「这个版本到底能不能上」,两年的人心里有杆秤,我现在更多是依赖带我的同事判断。
但有一块我不觉得自己差太多:执行层面的完整度。需求分析、用例设计、缺陷描述、回归验证这套流程,我是完整走过一遍的,不是只知道概念。所以我的差距主要在「广度」和「判断力」,不在「能不能干活」。
7.3 你为什么从上一家实习离开?
原则不说前东家坏话,不显得是被淘汰,给一个「向前走」的理由。
参考「那段实习是三个月的固定实习期,到时间就结束了,不是因为我做得不好。走的时候带我的同事还问我要不要继续,但那时候我要回学校处理课程,就先结束了。这段经历让我确定了自己想做测试,所以现在想找一份能长期做下去的。」
「那边太闲了学不到东西」「领导不行」「加班太多」——负面评价前雇主是面试中的大忌。
7.4 如果这次没录用你,你觉得是什么原因?
这题在测自我认知答「不知道」显得没想法,答「我没什么问题」显得自大。
参考「如果没录用,我猜最大的可能是经验年限——我这个岗位要求两年,我确实不够,这个我能理解。其次可能是自动化这块,如果团队希望来了就能写脚本,我目前还做不到。但这两点我都在补,如果是因为这个,我希望能有机会用几个月证明一下。」
7.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 抓包工具
| 工具 | 用途 |
|---|---|
| Fiddler | Windows 常用;抓请求、看耗时(Statistics)、改包重发(Composer)、断点改数据 |
| Charles | Mac 常用;功能同 Fiddler;限速模拟弱网很方便 |
| 浏览器 F12 | 看 Network 请求、响应、Console 报错、Performance |
| Postman | 接口调试、集合管理、环境变量、断言、批量运行 |
| 微信开发者工具 | 小程序调试:Network、Storage、WXML、体验评分 |
9.6 性能测试四个数
辅助: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 届的学生,已经在真实项目里做过完整的测试闭环,并且能讲清楚自己为什么这么判断」。面试时把重心放在「我做过什么、我怎么想的」上,而不是「我愿意学」。愿意学是底线,做过事才是筹码。