1. 爱奇艺2019秋招测试开发B卷,到底在考什么
前阵子整理旧资料,翻出了当年爱奇艺2019秋招测试开发方向笔试题(B)的备份,顺手做了一遍复盘。说实话,这套题放到今天依然有很强的参考价值,因为大厂测试开发的笔试题套路,这几年并没有发生本质变化——它考的不是“你会不会点按钮”,而是“你有没有完整的测试思维和工程落地能力”。
你可能觉得2019年的题已经过时了。我一开始也这么想,但仔细刷完才发现,这套B卷涉及的考点,从编程基础、数据结构、计算机网络,到Linux操作、数据库、测试用例设计、自动化测试框架,几乎覆盖了现在面试八股文里所有高频主题。换句话说,把这张卷子吃透,相当于把测试开发岗位的核心知识体系过了一遍。
这篇文章我打算以这套题为主线,把它串成一份“测试开发笔试通关指南”。不管你是准备秋招的应届生,还是想从功能测试转测试开发的老兵,都可以照着这个思路去复习。内容上我会拆解题目背后真正想考察的能力,然后给出每一类考点的复习重点和实战技巧,最后再聊一聊怎么把这些知识应用到真实的项目测试里。
我个人的感觉是:笔试题其实是最诚实的东西,它不会跟你讲情怀,也不会画饼,就是直白地告诉你——这个岗位需要你具备哪些硬技能。所以对待真题,态度应该是“榨干它”,而不是“做一遍对答案就完事”。
2. 题目结构复盘:计分项藏在“基础题”里
2.1 B卷的整体题型分布
爱奇艺这套B卷的题型结构,和大多数互联网公司的测试开发笔试题比较接近,大致可以分为以下几块:
- 单选题/多选题:覆盖计算机网络、操作系统、数据库、测试理论等基础概念,题量不小,讲究的是知识面广度和准确度。
- 编程题:一般会有一到两道,重点考察代码实现能力,可能是算法题,也可能是写一个工具脚本。
- 测试用例设计题:给一个具体功能或场景,让你写出完整的测试用例,这是测试开发岗位的“特色题”。
- 简答题/场景题:比如“如何测试一个视频App的播放功能”“怎么定位一个偶现Bug”,考察的是思路和逻辑。
注意一个关键信息:B卷通常和A卷是平行卷,难度相当但题目不同。所以不要抱侥幸心理想去“背答案”,老老实实把每个知识点学扎实,比什么都强。
2.2 一道典型编程题的命题逻辑
举一个我印象比较深的例子,这类题目常常以“字符串处理”或“数组操作”为外壳,实际上考察的是你能否用代码解决一个具体的测试问题。比如“写一个函数,判断一个字符串是否是有效的IP地址”,或者“给定一个日志文件,统计其中某个接口的调用次数和平均耗时”。
这类题目的陷阱在哪里?
第一,边界条件。IP地址的每个部分必须是0-255之间的整数,且不能有前导零(除非这个部分就是0本身)。这些细节如果你光看“判断IP地址”这几个字,很容易漏掉。
第二,输入处理。笔试环境里输入可能自带换行符、空格,甚至可能是空字符串。一个健壮的程序应该先做防御性判断。
第三,复杂度。如果直接写多重循环,面试官一眼就能看出你缺乏工程意识。正确做法是先明确约束条件,再选择合适的数据结构。
所以我的建议是:平时刷题的时候,不要只追求“通过用例”,要养成“先想特殊输入、再写代码、最后自测”的习惯。这个习惯会在笔试和面试手撕代码环节给你加很多分。
2.3 选择题覆盖面有多广
选择题虽然分值不大,但往往是决定你是否能进面试的“隐形门槛”。因为笔试总分就是由这些小题累加出来的,基础题错多了,编程题再强也拉不回来。
我自己统计了一下近三年大厂测试开发的笔试题,选择题的高频考点集中在这几个方向:
- 计算机网络:TCP三次握手、HTTP状态码、DNS解析过程、HTTPS的加密流程。
- 操作系统:进程线程区别、死锁条件、虚拟内存、进程通信方式。
- 数据库:SQL基本语法、索引原理、事务四大特性、隔离级别。
- 测试理论:黑盒白盒测试方法、测试用例设计原则、Bug生命周期、缺陷等级划分。
- Linux:常用命令、文件权限、日志查看、进程管理。
这些内容没有什么捷径,就是“反复刷题+整理错题本”。我当年有一个笨办法:每做错一道题,就把这个知识点在《软件测试》教材和网络博客里找出来,写一篇50字的总结存到备忘录里。刷完30套题之后,这个备忘录就成了我的个性八股文手册。
3. 测试开发的“硬核知识底座”:八股文怎么背才有效
3.1 测试理论:从“会背定义”到“能答场景”
为什么测试理论是笔试必考?因为它决定了你能否用专业语言表达测试行为。比如“黑盒测试”和“白盒测试”的区分,很多人背得滚瓜烂熟,但题目一换场景就懵了。
我建议复习测试理论的时候,把每个概念都对应到一个真实场景里去理解:
- 等价类划分:比如一个输入框要求1-100的整数,那么1、50、100、0、101就是典型的等价类示例。
- 边界值分析:还是1-100的例子,0、1、100、101就是边界值,其中0和101是无效边界。
- 因果图法:适合条件组合复杂的场景,比如“登录时用户名正确且密码正确才能登录成功”。
- 场景法:从用户操作流程出发设计用例,比如“用户下单-支付-发货-收货”的全链路。
这样复习有几个好处:第一,笔试中出现“请设计测试用例”时,你脑子里有现成的思路框架;第二,面试时被问到“你怎么测这个功能”,你不会只回答“用等价类、边界值”,而是能直接说出具体的输入和预期结果。面试官最讨厌的就是说了一堆术语却拿不出一个实际例子的人。
3.2 计算机网络:抓大放小,优先拿下分数大头
计算机网络在笔试题里的地位非常高,但我发现不少同学复习时容易陷入两个极端:要么只看概念不深入,要么死磕TCP拥塞控制的每个细节。
我的建议是,把时间花在“高频得分点”上:
- TCP三次握手和四次挥手,必须能手画状态图,并且能解释为什么是三次而不是两次。
- HTTP和HTTPS的区别,重点是SSL/TLS握手流程,因为大厂很关注安全性测试。
- HTTP状态码:2xx、3xx、4xx、5xx的常见场景,特别是301/302、401/403、500/502/504。
- 输入URL到页面展示的完整过程,这道题几乎是面试必问,笔试也可能出成排序题或简答题。
我在复习这个板块时有一个技巧:把所有协议相关的知识点,写成一张“时间线”。比如访问一个网站,先DNS解析,然后TCP连接,接着发送HTTP请求,服务器返回响应,浏览器解析渲染。每一步涉及什么协议、什么数据、可能出现什么问题,串起来之后,整个网络知识就活了,不再是一堆孤立概念。
3.3 Linux与数据库:测试开发的双手
如果说测试理论是思想,那Linux和数据库就是工具。笔试题里Linux考得最多的是:
- 文件操作:ls、cd、cp、mv、rm、find、grep。
- 权限管理:chmod、chown,要能看懂-rw-r--r--的含义。
- 日志查看:tail -f、head、less、awk、sed。
- 进程管理:ps、top、kill、netstat。
数据库部分则聚焦在SQL书写和索引原理。笔试题里最常见的就是“给定两张表,写出查询语句”,以及“什么情况下索引会失效”。
这里有一个容易被忽视的点:很多测试开发岗位后续要做接口测试,而接口测试必然涉及数据库数据校验。所以SQL不能只停留在select,还要会insert、update、delete,以及多表联查和子查询。笔试不一定会考到这么深,但面试手撕SQL时非常容易遇到。
4. 测试用例设计:这道“送分题”,为什么还有那么多人丢分
4.1 从“登录功能”看测试用例的完整维度
笔试题里最常见的一道“送分题”是:请针对“登录功能”设计测试用例。听起来很简单对吧,但很多人的答案只有三五条:输入正确的用户名密码能登录、输入错误的提示失败、为空时提示。这种答案在笔试里基本只能拿一半分。
完整的登录功能测试用例,至少应该覆盖以下维度:
- 功能测试:正确登录、错误密码、用户不存在、账号被锁定、密码大小写敏感。
- 界面测试:页面布局是否正常、错误提示是否友好、密码是否密文显示。
- 兼容性测试:不同浏览器、不同操作系统、不同分辨率、移动端和PC端。
- 安全测试:SQL注入、密码是否加密传输、验证码有效期、失败次数限制、会话超时。
- 性能测试:多用户同时登录、服务器响应时间、数据库连接池是否够用。
- 异常场景:断网时点击登录、服务器返回500、数据库连接超时、重复点击提交按钮。
- 易用性测试:Tab键能否切换输入框、回车能否提交、记住密码功能是否有效。
看到没,当你在考场能写出这种维度的答案,哪怕没有特别华丽的词藻,阅卷的人也能一眼看出你是有测试思维的人。而“测试思维”正是测试开发工程师最核心的竞争力。
4.2 用例设计题的高分答题模板
我总结了四步答题法,分享给你:
第一步,明确被测对象。把功能拆解成若干个输入项和交互动作。
第二步,逐项使用等价类和边界值,覆盖正常和异常场景。
第三步,补充非功能测试维度,包括兼容性、安全性、性能、易用性。
第四步,列出优先级。不是所有用例都同等重要,P0级别的用例必须是核心功能和数据安全相关的。
我当年笔试的时候,就因为用了这套模板,在用例设计题上拿了高分。面试官后来在技术面时还特意提到,说我的用例组织方式“像一个有经验的人写的”,其实我只是在考前把模板练熟了而已。
4.3 场景题:比如“如何测试视频App的播放功能”
爱奇艺是做视频的,所以它的笔试题里很大概率会出现视频相关场景。这类题目表面考的是用例设计,实际上考的是你对业务的理解。
以“视频App的播放功能”为例,我的答题思路是:
- 正常播放:点击视频能加载、能播放、能暂停、能拖动进度条、能全屏。
- 网络切换:WiFi切到4G时有提示,弱网环境下是否卡顿,断网时是否显示错误提示。
- 清晰度切换:标清/高清/超清/蓝光的切换是否生效,切换后是否从头播放还是续播。
- 异常处理:视频加载失败是否有重试按钮,播放过程中来电是否暂停。
- 数据统计:播放时长是否正确上报,退出播放时进度是否保存。
- 兼容性:不同机型、不同系统版本、Android和iOS、平板和手机。
- 性能:首帧耗时是否在可接受范围内,播放过程中内存占用是否持续增长,长时间播放是否发热。
这个思路其实是从“用户全流程”出发的:从点击视频入口开始,到加载、播放、交互、退出,每一个环节都可能出问题。你用这个框架去答任何功能场景题,都不会偏题。
5. 编程题与自动化脚本:笔试里真正的分水岭
5.1 为什么说编程能力决定你的上限
平心而论,测试开发这个岗位对编程的要求,不像纯开发岗位那么苛刻,但绝对比功能测试高出好几个档次。因为日常工作里你要写自动化测试脚本、搭测试框架、写测试工具,甚至要二次开发开源平台,没有代码能力寸步难行。
笔试题里的编程题,通常不会出特别偏的算法,更常见的是字符串处理、数组操作、文件读写、排序去重这类“工程型题目”。但正因为题目本身不难,反而更能暴露出一个人代码习惯的好坏。变量命名是否清晰、有没有写注释、边界条件处理是否到位、代码结构是否合理,这些都是考官关注的点。
5.2 一道经典题目:统计日志中接口的调用次数和平均耗时
假设有一个日志文件,每一行格式是:
2023-05-01 10:00:00, /api/v1/user/info, 120ms 2023-05-01 10:00:01, /api/v1/user/info, 150ms 2023-05-01 10:00:02, /api/v1/order/list, 200ms要求:统计出每个接口的调用次数、平均耗时,并输出平均耗时最大的前N个接口。
这道题考察的就是Python的基础能力和工程习惯。一个干净利落的实现方式是这样的:
import csv from collections import defaultdict def parse_log(file_path, top_n=5): stats = defaultdict(list) with open(file_path, 'r', encoding='utf-8') as f: reader = csv.reader(f) for row in reader: if len(row) != 3: continue api = row[1].strip() cost_str = row[2].strip() if not cost_str.endswith('ms'): continue try: cost = int(cost_str.replace('ms', '')) except ValueError: continue stats[api].append(cost) result = [] for api, costs in stats.items(): result.append({ 'api': api, 'count': len(costs), 'avg_cost': sum(costs) / len(costs) }) result.sort(key=lambda x: x['avg_cost'], reverse=True) return result[:top_n]这段代码看起来简单,但有几个细节值得注意:
- 使用defaultdict(list),省去了手动判断key是否存在的麻烦。
- 对每一行做了防御性校验,不满足格式的就跳过,避免脏数据导致程序崩溃。
- 使用csv.reader,而不是直接split(', '),因为csv模块对字段分隔的处理更可靠。
- 最终使用sort加key参数排序,而不是手写排序算法。
这就是工程型的写法。哪怕笔试环境里不允许你运行代码,考官看到你写成这样,也会觉得你是认真写过脚本的人。
5.3 自动化测试脚本:从“读代码”到“写代码”
笔试之外,自动化测试能力更多会在面试环节被考察。但有些公司会在笔试题里让你“写一个简单的自动化冒烟测试脚本”,或者是“使用Selenium定位一个元素”。
这里我强烈建议你在复习阶段,亲手写过至少一个完整的自动化测试demo。比如用Python+Selenium写一个打开百度、搜索关键词、校验搜索结果页的脚本。这个demo不需要很复杂,但它能帮你把以下知识点串起来:
- WebDriver的初始化与浏览器驱动配置。
- 元素定位:id、name、xpath、css selector。
- 等待机制:显式等待和隐式等待的区别,什么时候用哪个。
- 断言:怎么校验操作结果是否符合预期。
- 测试报告:怎么把结果输出成HTML。
写过一个demo之后,再去看什么Page Object模式、数据驱动、关键字驱动,你才会有真正的体感,而不是听了一堆名词却不知道在说什么。
6. 测试开发学习路线:一份可复制的三个月冲刺计划
6.1 第一阶段(第1-2周):打地基,兼顾笔试和面试
这个阶段的目标是:把测试理论、计算机网络、操作系统、Linux、数据库这五块基础课快速过一遍。
我建议的学习方式是“以题带学”:每两天做一套测试开发方向笔试题,做完之后不管对错,把所有涉及的知识点标记出来,然后回到教材或博客里查漏补缺。
比如你今天做了一套题,错了两道网络题和一道数据库题,那这两天的复习内容就是:把TCP和UDP的区别、三次握手四次挥手重新看一遍,把SQL的join和子查询练一遍。这样“做题-纠错-补课-再做题”的循环,效率比单纯看书高得多。
6.2 第二阶段(第3-6周):主攻编程与自动化
有了基础之后,把主要精力放在Python和自动化测试框架上。
Python方面,重点掌握:列表/字典/集合等内置数据结构、文件操作、异常处理、装饰器、面向对象基础、常用的标准库(os、re、json、requests)。
自动化测试方面,至少要学会:Selenium WebDriver做Web UI自动化、requests+pytest做接口自动化、unittest或pytest做单元测试。每学一个工具,就配套写一个小项目。
比如学了requests,就写一个“调用公开API,校验状态码和响应字段”的小脚本;学了pytest,就把之前的脚本改造成pytest用例,加上fixture和参数化。
6.3 第三阶段(第7-10周):刷真题与模拟面试
到了这个阶段,你的知识框架已经成型,接下来就是“实战演练”。
每天雷打不动做一套笔试题,做完之后总结错题,然后找朋友或者自己对着镜子模拟面试。模拟面试的重点不是背题,而是练习“把知识讲清楚”的能力。
比如“请介绍一下你做过的最有技术含量的测试工作”,你要能在三分钟内讲清楚:项目背景、你的角色、遇到的难点、怎么解决、最终效果。这个表达框架,比单纯背八股文重要得多。
6.4 第四阶段(第11-12周):查漏补缺与心态调整
最后两周不要再去啃新知识了,把之前整理的所有错题本和笔记拿出来反复看。保持每天做一套题的手感,但不对分数焦虑。
我真实的体会是:秋招是一个“实力+心态”双重比拼的过程。笔试挂了不要紧,谁还没挂过几次呢?关键是每次挂完之后,能不能从题目里总结出自己缺什么,然后针对性补上。把每一次笔试都当成一次免费的学习诊断,心态会好很多,成长也会快很多。
7. 面试阶段的延伸:从笔试题到“AI测试开发”新趋势
7.1 笔试题之外的“隐藏考点”
笔试过了之后,面试才是真正的筛选环节。很多面试官喜欢从你的简历里挑一个项目往深里问,而测试开发岗位的面试问题,往往围绕这几个方向展开:
- 你做过的测试项目中,最复杂的一个Bug是什么?
- 你们团队的自动化测试覆盖率是多少?怎么保证用例的稳定性?
- 接口自动化测试中,如何处理接口依赖和参数传递?
- 如果线上出现了一个偶现问题,你会怎么排查?
- 性能测试遇到过哪些坑?怎么分析性能瓶颈?
这些问题没有标准答案,但你笔试阶段积累的那些测试用例设计思路、Linux排查命令、SQL查询技巧,都会成为你回答问题的素材。所以千万不要觉得笔试考完就算了,它只是面试的知识储备阶段。
7.2 聊聊AI测试开发:风口下的新机会
这两年“AI测试开发”这个概念很火,也出现在不少公司的JD里。它并不是要求你去做算法,而是指用AI工具和技术来提升测试效率,比如:
- AI自动生成测试用例。
- AI辅助定位Bug根因,比如智能分析日志。
- AI驱动的UI自动化,通过视觉识别来定位元素。
- 通过大模型分析需求文档,自动生成测试脚本。
如果你有余力,我建议在简历里增加一个和AI相关的测试实践,比如“使用大模型自动生成接口测试脚本”或者“基于图像识别实现UI自动化的探索”。哪怕只是一个小的demo,也比空泛地说“我了解AI测试”更有说服力。
但请记住:AI测试开发是加分项,不是必选项。基础扎实、能独立写测试框架、能把项目讲清楚,这才是面试官最看重的底层能力。别为了追热点而荒废基本功,本末倒置。
7.3 一个通用能力:如何看懂并快速上手一个陌生项目
最后分享一个我在实际工作中觉得特别重要的能力——快速熟悉一个陌生项目。
作为测试开发,你大概率会频繁接触到新项目、新模块,甚至新框架。面试官也很喜欢问:“给你一个从没测过的系统,你怎么入手?”
我的固定回答思路是:
- 先看需求文档和接口文档,明确业务逻辑。
- 再搭起本地环境,自己把核心链路跑通一遍。
- 然后梳理出被测系统的架构图,搞清楚数据流向和外部依赖。
- 最后针对核心模块设计测试用例,优先保证P0场景的覆盖。
这个思路同样适用于笔试中的“场景设计题”。不管题目换成视频App、电商下单、支付系统,还是消息队列,你都可以用这套框架去组织答案。
8. 写在最后:一些真心话
我见过不少同学,刷了大量笔试题,背熟了所有八股文,但在面试的时候还是被刷下来。差在哪里呢?差在“思考深度”。
笔试题只是门槛,真正让你脱颖而出的是:你不仅知道测试用例要覆盖哪些维度,还能说出为什么这些维度重要;你不仅会写自动化脚本,还能说出脚本在什么情况下会不稳定,以及怎么解决;你不仅知道TCP三次握手,还能把它和接口测试的超时重试机制联系起来。
所以我的建议是:刷题的时候,多问自己一个“为什么”。这道题考察的是什么能力?如果我是面试官,我会怎么追问?这道题的答案背后,对应的实际工作场景是什么?想清楚这些问题,你做一道题的效果,顶别人做十道题。
再说一点,关于爱奇艺2019秋招B卷这类旧真题,不要抱着“考过就不会再考”的心态。题库会变,但考点不会大变。你把它当成一张“能力地图”,沿着地图上的知识点一点点补齐自己的短板,这套卷子对你的价值就远远超过那几道题本身。
最后想对正在备战秋招的朋友说一句:测试开发不是一个“点按钮”的岗位,它需要你既懂业务又懂技术,既细心又有大局观。这个过程没有捷径,但每一步都算数。加油,题可以不会,但态度和学习能力,一定要有。