ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

蘑菇街测试实习生面试复盘:用例设计、SQL与自动化测试考点解析

蘑菇街测试实习生面试复盘:用例设计、SQL与自动化测试考点解析 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的几种类型也经常考。我拿一道典型的题目举个例子。面试官给两张表用户表usersuidusernameregister_time和订单表ordersorder_iduidamountpay_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 -h和df -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的功能细节多想一步为什么这么做如果不这么做会怎样这些积累都会在面试和实际工作中体现出来。
返回列表