
提到测试开发岗的笔试很多人第一反应是“不就是刷题嘛”。说实话我见过不少候选人拿着LeetCode从头刷到尾结果笔试依然挂掉问题就出在没想明白一件事——测试开发岗位的笔试题和纯开发岗位的笔试题出题逻辑和考察重点完全不一样。今天借京东2019春招测试开发类试卷这个话题聊聊测试开发岗笔试到底在考什么、为什么这么考、以及怎么准备才是有效路径。这份试卷放在今天看依然很有参考价值。京东的业务复杂度摆在那里——商城、物流、金融、生鲜多条线并行测试开发不仅要会写代码还要懂业务逻辑、懂数据流转、懂线上问题排查。所以它的笔试题型分布、考察深度基本就是一线互联网大厂测开岗的典型样本。无论你是准备春招秋招的应届生还是想从功能测试转测试开发的在职人拆解这份试卷都能帮你少走很多弯路。1. 从试卷结构反推岗位能力模型京东测开笔试到底在筛什么人1.1 题型分布背后的岗位定义京东2019春招测试开发类试卷整体可以分成几大块客观题单选多选、编程题、SQL题、场景设计题。这个结构在测开岗笔试里非常典型和纯后端开发岗有明显区别——纯开发岗一般是客观题加两到三道算法题算法题比重很大测开岗的编程题数量相对少一些但会额外考察数据库、Linux、测试用例设计这些维度。为什么这么设计因为测试开发的日常工作场景决定了它需要的是“多边形战士”。我举个实际例子一个电商订单系统的接口自动化测试你需要做几件事——先写脚本调接口这需要编程能力参数要造数据这需要会写SQL接口报错了要查日志这需要Linux操作能力出了问题要判断是前端还是后端、是网络还是服务端这需要网络基础最后整个测试策略怎么定、哪些场景优先覆盖这需要测试理论功底。所以每一类题型都不是随便出的而是对应一个真实的日常工作场景。1.2 代码题占比为什么没有想象中高有些同学拿到试卷可能会觉得“编程题不够难啊比我刷的LeetCode简单多了”。这其实是个认知误区。测开岗考察编程题目标不是筛出算法竞赛选手而是确认你具备“能独立写测试工具、能看懂被测系统的代码逻辑”的工程能力。代码题难度控制在LeetCode简单到中等恰好说明这个岗位的核心竞争力不在算法本身而在测试思维和业务理解。但这里有个隐藏加分点代码题的代码规范和边界处理。我记得这类试卷里往往会出现字符串处理、链表操作一类的题目看起来不难但你把代码写得结构清晰、异常处理完整和写得能跑就算赢在阅卷人眼里是完全不同的评价。笔试不只看结果也看代码习惯因为团队招人是要一起协作的代码风格太差后面review时大家都会很难受。2. 高频考点逐项拆解哪些题一定要稳稳拿分2.1 编程题考的不是算法是工程中的“最小可用能力”测开笔试中的编程题有几个高频方向字符串操作反转、匹配、去重、链表操作反转、环检测、数组处理排序、查找、简单动态规划最大子序列和这类。以字符串反转这类题为例你至少应该有三层思路最简单的是直接用语言内置API进阶一点的是双指针原地交换再进一步可以考虑如果字符串里面有Unicode字符怎么处理、内存受限怎么处理。我建议备考时不要只背题解要按“暴力解→优化解→工程化解”三层来准备。比如“判断一个字符串是不是回文串”暴力解法是反转后比较优化解法是双指针从两端往中间扫工程化解法是考虑忽略大小写、忽略非字母数字字符、处理null值。面试官后续追问的往往是这第三层因为这是测试开发日常最需要的思维方式——把各种边界条件都考虑到。2.2 数据库题造数、查数、验数是测开日常三件套数据库在测开笔试里的权重非常高。京东这类电商业务数据表之间关联关系很复杂笔试里的SQL题通常涉及多表关联、聚合查询、子查询、分组排序。举个例子有一个典型题目是“查询每个用户的订单总金额按金额降序排列只要消费金额大于1000的用户”。这道题考察的点就很清晰inner join还是left join、group by的正确使用、having和where的区别、order by的排序方向。我在实际工作中SQL几乎是每天都要写的。接口测试要造测试数据、要校验数据库里的落库结果、要清理脏数据线上问题排查时要通过SQL快速定位数据异常是哪个环节导致的。所以SQL不是“笔试过了就行”的东西而是测开的基本功。备考时建议在本地装个MySQL或者直接用在线SQL练习平台把多表查询练到手写无障碍。结合我在工作中的经验实际执行过程中SQL语句经常需要写成存储过程配合脚本使用我在测试环境自建数据时经常会先写一段类似的SQL构造一批订单数据再通过JMeter批量调用接口完成全链路造数。比如一个典型的订单数据构造语句我先查出现有用户表数据量确保造数范围不重叠然后用LEFT JOIN关联订单表筛选出未下过单的用户通过批量UPDATE命令一次性完成数据初始化。-- 构造测试数据示例为近30天未下单的用户创建一笔测试订单 SELECT u.user_id, u.user_name FROM t_user u LEFT JOIN t_order o ON u.user_id o.user_id AND o.create_time DATE_SUB(NOW(), INTERVAL 30 DAY) WHERE o.order_id IS NULL LIMIT 100;2.3 Linux命令题日志和进程是排查线上问题的两条腿Linux命令在测开笔试中也是必考项。考察方向很聚焦基本都是围绕“线上问题排查”这个场景展开的。比如日志文件太大怎么只查看最后100行答案是tail -100 app.log。进程卡住了怎么找到对应的进程号答案是ps -ef | grep java或者top。端口被占用了怎么找到占用进程答案是netstat -tunlp | grep 8080。日志里报错太多怎么统计某个异常出现的次数答案是grep NullPointerException app.log | wc -l。这些命令看起来简单但实际用起来有很多细节。我曾经在排查一个接口超时问题时在测试环境反复复现不了后来上生产环境看到服务器负载才发现问题只在高并发时段出现而测试环境根本没有那个量级。这个教训让我意识到测开不仅要会看日志、会查进程还要能结合环境差异去分析问题根因。另外还有一点特别重要——线上日志往往分散在多台机器上单机看日志挑不出规律这时候就需要用awk做个简单的统计聚合。笔试虽然不要求你现场写脚本但你把awk的常见用法掌握好在面试时自信地说出来会是很加分的亮点。2.4 网络与协议接口测试的理论地基网络基础是测开笔试中另一个重要模块。反复出现的考点包括TCP三次握手和四次挥手的过程、HTTP和HTTPS的区别、GET和POST的区别、常见的HTTP状态码含义、Cookie和Session的区别。这些知识点看起来偏理论但实际上每一个都对应着实操场景。拿接口测试来说你做接口测试时用Postman发请求就要理解GET和POST在语义上的本质区别——GET用于获取资源POST用于提交数据GET参数放在URL上POST参数放在请求体里。再比如你压测一个秒杀接口发现大量请求堆积在TIME_WAIT状态这时候如果你懂TCP四次挥手的状态流转就能快速判断是连接池配置问题还是服务端主动关闭连接导致的。我建议这块的备考方式不是死记硬背状态码表而是结合抓包工具去理解。你在浏览器开发者工具里随便打开一个页面看看Network面板里的请求哪些是200、哪些是304、哪些是404再对照请求头和响应头比单纯背书有效得多。2.5 测试用例设计题拉开分差的关键题型测试用例设计题是测开笔试中的“分水岭”。见过一段真实的笔试题目针对购物车页面的“删除商品”功能设计测试用例。这类题目没有标准答案但答题思路的差异直接反映出一个人的测试功底。低分答案往往是这样的点删除按钮商品被删掉——通过。这样的答案根本没入门。高分答案应该从功能、兼容、性能、安全、异常等维度全面展开功能维度删除单个商品、批量删除、删除最后一件商品、删除已选中商品、删除未选中商品异常维度网络断开时删除、删除时商品已下架、删除时库存为0、删除接口超时、重复点击删除按钮数据一致性删除成功后购物车角标数量是否正确、删除的商品是否从结算列表同步移除兼容维度不同浏览器、不同手机型号上的表现性能维度购物车有50件商品时删除操作是否流畅安全维度未登录状态下能否删除、伪造请求能否删除他人购物车商品这就是典型的测试思维。我在团队里面试候选人时特别爱看用例设计题的回答因为它是纸面上最能体现候选人多维思考能力的部分。而且它不靠突击能练出来需要平时就养成了“破坏式思维”——拿到任何功能第一反应不是验证它能用而是想方设法找到它会出问题的场景。3. 从笔试到面试试卷映射出的技术栈与业务sense3.1 自动化测试工具链从Selenium到接口测试平台笔试过了之后面试环节一般还会深入考察自动化测试的实操能力。京东测开岗位的技术栈主要有两条线UI自动化以Selenium为主接口自动化以Pythonrequests或者JavaRestAssured为主。近年很多团队在建设自研的接口测试平台核心逻辑就是把接口用例维护在平台上通过配置参数化、断言、数据驱动来实现自动化回归。我在实际项目中推荐过一个相对轻量但很实用的落地组合pytest框架做测试用例组织和管理requests库发送HTTP请求pytest-html生成测试报告再配合Jenkins做定时任务。用这套组合一个接口的自动化测试用例从编写到跑通大概需要20分钟。对于中小型项目来说这个组合足够支撑日常回归而且没有额外的平台维护成本。但如果团队规模大、接口数量多就要考虑建设接口测试平台了逻辑是相通的——用例数据化、执行自动化、报告可视化。3.2 电商业务场景优惠券、库存、秒杀、订单状态流转京东是电商公司笔面试里自然会涉及电商业务的理解。测开不能只懂技术不懂业务这是测试岗位和开发岗位一个很大的区别。开发可能只负责其中一个微服务模块但测试需要理解整个业务链路知道一个用户从下单到收货经历了哪些环节、每个环节的数据是怎么流转的。电商业务里那些高复杂度场景基本都是测试的重点。优惠券叠加就非常典型一张满减券和一张折扣券能不能叠加叠加时先算哪个如果优惠后金额出现小数怎么处理订单金额为0时能不能支付还有库存扣减——用户下单时扣库存还是支付时扣库存超卖问题怎么防止Redis预扣库存和数据库实际扣减的最终一致性怎么保障秒杀场景下用户疯狂刷新页面、重复提交订单幂等性怎么设计这些都是测试用例设计的高频素材也是面试官判断你业务sense深浅的重要依据。3.3 质量保障思维测试开发不等于“写自动化”聊到测试开发很多人会把注意力全部放在“开发”两个字上忽略了“测试”才是定语。随着测试开发岗位越来越热有些候选人给我一种感觉——他们把自己定位成写代码的自动化框架搭得很漂亮但问到“你这个项目当前最大的质量风险是什么”反而答不上来。这就是本末倒置了。测试开发的本质是“用工程手段解决测试问题”而不是“把测试做成开发”。质量保障思维体现在什么方面比如你做接口自动化不是把接口用例录进去就完事了你要去分析哪些接口适合自动化回归、哪些接口变更频繁不适合写死用例、自动化用例跑挂了怎么快速定位是环境问题还是代码问题还是数据问题。再比如你在制定测试策略时要能根据需求变更频率、影响范围、风险等级决定冒烟测试、全量回归、探索性测试怎么安排。这些是笔试和面试都很难考到、但实际工作中每时每刻都在用的能力。所以备考时不要只学技术要刻意训练自己从质量角度思考问题的习惯——每做一个测试工作先问自己一句“这件事对保障质量到底有多少帮助”。4. 一份可落地的测试开发备考路线4.1 刷题之外的SQL专项训练如果你现在准备测开笔试我强烈建议不要只刷算法题更要花时间练SQL。我说的练不是看题解而是真正在本地把库建起来、把数据插进去、把查询写出来、看到结果。为什么会这么强调因为我在面试中遇到过太多候选人代码题写得很好但手写SQL语句时连left join和inner join都分不清。这种候选人给我的感觉就是“准备错了方向”。SQL专项训练可以分阶段第一阶段是单表查询把where、group by、having、order by、limit这些搞熟第二阶段是多表关联搞清楚inner join、left join、right join、full join的区别第三个阶段是子查询和窗口函数比如row_number() over(partition by ...)这样的分析函数在实际测试中做数据去重和排名场景非常好用。每个阶段一天就能练完一周时间SQL完全能应付笔试和日常工作了。4.2 从0到1搭建一个接口自动化项目测开面试几乎是必问项目经历的而最好的项目经历不是“我参与了XX项目的测试”而是“我从0到1搭建了一套接口自动化测试体系”。这个项目的搭建过程其实是有固定套路的找一个开源项目或者公司现有系统梳理出核心接口列表用Pythonrequests封装一个简单的接口测试框架设计用例数据管理和断言机制接上Jenkins做持续集成最后形成一份测试报告。我在工作中就是按这个套路一步步搭建测试框架的。第一步先定义接口请求的公共方法把get、post请求封装成一个类统一处理请求头、超时、重试和日志第二步实现断言机制对接口返回码、关键字段、数据库落库结果做自动化校验。实际工作中我发现最花的功夫其实是在断言上因为很多接口的返回结构非常复杂一个响应体嵌套多层JSON校验逻辑写不好就非常冗余。我的做法是先用递归的方式遍历JSON全部字段再对关键业务字段做专门的断言方法这样既保证了覆盖度也保证了维护时的可读性。整个过程大概两周能完成一个能演示的版本面试时把这个项目的设计思路、踩过的坑、优化过程讲清楚比任何八股文都有说服力。4.3 用例设计能力的日常训练法用例设计能力怎么练这里分享一个我一直在用的方法——“产品说明书拆解法”。你用任何App小到计算器、大到电商平台打开它的功能介绍页每读一个功能就在脑子里列出这个功能的测试用例要点。比如看到一个社交App的“朋友圈仅三天可见”功能你就要想到设置后朋友看到什么界面、非朋友看到什么、自己的视角是什么样、设置前发的朋友圈是否受影响、不同时区的用户看到的时间点是否一致、取消设置后是否立即恢复……坚持一段时间用例设计能力会有明显提升。笔试时碰到用例设计题回答框架建议用“总分式”先说明测试范围功能、兼容、性能、安全、异常再逐项展开具体用例最后补充说明优先级和风险点。这样结构完整且有层次感阅卷人一眼就能看出你的测试思维。5. 笔试面试高频翻车点与应对策略5.1 笔试翻车点速查表翻车点具体表现应对策略SQL关联方向用错需要left join用了inner join导致数据被过滤先明确以哪张表为主表主表数据必须全部出现在结果中就用left join编程题边界忽略只处理正常输入空字符串、null、超大值没考虑写完代码后面试时主动补充边界情况展示工程思维网络概念混淆GET和POST本质区别说不清、常见状态码记不住结合抓包工具和实际接口测试场景记忆用例设计没层次一上来就写具体用例没有先划分测试维度按照功能、异常、性能、安全、兼容等维度先搭框架Linux命令不熟只记得几个常用命令遇到组合场景就卡壳每天花10分钟在虚拟机里练习管道、重定向、awk组合使用5.2 面试官追问时怎么应对笔试通过后的面试测试开发岗一般会有两到三轮技术面。面试官追问的方式通常不是“你做过什么”而是“你做的过程中遇到什么问题、怎么解决的”。这里有一个很多候选人会踩的坑——项目经验讲得太顺利听起来像背稿子面试官一追问细节就露馅。我的建议是准备项目介绍时按“背景→动作→结果→反思”四段式来组织。重点是“反思”部分主动说出项目里做得不够好的地方以及后续怎么改进这比单纯展示成绩更能让面试官信任你的真实参与度。比如可以说“我当时做的自动化用例稳定性只有80%跑一次挂几个后来我分析了挂掉的原因发现主要是测试数据污染和等待时间设置不合理把这两个问题解决后稳定性提升到了95%”这样的回答既真实又能体现你的分析和解决能力。另外还有一个加分技巧——面试官问到你不会的内容时不要慌着说不知道。你可以把问题拆解一下把你理解的部分说出来然后说“这块我了解得不够深入但我理解大概是XX的原理后续我会重点补充”。这个反应展示的是你的学习能力和逻辑推导能力比硬答或者沉默好得多。写在最后回到京东这套2019春招测试开发类试卷它的价值不在于“背下这几十道题”而在于帮我们看清楚一个事实——测试开发岗位的考察本质上是“工程能力测试思维业务理解”的三位一体。代码能力只是入场券拉开差距的是你用测试思维解决实际问题的能力。我个人见过太多备考测开的同学把精力全部扑在算法刷题上结果笔试过了、面试挂在项目深挖环节也见过有人技术能力很强但用例设计一塌糊涂暴露出最基本的测试素养缺失。所以如果你正在准备测开岗我建议按这条线铺开编程基础保持手感、SQL练到条件反射、Linux命令融入日常操作习惯、用例设计勤加训练、再拿一个自动化项目兜底。这条路走扎实了不管是京东还是其他大厂测开笔试面试都没有想象中那么难。