尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

电商测试岗校招笔试解析:从业务全局到用例设计

电商测试岗校招笔试解析:从业务全局到用例设计 每年校招季测试岗的笔试题目一出来总有人对着满屏的业务场景题发懵。美丽联合2019届校招测试类笔试题在我印象里就是这种典型——整张卷子几乎没有死磕纯算法反倒把大篇幅给了电商业务逻辑、场景设计、网络协议和数据库操作。很多人拿到通知后先闷头刷了一周LeetCode结果上了考场才发现真正卡住自己的是怎么给优惠券叠加写测试用例下单后极端断电怎么保证数据一致这类问题。这篇文章不是给你对答案的而是把这套笔试题背后的出题逻辑剥开电商公司的测试岗到底在筛选什么样的人每类题型考察的是哪层能力答题时怎么踩得分点我会结合当时大家复盘出的高频题型、实际答题思路以及我后来带校招生时看到的典型失分点把整件事讲透。不管你是正在准备校招的应届生还是打算从开发转测试这份拆解都值得花十分钟看完。1. 这份卷子不考算法考的是电商业务全局观1.1 从题型分布看岗位画像先还原一下卷面结构。美丽联合这类电商公司的测试笔试题通常由四到五个模块组成业务情境题约30%~40%、网络与接口基础约20%、数据库与Linux操作约20%、自动化与测试工具基础约10%~15%、逻辑题或简答题约10%。注意这个占比业务情境题永远是重头。为什么因为电商测试工程师日常面对的不是排序算法复杂度这类抽象问题而是用户领了一张满199减100的券又叠加了店铺满300减30的活动结算时优惠顺序怎么算才对商品秒杀时超卖了你怎么办。这类问题不需要你写一行代码但需要你像一个产品经理加半个开发一样把整个业务链路在脑子里跑一遍。当时很多同学栽就栽在惯性思维上。校招季大家普遍被算法题毒打惯了看到笔试题里有逻辑题就以为要写递归、写动态规划结果浪费大量时间在草稿纸上推演根本不存在的复杂度分析。实际上测试岗笔试更看重的是你能不能用一个系统的框架去拆解复杂问题而不是能不能在四十分钟里写出一个完美的解法。1.2 电商业务特有的测试难点为什么偏偏是电商公司的卷子这么重业务因为电商系统有几个特性直接决定了测试工作的难度。一是链路长。一个用户从登录、搜索、加购、下单、支付、到收发货中间跨越前端、网关、订单、库存、支付、物流多个子系统。任何一个环节出问题用户感知到的就是买不了东西或钱扣了没发货。这就逼着测试工程师必须有全局视角而不是只盯着自己那一亩三分地。二是并发高。秒杀、大促、双十一这种场景瞬时流量能冲到正常值的几十上百倍。超卖、库存扣减不一致、支付回调重复通知全是并发场景下的经典bug。笔试题里经常出现如何测试一个秒杀系统如何防止库存超卖这类问题考的就是你有没有并发意识。三是状态多。订单有待支付、已支付、已发货、已完成、已取消、退款中、退款完成等一堆状态每个状态之间还有流转条件。测试这种状态机最怕漏掉边界跳转比如已发货的订单能不能取消退款中的订单能不能修改收货地址。笔试里让你设计订单状态的测试用例本质上就是看你有没有穷举状态流转的能力。这套业务思维恰恰是很多只刷过算法题、没接触过真实业务的同学最欠缺的。所以从岗位筛选的角度看出题人从一开始就没打算招算法高手他要招的是能直接上手看业务、找风险的人。2. 业务逻辑题从用户下单到状态流转的全局观2.1 典型场景拆解电商下单流程的测试用例设计我记得当时卷子上有一道很经典的题用户从购物车提交订单到支付成功中间会经过哪些步骤请设计一份测试用例。这种题看似开放实际在考你的分层拆解能力。答题时别一上来就罗列用例一定要先画业务流程。你可以先在心里把链路拆成这么几段前置条件用户已登录、购物车有商品、商品有库存、收货地址有效动作一提交订单系统生成订单号锁定库存价格快照动作二支付调用接入微信/支付宝/余额等渠道产生支付流水号动作三支付结果回调第三方异步通知订单系统订单状态由待支付变已支付动作四库存扣减、通知仓储、生成物流单拆完链路再针对每个节点写用例。我当时自己总结的答题框架是四步走正常流程、异常分支、数据校验、状态流转。举个例子正常流程普通商品下单支付成功订单状态变为已支付库存减一。异常分支支付超时用户取消订单库存回滚支付回调重复通知系统不重复发货用户下单时库存只剩一件两个人同时买只有一人成功。数据校验订单金额计算是否正确优惠券、满减、运费叠加是否按规则顺序商品价格在下单后被改价已生成的订单是不是按快照价执行。状态流转已支付订单能不能取消已发货订单能不能申请退款退款完成后订单还能不能修改收货地址如果你能在卷面上把这些维度写全面试官一眼就能看出你具备测试敏感度。最怕的就是只写正常下单成功、库存减少这种谁都看得见的用例那等于告诉对方你没有场景化思考能力。2.2 答题框架等价类、边界值、场景法怎么组合用业务题往往不直接告诉你请用等价类划分法但你需要把方法论内化在答案里。比如考优惠券金额输入框怎么测纯用等价类太单薄纯用边界值又显得套路。一个高分的组合思路是先按输入域划分合法与非法等价类0元以下、首次生效、叠加上限再在每个等价类中挑边界值0、1、19.9、99.9、100、999.99最后补场景——用户领券后商品退款券是否返还券过期前最后一秒使用是否成功。这样既有方法依据又有业务验证得分点全踩住了。我还见过一种很实用的套路叫一正一反一异常每个正常用例后面跟一个反向用例和一个异常用例。正向保证功能可用反向保证逻辑正确拒绝错误输入异常保证在系统故障、网络超时、数据不一致时能安全兜底。笔试答题时间紧张用这个套路至少能保证答案的覆盖面不丢分。2.3 限购、超卖、库存扣减并发场景题怎么答库存超卖是电商测试的高频考点也是当时卷子里区分度最高的一道题。我见过很多同学的答法是用JMeter压测看会不会超卖这当然没错但它只回答了问题的一半。真正完整的答题思路至少包含三块先说明超卖为什么会发生并发请求同时读到库存为1都判断可卖都执行扣减再给验证方案接口压测数据库库存校验日志核对最后讲监控与兜底扣减后是否立即校验受影响行数、Redis预扣减异步对账、超卖报警。如果你还能补一句压测时要关注TPS和响应时间拐点同时监控数据库连接池是否被打满这道题基本就稳了。它能体现你不仅会使用工具还懂系统层面的资源瓶颈这在校招生里是绝对的加分项。3. 网络协议与接口题测试工程师的通信基本功3.1 HTTP接口测试的高频考点电商系统前端和后端、服务和服务之间大量通过HTTP接口通信所以笔试里网络模块基本围绕HTTP展开。高频考点我总结下来就这几个请求方法、状态码、请求头和请求体结构、Cookie与Token鉴权、幂等性、接口安全。先说状态码。这一块别死背要结合场景理解。200是成功、302重定向、400参数错误、401未认证、403无权限、404不存在、500服务器内部错误、502网关错误、504超时。笔试里常见考法是给你一个抓包结果让你判断问题出在前端还是后端。比如一个请求返回403很多人第一反应是页面打不开但正确的定位思路是先确认有没有带正确的Token再确认当前账号是否有权限最后排查IP白名单这类服务端配置。再说请求方法。GET和POST是最常考的但别只答一个GET拿数据、POST提交数据。更深一层的理解是GET参数拼接在URL里有长度限制且会进日志所以不适合传敏感数据POST请求体更安全、可以传大对象但也不是绝对安全抓包一样看得见所以密码字段必须加密传输。这种细节才是测试工程师该有的敏感度。3.2 接口测试用例的设计要点有些笔试题直接给你一个接口定义让你写测试用例。接口定义可能长这样POST /api/orderHeader: Content-Type: application/jsonBody: {productId: 123456, num: 2, couponId: 8888}Response: {code: 0, orderId: xxxxx, payAmount: 198.0}拿到这种题别急着写用例先拆参数。每个字段都要从几个维度过一遍必填、选填、类型、长度、取值范围、关联关系。productId为空会怎样、传字符串会怎样、传不存在的商品会怎样num传0、传负数、传超库存数会怎样couponId传了不属于这个用户的券会怎样。响应层面要验证正常时code是0异常时code返回什么、有没有错误信息、HTTP状态码是不是200但业务码不是0。这里有个关键得分点业务异常不等于HTTP异常。很多接口即使逻辑失败HTTP状态码依然返回200只是body里的code字段变成了非0值。如果没这个意识写用例时会漏掉大量业务校验场景。我当时是把这层窗户纸点破了之后好多同学才恍然大悟原来自己以前测接口只看状态码是不完整的。3.3 接口安全基础Token、加密与越权网络模块里偶尔还会带一道安全小题比如如何防止接口被恶意刷什么是越权漏洞。这类题不需要你会渗透只要基础概念扎实。越权的意思是用户A用自己的Token去查或者改用户B的数据如果接口只校验了是否登录没校验操作的数据是否属于当前用户就产生越权。测试时的思路就是用一个普通账号创建订单再用另一个账号尝试访问这个订单的详情接口看能不能看到数据。这属于功能测试之外的探索性思维笔试题里出现了就是在考察你有没有安全测试意识。再比如Token和Cookie的区别。简单说Cookie是服务端发给浏览器的小块数据浏览器每次请求自动带上Token更像一张无状态通行证服务端通过签名验证身份常用于移动端和前后端分离架构。测试时要注意Token有没有有效期、刷新机制以及关键操作是否二次校验。4. 数据库与Linux操作题数据一致性与日志排查4.1 数据库题SQL编写与事务理解缺一不可电商系统最重的依赖就是数据库所以笔试题里数据库模块至少占15%左右。考法很直接一种是让你写SQL另一种是考事务和锁的概念。SQL题常考的就是查订单表里逾期未支付的订单统计每个商品类目的销量Top10关联用户表和订单表查出所有钻石会员的消费总额。写这类题你只要掌握三大件就够了JOIN、GROUP BY、聚合函数。但要注意写完之后一定要自己检查关联条件对不对、分组字段有没有漏、要不要加HAVING来过滤分组后的结果、需不需要用DISTINCT去重。我在帮人改笔试题的时候发现丢分往往不是因为不会写而是因为这些小细节。事务题常见考法是你在测试一个支付系统用户支付后数据库突然断电数据会出现什么情况或者什么是脏读、不可重复读、幻读。这里建议把MySQL默认的InnoDB事务隔离级别可重复读和事务四大特性ACID原子性、一致性、隔离性、持久性结合起来记。比如原子性对应的就是要么全部成功要么全部回滚——支付扣款和订单状态更新必须在一个事务里执行否则就是扣了款但订单还显示待支付。4.2 接口幂等性在数据库层的体现我在这里特别想单独提一句幂等性因为它是一个高频考点但校招生普遍答不好。幂等的意思是同一个操作执行一次和执行很多次结果是一样的。在支付场景里尤其重要——第三方支付平台的回调通知可能因为网络原因发送多次如果你的系统在收到两次支付成功通知后扣了两次库存、把订单状态从待支付翻到已完成又翻到已完成那就不幂等了。测试时的验证思路就是用同样的支付流水号重复回调两次看订单状态是否仍为已支付、库存是否只减了一次。如果业务代码没用唯一流水号做防重校验就会出事。这类题答好了能直接证明你理解分布式下的数据一致性是妥妥的加分项。4.3 Linux排查题日志定位与故障排查思维Linux在笔试题里一般不会考太深但给你一个场景让你用命令去查问题这种题出现频率很高。比如用户反馈下单很慢你怎么排查我建议的答题路径是先看系统负载top、再看进程线程ps、接着看日志tail/grep、最后看网络netstat/ping/telnet。分层排查的思路比单纯列命令要重要得多。具体到命令层面高频操作就这几个tail -f /var/log/xxx.log 实时跟踪日志grep 关键字 xxx.log | tail -100 查最近100条相关日志find / -name *.log 找日志文件top 看CPU和内存占用ps -ef | grep java 查Java进程netstat -tunlp 查端口监听情况我面试校招生时发现一个通病大家能背出命令但不知道在真实场景里怎么组合。比如支付超时这个问题正确思路是先去应用日志里搜这个订单的流水号看卡在哪一步是支付网关没响应还是回调没收到然后再去查数据库里订单状态是不是已经更新最后看是不是有线程阻塞。几个命令穿插使用才能定位问题。这种排查思维笔试里不直接考但如果你在Linux题里回答得有条理面试官是能看出来的。5. 自动化测试与工具栈笔试里真正的拉分项5.1 自动化框架题别只会报工具名自动化测试在校招笔试题里分值不算最高但却是区分度很大的模块。很多同学一看到什么是Selenium什么是Appium就开心觉得这是送分题。但笔试真正想考察的是你有没有真正理解自动化的核心机制而不是会不会报工具名。比如Selenium的原理题会问WebDriver是怎么驱动浏览器的。你不能只答自动化测试工具完整答案是Selenium通过WebDriver协议把自动化指令编码成HTTP请求发送给浏览器自带的驱动如ChromeDriver驱动再调用浏览器内部接口执行操作同时把执行结果返回给脚本。顺序是脚本 - WebDriver - 浏览器驱动 - 浏览器。再比如定位策略xpath和CSS Selector怎么选。我的建议是优先CSS因为语法简洁、执行速度快xpath在需要根据文本内容定位或向上查找父节点时更有优势。笔试如果出题如何定位一个动态变化的元素考察的是稳定定位的思路不用绝对路径改用相对定位、通过data属性定位、通过class组合定位再加上显式等待来规避元素未加载的问题。5.2 显式等待与隐式等待校招生最常踩的坑自动化的基础题里Selenium中隐式等待和显式等待的区别出现频率非常高。当时我们那批人里至少有一半人的答案是一个是等固定时间一个是等元素出现这只能算勉强沾边。正确的理解是隐式等待是全局的设置一次对后续所有元素查找生效它轮询的是元素是否存在只要在等待时间内找到就继续执行超时则报错显式等待是针对某个特定元素的可以自定义轮询间隔和期望条件比如元素可见元素可点击元素出现某个属性值。关键区别是应用场景页面加载慢的时候适合隐式等待而某个元素因异步加载或动画延迟出现时必须用显式等待。我的实测建议是能显式就显式不要依赖隐式等待。因为隐式等待没法处理元素存在但不可用的情况如果页面一直有个按钮是disabled状态隐式等待会认为查找成功结果一操作就报错。5.3 性能测试与安全测试基础题性能测试里JMeter是校招笔试的常客。除了JMeter能做什么这种基础问题还会考一个关键概念什么是并发用户数和TPS两者有什么区别。并发用户数是指同一时刻正在执行操作的虚拟用户数TPS是系统每秒处理的事务数。两者有关联但不相等——100个并发用户如果每个用户每秒只发一个请求TPS约等于100但如果有的事务内部有多个请求那就不能简单等同。笔试里如果让你估算一个系统需要多少并发用户或者测试结果中TPS上不去怎么调优你就可以从服务器资源、数据库连接池、代码性能、网络带宽几个方向去分析答得越完整越能得分。安全测试在校招笔试题中通常是概念级的比如什么是SQL注入什么是XSS什么是CSRF。答题时不用背长篇定义要能说出原理和防御方向。SQL注入就是用户输入被拼进SQL语句导致数据库被非法操作防御是参数化查询XSS是攻击者在前端页面注入恶意脚本防御是转义输出CSRF是跨站请求伪造用户不知情的情况下被借用身份发起请求防御是Token校验和Referer校验。能用自己的话把原理讲明白比生硬的背诵得分高得多。6. 笔试中的时间分配与典型丢分点6.1 拿到卷子先做这三件事很多人笔试失利不是因为不会而是因为时间分配出了问题。我见过太多同学在前两道开放性业务设计题上洋洋洒洒写了一大篇最后数据库和Linux操作题没时间做而后面两道恰恰是最好拿分的。所以拿到卷子后别急着动手先花三分钟做三件事浏览全卷标注每道题的分值先做自己有把握的、短平快的题最后再啃复杂业务设计题。按照经验一份90分钟的测试笔试题理想的时间分配应该是业务逻辑题35分钟网络与接口题15分钟数据库与Linux题20分钟自动化与工具题10分钟最后留10分钟检查。很多同学栽在完美主义上——业务题总想写全所有场景一个用例反复涂改结果后程崩塌。记住业务设计题的目标是覆盖面够广、关键点都踩到不是写一份能直接上线的测试计划。6.2 高失分点漏边界、不校验、不幂等结合我当时看到的卷子复盘以及后来以面试官身份看校招笔试经验失分点其实高度集中。第一个是只测正常路径。写测试用例只写输入正确数据验证正确结果完全没有考虑不输入、输错、输超长、输特殊字符。对策就是前面讲的一正一反一异常。第二个是不写预期结果。很多人写测试用例只写步骤不写预期输出这在阅卷时会显得你很业余。一个完整的测试用例必须包含前置条件、操作步骤、测试数据、预期结果、优先级。即使笔试没明确要求也按这个结构写显得专业。第三个是接口题只看HTTP状态码。我在前面强调过业务失败不等于HTTP失败。如果你设计的用例里没有code非0的断言接口题基本白答。第三个是不考虑幂等性。几乎所有带交互的业务场景都可以补一句重复请求、重复支付、重复提交时系统应做防重处理这既是加分项也是防止漏测的兜底项。6.3 开放题怎么答不跑偏有些笔试卷子末尾会来一道请设计一个电商首页的测试方案或者如果线上出现大面积无法下单的问题你怎么排查。这类开放题没有标准答案但也有明确的得分逻辑。我的建议是先框定范围再分层拆解最后给结论。比如线上大面积无法下单这个问题可以分四步答先确认影响范围是所有用户还是部分用户、是所有入口还是单个入口先看网关日志和监控大盘再看服务状态订单服务、库存服务、支付服务有没有挂看进程在不在、有没有OOM再看依赖资源数据库连接池是否打满、Redis是否雪崩、MQ是否堆积最后看发布影响最近有没有上线新版本、有没有配置变更必要时回滚。不要一上来就猜可能是数据库挂了哪怕猜对了没有排查过程也拿不了高分。7. 从笔试题反推应届生该怎样准备测试岗校招7.1 别盲目刷题围绕电商链路建知识树看完这份笔试题你应该能感觉到测试岗笔试根本没法靠刷LeetCode押中题。它考察的知识域非常明确如果非要说一个准备方向那就是围绕一条完整的业务链路建一棵知识树。拿电商来说你只需要拿一条用户下单链路把每一环可能涉及的知识点补起来前端页面Selenium - 网络请求HTTP - 后端接口接口测试 - 业务逻辑用例设计 - 数据库数据一致性 - 性能并发 - 安全越权 - 日志监控Linux命令。每补一个知识点就去JD里看对应岗位要求里有没有这个词。这样形成的是一个网状知识结构而不是一堆孤立的考点。7.2 用一个项目把知识点串起来校招生最大的劣势是没经验但笔试其实不要求你有真实经验要求的是你思考过这些事。所以哪怕没有实习经历也建议自己做一个Demo项目把整条链路串起来。比如搭一个极简的电商后端可以用Java Spring Boot或者Python Flask实现用户注册、商品列表、下单、支付回调模拟这几个接口然后用JMeter做并发下单测试验证库存不超卖再用Selenium写一个自动下单的UI脚本最后写一篇文章记录你发现了哪些bug、怎么定位的。这样一个项目覆盖了接口、数据库、自动化、性能、日志排查五大模块笔试里遇到任何场景题你都能从实际操作过的角度去回答。7.3 校招季真正的面试加分动作笔试只是第一关面试时考官通常会拿着你的笔试卷追问。这时候能加分的动作有三个。第一主动讲我当时这道题为什么这么答把你的思考过程暴露出来。即使答案不完美思考过程本身就很有价值。第二主动承认这个场景我没有实际测过但按照我的理解应该这样拆解。校招生不会不可怕可怕的是不会还硬编。第三准备一个你印象最深的bug的故事。不需要多高级哪怕是双11压测时发现秒杀接口有超卖风险只要你能讲清楚复现步骤、定位过程、修复验证就比背一堆八股文有说服力得多。7.4 一条实操建议考前自己模考一次我最后想分享的备战建议是考前至少完整模考一次。不是只做几道题而是找一个安静环境定好闹钟把一份往年真题从头到尾写一遍严格控制时间。我见过太多人在面试前只看真题不写真题结果一上考场发现两个小时手写得又慢又乱业务题根本写不完。模考最重要的不是分数而是让你体验到时间压力下如何做取舍。哪类题先做、哪类题果断放弃、答题时写多少字刚好合适这些感觉只能在模考里获得。我当时认识一个很稳的女生她考前把近三年的三份卷子各模考了一遍每份都严格按考试时间走最后正式笔试时提前十五分钟答完还有时间检查出两处参数写错的低级失误。功夫用在考前考场才不慌。如果你只记得这篇文章里的一件事我希望是那句一正一反一异常。测试的本质不是证明系统能用而是通过各种方式证明它在极端情况下也不会崩。带着这个心态去答题你写出来的用例本身就比单纯背过多少条用例模板的人高一截。
返回列表