美丽联合2019届校招的测试类笔试题,我印象还挺深的。当年这波题在圈子里流传度不低,很多准备面电商类测试岗的同学都拿它练过手。现在回头看,这套题最大的价值不是题目本身,而是它很典型地反映了互联网公司校招测试岗的考察逻辑:基础扎不扎实、用例设计有没有套路、数据库和Linux基本功过不过关、有没有一点代码思维。这篇文章我就以这套题为主线,把测试类校招笔试的常见题型、背后考点和应对思路完整拆一遍,适合正在准备测试开发、软件测试校招的同学参考,也适合想系统梳理测试基础知识的在职新人。
1. 校招测试笔试题到底在考什么
1.1 整张试卷的构成与时间分配
先说说这类电商公司测试校招笔试题的整体结构。一般来说,90分钟到120分钟的笔试时间,题量在40到60道之间,题型分布大致是:单选题15到20道,多选题5到10道,判断题5到10道,简答题2到3道,设计题(手写测试用例)1道,数据库SQL题1到2道,编程题1道,有时候还会加一道逻辑推理题。
我见过不少同学拿到卷子就开始按顺序刷题,结果做到后面的设计题和编程题时时间不够了。这里有个非常重要的时间分配原则:分值越高的题越要先保证完成度。像手写测试用例和编程题,一道题的分值往往抵得上10道选择题,就算选择题最后蒙几个,也不影响大局,但设计题写不完是真的可惜。
建议的时间分配是:选择题和判断题控制在35到40分钟内,简答题20分钟,SQL题10分钟,手写用例题20到25分钟,编程题留15到20分钟。如果逻辑题特别难,果断放到最后再做,别在一道题上卡超过8分钟。
1.2 测试岗笔试图谱与考察逻辑
我复盘了美丽联合这套题以及同期其他电商公司的测试笔试题,发现考察内容基本围绕六个板块展开:
| 考察板块 | 大概占比 | 典型题型 |
|---|---|---|
| 测试基础理论 | 25%-35% | 概念选择、判断对错、流程分析 |
| 用例设计方法 | 15%-20% | 等价类、边界值、场景法简答 |
| 数据库SQL | 10%-15% | 多表查询、子查询、聚合函数 |
| Linux与计算机网络 | 10%-15% | 常用命令、HTTP状态码、TCP/UDP |
| 编程与算法 | 10%-15% | 简单算法、字符串处理、数组操作 |
| 逻辑思维与场景题 | 5%-10% | 智力题、测试场景分析 |
这个结构其实透露了一个信息:校招笔试不指望你有多深的实战经验,它考察的是你有没有建立起测试思维的基本框架。所谓测试思维,说白了就是“怎么把一个问题拆成可以验证的颗粒度”,然后用系统的方法把这些颗粒度覆盖完整。这个能力很大程度是通过测试理论的学习和用例设计方法的训练建立起来的。
2. 测试基础理论题:拿到基础分的通关钥匙
2.1 等价类与边界值:用例设计的万能起手式
测试基础理论这块,最常考也最实用的就是等价类划分和边界值分析。这套题里有一道典型的单选:某个输入框要求输入1到100的整数,问以下哪个测试数据组合覆盖了有效的等价类和边界值。这种题考的不是你能不能写代码,而是你懂不懂测试用例设计的基本原则。
等价类的核心思想是“用最少的用例覆盖尽量多的输入情况”。把输入域划分成若干个子集,每个子集中的数据对程序来说都是“等效的”,只要测一个代表值就可以了。比如1到100的整数,有效等价类就是1到100之间的任意整数,无效等价类就包括小于1的整数、大于100的整数、非数字字符、负数、小数、空值、超长字符串等。
边界值分析则是等价类方法的重要补充,大量的程序缺陷都集中在输入范围的边界附近。1到100这个范围,需要重点测的边界值包括:0、1、2、99、100、101,再加上一个中间值比如50作为有效等价类的代表。我在现在的实际工作中写用例,依然遵循这条规矩:先划等价类,再补边界值,然后用错误推测法补异常场景。
多选题容易考到的是“下列哪些属于黑盒测试方法”,选项里混着白盒的语句覆盖、路径覆盖,如果不清楚黑盒和白盒的划分,很容易掉坑。黑盒测试关注的是功能需求,不关注内部实现;白盒测试关注的是代码逻辑和覆盖率。
2.2 场景法、判定表与错误推测的实战场景
场景法在电商系统测试中用得特别多,笔试也喜欢用具体的业务场景来考察。比如题目给出一个“用户下单支付”的流程,要求分析主场景和备选场景。主场景就是“登录→浏览商品→加入购物车→提交订单→支付成功→订单完成”,备选场景包括:支付超时、余额不足、库存不足、商品已下架、支付密码错误、网络中断等。
很多同学在答这类题的时候容易漏掉异常分支,只盯着正常流程走。但面试官想看到的恰恰是你对异常情况的把握能力。好的测试用例设计者,脑子里要有一个“如果这里出错了会怎样”的自动追问机制。比如下单时库存只有1件,两个用户同时下单,系统应该怎么处理?这就是并发场景下的用例设计,电商公司特别看重这一点。
判定表法的核心价值在于处理多个条件组合的情况。笔试中常见的题目是“某功能包含3个条件,每个条件有2种取值,请设计测试用例”。这时候直接用判定表列出来,条件组合有2的3次方共8种情况,规范地列出每一种组合的预期结果,比拍脑袋写用例要系统得多。
3. 手写测试用例:电商核心链路的高频考法
3.1 购物车与下单链路的用例设计思路
美丽联合这个公司是做电商业务的,所以手写用例题基本逃不开购物车、订单、优惠券、支付这几个核心模块。这类题给的场景一般很简单,比如“请针对购物车删除功能设计测试用例”,但越简单的题越考验功力。
我拿到这种题会先划分测试维度,而不是一条接一条地蒙头写。一般来说,维度包括:功能测试、异常测试、兼容性测试、性能测试、安全测试、界面易用性测试。功能测试是最核心的,要覆盖正常流程和异常流程。
拿“购物车删除商品”来说,功能方面至少要有:单选删除、多选删除、全选删除、删除最后一件商品后购物车是否显示为空、删除后商品是否从结算列表移除、删除后能否恢复(比如有“恢复删除”功能的话)。异常方面要考虑:网络中断时点击删除、删除请求超时重复点击、删除不存在或已失效的商品、删除过程中商品库存发生变化。兼容性至少要想到:不同操作系统下、不同手机型号下、不同浏览器下的表现。性能方面简单提及“批量删除时是否需要翻页、删除1件和50件商品的响应时间差异”就够了。
写用例时一个常见的送命操作是:只写“删除成功,购物车商品消失”这种一句话用例。有经验的面试官一看就知道没做过事。一条合格的用例至少包含:用例编号、所属模块、用例标题、前置条件、测试步骤、测试数据、预期结果、优先级。写的时候不用太纠结格式,但关键要素必须完整,尤其是“前置条件”和“测试数据”,这两个是最多人都忽略的地方。
3.2 优惠券和支付模块的设计要点
再来看看优惠券模块的用例设计,这是电商笔试的保留题型。优惠券涉及的状态有:未使用、已使用、已过期、已锁定(下单未支付时)。设计用例时要注意:领券成功的条件(用户是否登录、是否符合领取条件、是否已领完)、用券的规则(满减门槛、适用范围、使用时段)、过期处理(过期后是否还能使用、过期提醒)、退款的场景(订单使用了优惠券后退款,优惠券是否退回、退回后是否还有效)。
这些场景里有一个特别容易考察的细节:优惠券金额和订单金额的边界关系。比如一张满100减20的优惠券,订单总额刚好是100.01元能不能用?刚好是100.00元能不能用?设计用例的时候,这种边界值一个都不能漏。
支付模块的用例设计更看重流程的完整性。正常的支付流程是:提交订单→选择支付方式→跳转支付平台→支付成功→回调通知→订单状态更新。测试用例要覆盖支付成功、支付取消、支付超时、支付密码错误、余额不足、重复支付回调、支付结果异步通知延迟等情况。尤其是“支付成功但订单状态未更新”这个场景,在真实项目中很常见,笔试时能把这种场景写出来,面试官会认为你确实了解分布式系统下的数据一致性问题。
4. 数据库与Linux:测试工程师的基本功
4.1 SQL题目考察思路与典型场景
测试岗的SQL题不会考得太难,重点在查询语句,主要考察:单表查询、条件过滤、聚合函数、排序分组、多表连接、子查询。美丽联合这套题里的SQL题我记得考了一道商品表和订单表的关联查询,要求查出一个分类下销量前十的商品。
这类题的思路其实是固定的。先明确要查哪些字段、从哪些表取数据,再想清楚关联关系,最后写过滤条件和排序。以“查询每个分类下的商品数量”为例,常规写法是:
SELECT category_id, COUNT(*) AS product_count FROM product GROUP BY category_id;如果题目加了一个条件“只统计库存大于0的商品”,就变成:
SELECT category_id, COUNT(*) AS product_count FROM product WHERE stock > 0 GROUP BY category_id;再加一个难度等级“只返回商品数量大于10的分类”,就需要用到HAVING子句:
SELECT category_id, COUNT(*) AS product_count FROM product WHERE stock > 0 GROUP BY category_id HAVING COUNT(*) > 10;笔试里经常有人把WHERE和HAVING搞混。记住一条:WHERE是在分组前过滤行,HAVING是在分组后过滤组。这个区别在SQL题里几乎是必考的。
如果考到子查询,典型的场景是“查询订单金额大于平均订单金额的订单”。这种题有两个解法,一种是用子查询,一种是用窗口函数。校招笔试一般允许子查询,但如果你会窗口函数会是个加分项。
SELECT order_id, amount FROM orders WHERE amount > (SELECT AVG(amount) FROM orders);4.2 Linux常用命令的笔试考察方式
Linux命令在测试笔试里考的其实很基础,主要是那些测试人员日常要用的命令。比如:查看进程用ps、查看端口占用用netstat、日志查看用tail和grep、文件权限用chmod、文件查找用find和grep。出题方式通常是给出一个场景让你选择对应命令,或者给出命令选项问它的作用。
一个很常见的题目是:线上有个bug,需要查看某个应用的实时日志,应该用什么命令组合?标准答案是:
tail -f app.log如果想过滤出包含某个关键字的日志行,就是:
tail -f app.log | grep "ERROR"如果我记得没错,这类题经常在“查看日志中某时间段的错误信息”这个场景上周旋。实用做法是先用grep定位关键词,再配合head和tail截取上下文。我在实际排查问题的时候最常用的组合是:
grep -n "2024-01-01 10:00" app.log | head -50这条命令的意思是在日志文件中查找特定时间点的内容,并显示前50行,-n参数会显示行号,方便回溯上下文。笔试虽然不考这种复杂组合,但理解管道符的含义很重要,它几乎算Linux题的必考概念。
网络基础方面,HTTP状态码是高频考点。302是重定向,400是客户端请求语法错误,401是未认证,403是禁止访问,404是资源不存在,500是服务器内部错误,502是网关错误,503是服务不可用。测试人员看到502和503要能区分:502是网关拿不到后端响应,503是服务暂时不可用,可能是过载或维护中。
5. 编程题与逻辑思维题:拉开差距的分水岭
5.1 常见编程题目的解题方向
测试岗的编程题和开发岗有区别,难度通常低一档,核心是考察最基本的编码能力和逻辑思维。常见的题目类型包括:字符串反转、数组去重、求最大公约数、简单排序、回文判断、二分查找、括号匹配等。美丽联合这套题里的编程题,我记得是跟字符串处理有关的。
编程题不一定限定语言,C、Java、Python都可以。但既然你是投测试岗,大部分同学选Python写的比较多,因为测试工具链里Python的使用频率最高。一个常见的字符串去重题,用Python可以这样写:
def deduplicate(s): result = "" for ch in s: if ch not in result: result += ch return result这个写法时间复杂度是O(n^2),笔试能过,但如果你用集合去重再保留原有顺序,会显得更有意识:
def deduplicate(s): seen = set() result = [] for ch in s: if ch not in seen: seen.add(ch) result.append(ch) return "".join(result)看起来差别不大,但面试官从这段代码能看出你有没有考虑效率问题。测试岗的编程题不追求复杂的算法,但要写得干净、有注释、边界考虑周全,尤其是空输入、单个字符输入、全重复输入这些情况,都要在代码里体现处理逻辑。
还有一类编程题跟测试技能直接挂钩,比如“写一个函数判断一个数是否为素数”,或者“实现一个简单的计算器”。这类题本质上考察的是你写代码的规范性,如果要写测试代码的话,能不能顺便写出几条用例来验证自己的函数,这是测试岗笔试编程题区别于开发岗的关键加分点。
5.2 逻辑假设题与性能基础概念的结合考察
逻辑题在校招笔试里偶尔会作为附加题出现,占比不高,但很影响整体印象分。典型的逻辑题有:烧绳子问题、过桥问题、找假币问题、赛马问题等。这类题目考察的不是知识储备,而是分析和推理能力。
拿经典的“8个球找1个较重的球,天平最少称几次”来说,答案是2次。思路是先把8个球分成3、3、2三组,第一次称3对3,如果平衡就在剩下的2个里,再称一次解决;如果不平衡,重的那组3个球里取两个再称一次,也能判断出来。这类题的关键是把问题规模二分或三分,而不是一个一个去比较。
性能测试的基础概念也是笔试常客,常见的考察点有:响应时间、吞吐量、并发用户数、TPS、QPS、PV、UV等概念的区别。特别是TPS和QPS,很多人以为是一个东西,其实不完全一样。QPS是查询每秒的请求数,TPS是每秒的事务数,一个事务可能包含多个请求。举例来说,一个下单操作,前端会调用商品查询、库存校验、订单创建、支付等多个接口,那么一次下单就是一个事务,但会产生好几个QPS。
性能测试的流程也是一个简答热点:需求分析→测试计划→脚本编写→压力测试→负载测试→稳定性测试→瓶颈分析→调优→回归测试。笔试里如果问到性能测试的步骤,按照这个链路答基本不会丢分。
6. 测开方向的加分项与备考建议
6.1 自动化与接口测试在笔试中的体现
近年来的测试岗笔试题有一个明显趋势:自动化测试和接口测试的占比越来越大。美丽联合这套题里虽然自动化题目不多,但同期其他大厂的笔试题里,自动化相关的概念题已经稳定出现了。
自动化测试常考概念包括:selenium的元素定位方式(id、name、class_name、xpath、css_selector)、PO模式(Page Object)设计、数据驱动测试、关键字驱动测试、测试框架pytest和unittest的区别。接口测试常考的是:GET和POST的区别、HTTP与HTTPS的区别、cookie和session的区别、token认证机制、接口测试的断言内容。
有一个概念题非常经典:“http和https的区别是什么”。正常的回答是:HTTPS在HTTP的基础上加了SSL/TLS加密层,数据传输更安全;默认端口不同,HTTP是80,HTTPS是443;HTTPS需要申请CA证书。这是面试官最想听到的三点,但如果笔试是简答题,可以再补充一句:HTTPS解决了数据被窃听和篡改的风险,但握手过程更耗时,对性能有一定损耗。
再比如cookie和session的区别,这个也是高频题。cookie存放在客户端,session存放在服务端;cookie有大小限制(一般是4KB),session在服务端受内存限制;cookie可以被用户禁用,session不受影响。记住一句话:cookie是通行证,session是服务端的档案室。
6.2 备考路线与几点实用建议
整套题复盘下来,我最大的感受是:校招测试笔试的题库虽然千变万化,但核心考点是非常稳定的。如果你准备时间有限,按这个优先级来复习:先把测试基础理论(尤其是等价类和边界值)吃透,然后练熟SQL的基本查询和常用Linux命令,再花时间写几套手写测试用例的题,最后刷一些Python或Java的基础编程题。
写用例题的时候,一定要自己动手写,不要只看别人的答案。我见过很多同学看解析的时候觉得“这不难”,但一到笔试现场,30分钟写不了几个完整的用例。用我前面说的维度拆解法,每个模块至少练两遍,直到形成肌肉记忆。
SQL题建议多练习GROUP BY与HAVING的组合、子查询和多表连接,这三个点是电商类笔试SQL题的重灾区。Linux命令则要理解原理,不要死记硬背。比如管道符的本质是把前一个命令的输出作为后一个命令的输入,理解了这一点,任何命令组合的题你都能自己推出来。
再一个问题就是编程题的时间控制。如果一道编程题超过20分钟还没有完整思路,先写一个暴力解法拿部分分,不要空着。测试岗笔试的编程题往往只要逻辑正确就能拿大部分分数,不要求最优解。
最后分享一个小技巧。笔试的时候,如果遇到不会的题,千万不要空着。尤其是简答题和设计题,把你想到的相关知识点都写上去,哪怕只是列个大纲,也比空白卷强得多。测试岗的笔试评分往往更看重答题思路,你写出了等价类的划分思想,就算最终用例写得不完整,面试官也会给你相应的分数。这是我带过的校招生里,最实用的一条应试经验。