蘑菇街测试实习生面试复盘:用例设计、SQL与自动化测试考点解析
2026/8/31 11:29:18 网站建设 项目流程

1. 从蘑菇街测试实习JD倒推:面试官到底在挑什么人

先说个现象:每年春招秋招,测试实习生的简历能堆满一个屏幕,但真正能走到面试环节的其实不多。有人以为测试岗门槛低,随便准备几道题就能过;也有人以为测试面试和开发面试一样,得疯狂刷算法。这两种认知,在蘑菇街这套试题面前都容易翻车。

2019年那会儿,蘑菇街已经上市,正处于从导购电商往直播电商转型的节点。业务迭代非常快,大促、直播、小程序的排期经常撞在一起。测试团队招实习生,目标非常明确:来了就能干活、出了问题能主动反馈、给到方向能自己往下走。所以那套笔试题和面试问题,看起来都是基础题,但每一道背后都在验证这三件事——思维是否清晰、动手是否扎实、沟通是否靠谱。这刚好也是绝大多数互联网公司测试实习生的通用画像。

准备测试实习面试,最重要的不是背题,而是理解每个考点背后的意图。工具可以学,框架可以背,但遇到一个需求时能不能拆出边界条件、发现一个bug时能不能讲清楚复现路径,这种能力短时间突击不出来。蘑菇街的题之所以值得复盘,就是因为它很典型:不是故意刁难,而是用一个电商场景把候选人的思维底牌翻出来看。下面我按题型逐块拆。

2. 笔试里的用例设计题:登录、购物车、支付背后的边界陷阱

蘑菇街这类电商公司,笔试题里几乎必出用例设计。因为用例设计直接反映一个人怎么思考问题。登录、购物车、支付是电商最核心的三个链路,也是最容易出题的方向。表面上看人人都会用这些功能,但能设计出高质量用例的人,和只会写"输入正确账号密码能登录"的人,差距一眼就能看出来。

2.1 登录用例:等价类和边界值的组合运用

先看登录。常规的等价类划分大家都会:正确用户名加正确密码、正确用户名加错误密码、错误用户名加正确密码、空用户名、空密码。这套思路没错,但只能算及格。要在笔试里出彩,得往深一层想。

登录场景至少有这几个容易被忽略的维度:

  • 用户名和密码的边界长度,比如系统规定用户名最长16位,那16位、17位、15位都要覆盖
  • 密码是否需要区分大小写,是否允许特殊字符,是否允许纯数字或纯字母
  • 输入框有没有前后空格自动去空格的处理
  • 连续输错N次后账号会被锁定,锁定时间过后是否自动解锁
  • 记住密码功能,勾选之后退出再登录,密码是否被回填
  • 弱密码或历史常用密码是否被拦截
  • 回车键提交、Tab键切换焦点,键盘交互是否正常
  • 网络异常时点击登录,页面有没有loading和超时提示
  • 请求乱序或重复提交,会不会出现重复创建会话的问题

笔试的时候题目往往只写了"请设计登录功能的测试用例",但阅卷人看的是你能否主动扩展场景。我见过一份印象很深的答卷,把"登录"拆成了输入校验、接口交互、异常场景、安全校验四类,每类下面再列具体用例,最后还补充了一条"移动端断网恢复后能否自动重连登录态"。这就不是背题的思路了,而是真正在脑子里跑过一遍用户操作流程。

2.2 购物车与优惠券:电商业务逻辑里的隐藏坑

购物车和优惠券是蘑菇街这种电商平台的高频出题点,因为它们业务规则多、组合场景复杂。购物车最常见的问题就是数量和价格的计算:修改某一项数量后,小计、运费、优惠分摊怎么联动变化;不同店铺的商品是否区分结算;某件商品从购物车移除后,对应的满减优惠是否自动调整;商品在提交订单瞬间降价了,结算时按哪个价格走。

优惠券就更有意思了。一张券通常有使用门槛、有效期、使用范围、是否可叠加、是否可拆分这五个基本属性。笔试题如果让你测优惠券,你得主动组合这些条件。比如"满200减50"的券,低于200不可以用,正好200可以用,199.99不可以用,这是边界值;不同品类商品混购时,券的适用范围按主商品还是按明细计算;直播间的专属券和平台通用券能不能叠加,叠加顺序怎么算;一张券退款后是退回原账户还是作废。这些问题如果平时没用过电商后台,可能根本想不出来,但笔试考的就是你平时作为用户有没有观察过这些细节。

一个比较稳妥的设计思路是画一张矩阵表,把功能模块、操作步骤、输入条件、预期结果、优先级列出来,然后按正向、逆向、异常、兼容四类去填充。阅卷人看你的表格是否完整、是否有优先级意识,比看具体用例数量更重要。

2.3 支付场景:成功率与一致性的取舍

支付用例设计题年年都有,因为支付链路长、环节多,而且直接关系资金安全。设计支付用例时,重点不只是"支付成功"和"支付失败"两条主路径,而是中间态。

支付场景的核心考察点是状态一致性。用户发起支付后,客户端收到扣款成功回调,但服务端没收到订单更新消息,怎么办?用户支付时网络中断,客户端显示支付失败,但银行扣款成功,这笔账怎么平?这些属于典型的分布式事务问题,实习生不需要写出具体的对账代码,但得意识到"客户端展示的支付结果不一定等于服务端真实结果"这个前提。

另外两个值得写进去的点是异常和容错:重复点击支付按钮,会不会产生两笔订单;余额不足时客户端会不会跳转到其他支付方式;支付密码输错五次后的锁定策略;弱网条件下支付回调延迟时,页面给出的文案是否清晰。把这些写进用例,笔试题的深度立刻不一样。

3. 数据库与Linux实操题:为啥实习生也得会定位线上问题

很多投测试实习的同学不太理解:我做测试,为什么要考SQL和Linux?这个认知得纠正。测试工作中有一类非常常见的任务叫"问题定位"。你发现一个bug,开发第一句话往往是"接口返回的数据是什么""数据库里的数据长什么样""日志打了什么报错"。如果你不会查数据库、不会看日志,就只能把bug描述成"页面显示不对"然后丢给开发,这种沟通效率非常低。蘑菇街这类平台,测试实习生入职后接触的第一个真实任务,往往就是跟着查线上某笔订单的数据状态。

3.1 常考的SQL:不是写复杂的存储过程,而是会查数

测试面试的SQL题通常不会考特别深,但几个基础能力必须扎实:单表查询、条件过滤、排序、分组聚合、多表关联、去重和计数。其中GROUP BY和HAVING容易混淆,JOIN的几种类型也经常考。

我拿一道典型的题目举个例子。面试官给两张表:用户表users(uid,username,register_time)和订单表orders(order_id,uid,amount,pay_time)。然后问"查出近30天注册用户中,有支付订单的用户数和总支付金额"。这个问题考察的不只是会不会写SQL,而是能不能想到JOIN之后还需要去重,以及金额字段要不要考虑NULL值。答案大致是:

SELECT COUNT(DISTINCT u.uid), SUM(o.amount) FROM users u JOIN orders o ON u.uid = o.uid WHERE u.register_time >= DATE_SUB(NOW(), INTERVAL 30 DAY) AND o.pay_time IS NOT NULL;

注意两个细节:COUNT(DISTINCT u.uid)是为了防止一个用户有多笔订单导致重复计数;WHERE里过滤pay_time IS NOT NULL,是因为有的测试环境订单表里会有未支付成功但状态没更新的脏数据。写SQL的时候把这些边界条件带出来,面试官对你的印象会好很多。

还有一个高频考点是"查某个用户最近一笔订单的金额"。这题的坑在于不能用ORDER BY之后再LIMIT 1,因为同一时间戳下可能有多个订单,正确做法是先用子查询取最大时间戳,再关联订单查出明细。这种场景在生产环境里非常常见:数据有重复、字段有空值、时间有精度问题。答出这种细节,说明你真在测试环境里查过数,而不只是在培训班里背过SQL。

3.2 Linux命令:tail、grep、ps、top之外的组合用法

Linux在测试面试里最常见的考法是场景题。比如:线上有个接口超时,给你一台服务器,你怎么排查?这时候如果只会背命令是没用的,得把命令串成一条排查链路。

我的习惯是这么走:

  • 先用tail -f 应用日志文件路径实时看日志,确认最近有没有新增报错
  • 再用grep -n "关键字" 日志文件 | tail -50过滤出关键字附近的日志,看报错堆栈
  • 然后ps -ef | grep 应用名确认进程还在不在,top看CPU和内存占用
  • 如果怀疑网络问题,用netstat -anp | grep 端口号看端口监听状态和连接数
  • 最后free -hdf -h确认内存和磁盘

这一套组合下来,你至少能把问题范围从"整个系统"缩小到"某个进程、某个日志段落、某个端口"。实习生如果能说出这种排查顺序,面试官会认为你具备独立解决线上问题的潜力。反之,如果只会单独背"tail是看日志的""top是看进程的",一道综合题就会暴露短板。

3.3 接口测试里的数据核对意识

数据库和Linux的实操能力,最终都会沉淀到接口测试里。做接口测时,你要验证接口返回的字段值是否与数据库里的数据一致,还要核对字段类型、时间格式、金额单位。我在带实习生时发现,很多人接口测试只关注HTTP状态码是不是200,状态码是200就认为通过。但实际上200只代表请求处理了,不等于结果正确。你需要把接口返回的JSON和数据库里的值逐字段比对,商品价格是否一致、库存扣减是否符合预期、优惠金额算得对不对。

比如有一个常见问题:前端展示的商品价格是79.9元,接口返回的是79.9,但数据库里存的是7990(按分存储)。如果测试时没注意单位,就会漏掉这类问题。能主动核对单位、精度、时区,才算真正理解了数据核对的意义。

4. 自动化测试问答:没有项目经验怎么聊Appium和pytest

自动化测试是测试实习面试里的高频话题,但也是很多同学最容易心虚的部分。对实习生来说,没有真实项目经验很正常,面试官不会指望你一上来就搭建过一套完整的自动化测试平台。但"没做过"和"完全没了解"是两回事。面试官问自动化,其实是在考察两件事:第一,你是否知道自动化测试能解决什么、不能解决什么;第二,你有没有基本的代码能力和学习路径。

4.1 先搞清楚自动化测试的定位

很多人把自动化理解成"点来点去让脚本跑起来",这个理解太浅了。自动化测试的核心价值是回归验证和效率提升,而不是替代手工测试。蘑菇街这类电商业务,功能迭代频繁,每个版本都要回归核心链路。如果每次都靠手工执行一遍登录、加购、下单、支付、退款,既慢又容易漏。把核心用例脚本化,每次发版前自动跑一遍,这才是自动化的实际意义。

面试时如果能主动说出"自动化适合稳定、高频、核心的业务场景,不适合探索性测试和频繁变更的页面",面试官就会觉得你有判断力。相反,如果只知道吹"我能用Appium写脚本",但对什么时候该引入自动化说不清楚,反而会减分。

4.2 工具和框架的考点拆解

实习生层面,常见的自动化工具考法就那几个:Web端问Selenium,移动端问Appium,接口层问Postman加脚本或者Python的requests库,测试框架问pytest或TestNG。核心考点往往集中在三层:

第一层是元素定位。Selenium和Appium都会问怎么定位元素,常规的id、name、xpath、CSS selector,加上Appium特有的content-desc。这里要特别注意:xpath定位尽量不要用绝对路径,因为页面一改就碎,要用相对路径配合属性和文本组合定位。

第二层是等待机制。强制等待、隐式等待、显式等待的区别,是面试官特别爱问的点。标准答案是:强制等待写死时间,不稳定;隐式等待是全局的,每次查找元素时轮询;显式等待是针对指定元素设置等待条件和超时时间,效率最高。实际项目里,UI自动化主要用显式等待,接口自动化则可以考虑轮询。

第三层是框架设计。如果面试官让你讲讲你理解的自动化测试框架,我建议往Page Object Model靠。PO模式的核心思路是把页面元素和业务操作封装成Page类,测试脚本只调方法,这样页面元素变更时只需要改一个地方。能讲清楚PO模式,即使你没在真实项目里用过,面试官也能看出你研究过主流方案。

4.3 没有真实项目经验怎么补

诚实地说自己没做过项目不是问题,问题是你有没有替代方案。我推荐一个相对完整的学习路径:先自己装好Selenium或者Appium环境,在Demo站点上写一条"登录-搜索-加购"的用例;然后把用例用pytest组织起来,加上conftest.py里的fixture管理浏览器启动和关闭;再接入Jenkins定时跑一遍,把测试报告生成出来。这个过程中,你会天然接触到元素定位、等待、断言、报告生成、持续集成这些环节,面试聊起来就有素材了。

如果时间有限,哪怕只做其中一个很小的点,比如用Python的requests库写一个接口自动化的Demo,调用一个公开接口做断言,也足够证明你有代码能力和动手意愿。关键是把学习过程讲清楚:你遇到过什么问题、怎么查的资料、最后怎么解决的。这个叙事比"我熟悉Appium"更有说服力。

4.4 聊聊自动化测试的局限

面试官问到自动化测试时,如果候选人能主动说出它的局限性,反而会加分。自动化脚本本身需要维护,页面结构频繁变动的模块不适合做UI自动化;接口自动化比UI自动化更稳定,但需要接口文档完善;覆盖率再高也不能完全替代人工的探索性测试。这些认知,说明你思考过"什么场景该用什么手段",而不只是会操作工具。

5. 面试互动环节的潜台词:闲聊式提问其实在考察什么

笔试考察硬技能,面试的互动环节则重点考察软素质和岗位认知。很多候选人笔试答得不错,面试却挂了,原因往往不是技术不够,而是没有听懂面试官问题背后的潜台词。

5.1 "你最大的缺点"和"你遇到的最大困难"

这类问题表面上是了解你的过去,实际上是在考察自我认知和复盘能力。我见过两种典型错误答案:一种是说"我最大的缺点是太追求完美",这种回答一听就是套话;另一种是直接说"我没遇到过什么困难",这会让面试官觉得你缺乏抗压经验。

比较好的回答模式是:真实缺点加具体案例加改进动作。比如"我刚开始不懂就问,但有一次因为问题太基础被打断后,我开始先自己查文档和向搜索引擎求助,实在解决不了才带上自己的尝试过程去问人"。这个回答既承认了缺点,也展示了学习路径和沟通意识。

5.2 情景题:上线前发现严重bug怎么办

这道题在测试面试中出现频率极高。场景通常是:产品第二天就要上线,你今天在测试环境里发现了一个严重bug,开发说改动风险很大,产品说必须上线,你怎么办。

这题没有标准答案,但考察的是优先级判断和沟通思路。一个合格的测试人应该先复现问题、确认影响范围和严重等级,然后把问题反馈给开发和产品,一起评估风险。如果修这个bug的改动比bug本身风险更大,可以讨论是否有临时规避方案,或者保留bug记录后灰度上线。如果测试环境无法判断,还可以考虑在预发环境做一次回归验证。整个过程的核心是:不擅自决定,也不隐瞒问题,而是推动各方基于事实做决策。

5.3 "你怎么看待测试这个岗位"

这个问题直接考察岗位认知。如果回答"测试就是找bug",基本就凉了。成熟的回答至少要包含三层:测试是质量保障体系的一环,既要发现缺陷,也要评估风险,还要推动流程改进;测试需要理解业务、懂用户操作习惯、能站在用户角度思考;测试是通过数据和场景持续给产品提建议的角色,而不只是执行者。

5.4 向面试官提问的环节

面试最后面试官通常会问"你有什么想问我的",这绝不是客套。我建议准备一到两个有深度的问题,比如"这个岗位入职后主要负责哪个业务线的测试,目前团队的技术栈和工具链是怎样的",或者"团队现在自动化测试的覆盖率大概在什么水平,实习生可以从哪个方向切入"。这些问题既能展示你的兴趣,也能帮你了解团队实际情况,判断是不是适合你。千万别在这时候问"加班多不多""工资多少",这些可以放到HR环节确认。

6. 拿到offer之后:测试实习生第一个月怎么站稳脚跟

如果顺利拿到蘑菇街测试实习生的offer,别高兴太早,真正的考验还在后面。测试实习生转正考核的往往是三件事:用例设计能力、问题定位效率、团队协作质量。这三点从入职第一天就要开始有意识积累。

6.1 第一周先建地图

入职第一周,不建议急着看代码或执行用例。我的建议是先把"地图"画出来。你要搞清楚几件事:公司的业务链路是怎么串起来的,你负责的模块处于哪个环节;测试环境怎么申请、测试数据怎么准备、bug提交流程是什么;你旁边的开发、产品、测试负责人分别是谁,遇到问题该找谁。蘑菇街这种电商平台,业务链路特别长,从前端展示到订单到支付到售后,每个模块都有各自的系统。如果你只盯着自己手头的用例,不了解上下游,很容易遇到"这个bug其实出在另一个系统"的情况。

第一周可以主动找带你的导师要一份系统架构图,没有的话就自己画。把请求怎么走、依赖哪些服务、数据存在哪些表,大致过一遍。这些信息后面排查问题时会反复用到。

6.2 提bug是一门手艺

实习生经常犯的一个错误是:发现bug后直接截图丢到群里,说"这个页面坏了"。这种描述问题的方式效率极低,开发看到了也不知道从哪查起。高质量的bug描述应该包含:测试环境地址、前置条件、复现步骤、预期结果、实际结果、日志或抓包信息。复现步骤要精确到每一步操作,包括输入了什么数据、点击了哪个按钮。如果偶现,还要尽量描述出现频率和可能的影响因素。

我特别建议实习生养成一个习惯:在提bug之前,自己先按步骤重新走一遍,确认能稳定复现。如果同一操作有的能复现有不能复现,就把出现和没出现的场景都记录下来。开发拿到这个信息,定位速度会快很多,也会对你的专业度有直接认可。

6.3 测试用例先覆盖主流程,再补异常

实习生写测试用例时最容易犯的错是:一上来就抠边界值,把各种异常输入测了一遍,主线流程却没跑通。这其实是被笔试带偏了。笔试需要展示全面性,但实际项目里,你首先得保证最核心的用户路径是通的。正确顺序是先把主流程用例写完整、执行通过,再补异常场景、边界条件和兼容性场景。

比如测下单流程,先确认正常加购、结算、支付、查看订单能走通;再测库存不足、优惠券失效、支付超时这类异常;最后再考虑不同浏览器、不同手机型号的兼容问题。如果主流程都没过,异常场景测了也是一种浪费。

6.4 每周留半天做复盘

实习生的成长速度,往往取决于会不会复盘。我自己的习惯是每周五下午把这一周遇到的问题过一遍:哪些bug是自己没发现、被导师或开发提醒才补上的,为什么当时没想到;哪些bug描述不清,返工了几次;哪些新掌握的排查命令和排查思路,值得记下来。这些东西积累一个月,就是一份属于自己的测试知识点笔记。面试转正或者将来跳槽时,这些真实的案例比任何面试题答案都有说服力。

最后再分享一个我带人时反复强调的观点:测试这个岗位,入门门槛确实不高,但天花板很高。同样的功能,有人测的是"按钮能不能点",有人测的是"整个链路的数据是否一致、异常时是否可恢复、发布时风险是否可控"。蘑菇街那套测试实习生试题,说到底就是在筛选后面这一种人。准备面试时别只刷题,多去观察你手机里每个App的功能细节,多想一步"为什么这么做""如果不这么做会怎样",这些积累都会在面试和实际工作中体现出来。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询