测试面试核心知识点
一、测试基础
1. 计算机基础
- 硬件:CPU侧重调度,四级缓存,低延迟;GPU侧重矩阵运算,缓存简单,高吞吐。
- 存储结构:顺序(数组,连续空间)、链接(链表,引用关联)、索引(索引表,稠密/稀疏)、散列(关键字算地址)。
- 软件架构:C/S两层,需安装,扩展性差;B/S三层(浏览器+Web+DB),免安装,易维护,服务器负载高。
- 网络基础:
- DNS:UDP53端口,域名-IP映射。
- IP查看:Windows
ipconfig,Linux/macifconfig。 - LAN高带宽、小范围;WAN跨地域,Internet为最大WAN。
- 子网掩码:与IP按位与区分网络/主机地址,同结果即同局域网。
- MAC(二层,硬件分配,同链路通信)vs IP(三层,拓扑分配,跨网络通信)。
- 子网划分:
192.168.5.0/24,掩码255.255.255.248,32子网,每子网6可用IP。
2. 测试理论
- 软件质量:功能、性能、兼容、易用、可靠、安全、可维护、可移植;测试目的为发现缺陷,保障质量。
- 测试流程:需求评审→测试计划→用例设计/评审→执行→提缺陷→回归→测试报告。STLC:需求分析→计划→分析→设计→实施→执行→总结。
- 测试模型:
- V模型:需求→编码→单元→集成→系统→验收,测试后置,忽视前期验证。
- W模型:开发测试并行;X模型:强调探索性;H模型:测试为独立流程,贯穿全周期。
- 测试分类:
- 阶段:单元(最小模块,详设依据)、集成(模块交互)、系统(真实环境全量验证)。
- 静态(不运行,查文档/代码)vs动态(运行,比对结果)。
- Alpha(开发环境,内部受控)vs Beta(用户环境,验收测试)。
- 黑盒(不关注内部,验功能)vs白盒(基于代码逻辑)vs灰盒(结合二者)。
- 冒烟(验核心功能,通过才全量测);回归(改代码后重测,防引入新缺陷)。
- 测试策略:
- 集成:自顶向下(早验核心,无驱动,底层滞后)、自底向上(早验底层,无桩模块,高层错误发现晚)、三明治(折中,中间层覆盖不足)、大爆炸(一次性集成,定位难,适合小项目)。
- 单元:孤立测试(覆盖率最高)。
- 测试用例:要素含目标、环境、等级、输入、步骤、预期结果;方法:白盒(逻辑/循环/基本路径覆盖)、黑盒(等价类、边界值、错误猜测、因果图、场景法);正交表(最少用例覆盖最多操作,适合系统测试)。
- 缺陷管理:
- 报告要素:版本、环境、编号、标题、等级、模块、复现步骤、预期/实际结果、附件。
- 生命周期:新建→打开→修复→回归→关闭;非缺陷驳回,修复失败重开。
- 等级:致命(崩溃、丢数据)、严重(主功能失效)、一般(界面/格式错误)、建议(文案/体验优化)。
- 群集效应:80%缺陷集中在20%核心模块;初期缺陷数上升,中后期下降。
- 测试报告:含引言、测试概况、测试分析(用例执行率、缺陷修复率、覆盖率)、总结(质量评定、遗留问题、结论、建议)。
3. 数据库
- 关系型(MySQL/PG):支持SQL、事务,易维护,读写性能低,表结构固定,适合业务数据;非关系型(MongoDB/Redis):KV存储,扩展性强,读写快,不支持SQL,适合日志、缓存。
- 核心概念:主键(唯一非空)、超键(唯一标识元组)、候选键(最小超键)、外键(关联他表主键)。
- 事务ACID:原子性(全执行或全回滚)、一致性(前后状态合法)、隔离性(并发互不干扰)、持久性(提交后永久生效)。
- MySQL:
begin/rollback/commit控制事务,set autocommit=0关自动提交。 - 索引:为
where/连接字段建短索引,避免过度(降写性能)。 - Redis:内存KV,10W QPS,单线程安全,支持多种数据结构,可做缓存、分布式锁、消息队列,支持持久化。
- SQL:
delete(删数据,可回滚,触发触发器);truncate(删全表,不可回滚,无触发器,快);drop(删表结构+数据,不可回滚)。
4. 操作系统(Linux)
- 文件查找:
find -name/-perm/-user - 系统操作:
ifconfig(IP)、top(资源)、hostname(主机名)、ps(进程)、grep(过滤)、kill -9 PID(杀进程)、pwd(当前路径)、exit(退出) - 文件操作:
cd(切换目录)、ls(列目录)、vi/vim(编辑)、mkdir(创目录)、cat/more/less(查文件)、tar -cvf(打包)、tar -xvf(解包) - 日志查看:
tail -f xx.log(实时)、tail -100 xx.log(最新100行) - 大文件查找:
find . -type f -size +10M - 权限:
rwxrw-r--(所有者读写执行,组读写,其他读);755(所有者读写执行,组和其他读执行)。 - Windows:
PATH为命令检索路径;ps -ef | grep 进程名查PID,kill -9 PID杀进程。
5. 网络协议
- OSI七层:物理层(比特流)、数据链路层(帧,MAC)、网络层(路由,IP)、传输层(端到端,TCP/UDP)、会话层(会话管理)、表示层(格式转换、加密)、应用层(用户接口,HTTP/FTP)。
- TCP/IP四层:数据链路层、网络层、传输层、应用层。
- TCP vs UDP:TCP面向连接、可靠、保序、点对点、首部20字节,适合文件传输;UDP无连接、不可靠、不保序、支持多播、首部8字节,适合音视频传输。
- TCP机制:三次握手(建连,确认双方收发能力);四次挥手(断连)。
- HTTP:
- 方法:
GET(获资源,参数URL,限2000字符)、POST(传实体,参数请求体,无限制)、HEAD(获报文头)、PUT(传文件)、DELETE(删文件)、OPTIONS(查支持方法)。 - 无状态:每次请求独立,通过Cookie/Session解决。
- 状态码:2xx成功(200 OK)、3xx重定向(304 Not Modified)、4xx客户端错(403禁止、404未找到)、5xx服务端错(500内部错误、503服务不可用)。
- 方法:
- Cookie vs Session:Cookie客户端存储,会话/持久;Session服务端存储,ID通过Cookie传递;重要信息存Session,普通存Cookie。
- HTTPS:HTTP+SSL/TLS,端口443,需CA证书,防窃听篡改,握手耗资源,搜索加权。
- URL输入流程:DNS解析(浏览器→系统→hosts→路由器→根域名服务器)→TCP三次握手→发HTTP请求→服务器返回HTML→浏览器渲染。
- 同步vs异步:同步等返回再执行(下单扣库存);异步不等返回直接执行(下单发通知)。
6. 编程语言(Python)
- 范式:结构化(面向过程,自顶向下,难适配变更);面向对象(封装、继承、多态,复用性高)。
- 参数传递:值传递(传拷贝,不改原值);地址传递(传地址,可改原值)。
- 数据类型:不可变(Number、String、Tuple);可变(List、Dict、Set)。
- 列表vs元组:列表动态可变,性能略低;元组不可变,轻量高效。
- 内存管理:引用计数(引用为0回收)、标记清除、分代回收;<256字节用私有内存池,大对象用系统malloc。
- 引用vs指针:引用是别名,初始化后不可变,非空,类型安全;指针是实体,可变,可空,有const。
- 命名规范:
_xx(内部)、__xx(私有,名称修饰)、__xx__(魔术方法/系统属性)。 - 算法:冒泡排序(相邻比较交换,有序可提前终止);二分查找(有序表,O(logN));列表去重保序(
list(dict.fromkeys(lst))或遍历去重)。 - 加密:对称(DES/AES,同钥)、非对称(RSA,公私钥对)、Hash(MD5/SHA,单向不可逆)。
- 设计模式:创建型(工厂、单例)、结构型(适配器、装饰器)、行为型(策略、观察者);开闭原则(扩展开放,修改关闭);单例(全局唯一,适合日志、配置、线程池);工厂(封装创建逻辑,解耦调用与实现)。
7. 组织管理
- 分工:按流程(交叉)、按模块(专人)、按类型(单元/接口/功能拆分),大团队结合类型+模块。
- 进度:紧急需求:需求+用例3天→功能+回归5天(含1天缓冲)→报告1天,同步风险,必要时BUGBash。
- 架构:项目型(归项目组,沟通高效);职能型(归测试部,资源复用高);综合型(功能/自动化驻项目,性能/安全按需委派,主流)。
- 团队建设:招聘适配者、定期培训、团队活动、台账(站立会/日报/周报)、激励优秀成员;分享会促知识传递,版本间隙开展。
- 日常:每日站立会同步进展/计划/问题;周报/年报复盘;自我提升(业务学习+技术栈拓展,如Jmeter性能测试)。
8. 工具管理
- 版本控制:SVN集中式,权限严,操作简单;Git分布式,本地操作灵活,适合敏捷。
- 用例管理:TestLink、禅道、QC、Wiki,支持用例库、版本、执行跟踪、报表。
- 缺陷管理:JIRA、禅道、Bugzilla;流程:新建→分配→修复→回归→关闭,非缺陷驳回,无法修复标为暂不处理。
- 抓包:Fiddler、Charles、Wireshark;Fiddler应用层代理,拦HTTP(S),定前后端问题。
- 工具定位:辅助提效,核心仍为测试思路与问题定位能力,避免过度依赖。
二、功能测试
1. Web测试
- 兼容性:重点测Chrome、IE、Edge、Firefox、Safari及Windows/Mac;区别于配置测试(测硬件适配)。
- 登录测试:功能(正常/空参/特殊字符/边界/掩码/空格剔除)、性能(加载/响应耗时)、安全(登录限次、防SQL注入/XSS、密码加密、Cookie HttpOnly、多端互斥)、兼容(多浏览器/终端)、UI(布局/样式/响应式)、易用性(快捷键/复制粘贴)、接口(逻辑验证)、异常(高负载/弱网/断电)。
- 浏览器缓存:memory cache(内存,临时)、disk cache(硬盘,依HTTP头判时效);不可缓存场景:
Cache-Control: no-cache/max-age=0、Pragma: no-cache、动态请求、POST请求、无缓存标识响应。
2. App测试
- 基础:Activity(交互界面,状态:Active/Running、Paused、Stopped、Killed);Android四大组件:Activity(界面)、BroadcastReceiver(广播)、ContentProvider(跨应用共享)、Service(后台任务)。
- 稳定性:Crash(内存泄漏/逻辑错误/兼容/网络异常,稳定复现则提单,偶现查日志);无响应(内存不足/死锁/空指针/资源缺失/缓存过多/代码异常)。
- 兼容性:覆盖厂商、系统版本、网络制式、分辨率;Android(虚拟机、实时渲染、应用可后台常驻);iOS(沙盒、普通渲染优先级、仅系统服务后台)。
- 升级:多渠道下载、网络切换、中断(暂停/关机/低电量)、存储不足、权限变更、新旧覆盖/卸载重装、强制/非强制更新、旧数据迁移。
- 流量/电量:横向(硬件单独耗电vs总耗电差值)、纵向(同机型运行vs不运行差值),工具辅助。
- 交叉测试:来电/短信/音视频/低电量干扰;补充:后退、通知栏、UI适配、触屏、安装卸载、升级、弱网切换、横屏。
- 冷启动(后台无进程,新建进程,初始化Application+MainActivity)vs热启动(后台有进程,仅初始化MainActivity)。
3. 其他
- 小程序vs H5:小程序(微信内、开发成本低、系统权限多、原生渲染流畅);H5(浏览器、需多端兼容、权限受限、依赖优化)。
- Windows程序:安装/卸载/重复安装、杀毒拦截、分辨率/缩放适配、多系统兼容、磁盘不足、端口占用。
- Web vs App测试:同(流程一致,均需功能/API/性能/安全测试);异(App需测安装卸载/升级、设备兼容、流量/电量、交叉/弱网,Web兼容聚焦浏览器、性能关注响应时间)。
- 朋友圈点赞:点赞/取消逻辑、可见范围、状态同步、排序、多端一致、消息通知、隐私。
三、自动化测试
1. API测试
- 优势:比UI稳定、执行快、语言无关、贴近场景、易定位、覆盖率高。
- 流程:分析接口文档→测试计划→用例设计→执行→报告。
- 用例设计:前置(登录态、默认参数)、业务(正逆向、参数关联、必填校验)、异常(空参/少参/错参/类型不符/超范围)、安全(Header校验、敏感信息脱敏)。
- 依赖处理:Mock模拟第三方返回;参数传递(正则/JSON提取,存变量供后续调用);登录态(登录后存Session/Cookie,后续携带);垃圾数据(反向接口删除或直连DB清理);HTTPS验证(Requests库
verify=False)。 - Request Header:User-Agent(客户端)、Accept(接收类型)、Cookie(会话)、Referer(来源)、Content-Type(请求体格式)。
- POST Content-Type:
application/x-www-form-urlencoded(表单)、application/json(JSON)、multipart/form-data(文件上传)、text/xml(XML)。 - 常见BUG:接口未实现、边界处理错、参数校验缺失、明文传敏感信息、并发异常、响应超时。
- 工具:Postman(易上手、协作、集成CI);SoapUI(支持REST/SOAP,免费版可二次开发,付费版支持数据驱动/异步)。
2. Web自动化(Selenium)
- 适用:需求稳定、迭代长、结构固定项目;优缺点:省人力、执行快、支持CI;成本高、不适需求频繁变更、难发现新BUG。
- 流程:手工测试完成→搭环境→转化用例→脚本开发→报告→优化→集成CI。
- 核心指标:用例覆盖率、时间成本、ROI、缺陷发现数;覆盖率难100%(ROI低、部分场景难自动化、低频用例无需覆盖)。
- 原理:driver作为服务端,脚本按WebDriver协议发请求,driver解析后在浏览器执行,返回结果。
- 元素定位:八大方式(Id、Name、Class、Tag、Link、PartialLink、CSS、XPath);
find_element(首个匹配)、find_elements(所有匹配列表);动态元素(父子/兄弟关系定位、遍历);子找父(XPath..或parent::*轴);定位失败原因(表达式错、无等待、iframe遮挡、布局变化);隐藏元素(type="hidden"/display:none,JS移除属性后定位)。 - 元素操作:
is_displayed()判显示;try...except NoSuchElementException判存在。 - 脚本开发:规范(语言规范+项目组补充,如定位加注释、减嵌套);
driver.close()(关当前页)、driver.quit()(关所有页+结束进程);稳定性提升(显式/隐式等待、异常捕获)。 - 时间等待:强制(
sleep,固定时长);隐式(implicitly_wait,持续查找元素,等页面全加载);显式(WebDriverWait,自定义条件,满足即执行,最多等指定时长)。 - 测试框架:
self(实例方法首参,指代实例)、cls(类方法首参,指代类)、super(继承父类属性方法);unittest:setUp()(每个测试方法前执行,失败则测试失败)、tearDown()(每个测试方法后执行,无论成败)。 - 测试模型:PO(页面对象,页面对应类,封装元素和操作,分离定位与逻辑);数据驱动(测试数据从外部文件读取,同脚本传不同数据);混合模型为主。
- Selenium Grid:分布式测试,多环境并行,缩时间提效率;Hub为中心节点,管理Node节点。
3. App自动化(Appium)
- 特点:支持iOS/Android/FirefoxOS,基于WebDriver协议。
- 工具:Inspector(录制回放,Windows不支持,用UIAutomator Viewer替代);ADB检测不到设备(装驱动、开USB调试、重插授权)。
- 问题处理:定位/等待不足致脚本报错;需求频繁变更时暂缓开发,待版本稳定推进。
- 脚本有效性:封装定位、异常、业务流程;保数据环境稳定;动态提取测试数据。
- 日志抓取:iOS(iTunes Connect、Xcode、第三方SDK);Android(第三方SDK、加固工具、代码捕获异常存日志)。
4. Web vs App自动化
- 同:用例设计方法、测试原理、模型、执行策略一致。
- 异:App需测中断、安装卸载、多设备适配;Web用Selenium,App用Appium;Web兼容聚焦浏览器,App聚焦厂商/系统版本。
四、性能测试
- 流程:需求分析→测试准备(计划/用例/环境/数据)→脚本开发→场景执行→分析→调优→报告。
- 核心概念:
- 负载测试:超负荷验承载能力;压力测试:低资源验运行情况;容量测试:最大并发用户数;极限测试:过量用户连续操作。
- 响应时间:请求到响应耗时;并发用户数:同时处理请求数;吞吐量:单位时间处理请求数;TPS:每秒事务数;HPS:每秒HTTP请求数。
- 介入时机:前期(功能完成后,单功能验证);后期(系统集成后,整体验证)。
- 需求调研:用户关注响应速度;开发关注响应+DB交互;管理员关注体验+调优;无明确需求时(沟通客户、分析日志、对标竞品、经验推导);敏捷项目(每迭代定目标,建自动化体系,结合业务场景评估,如报名系统仅报名前测试)。
- 工具:LoadRunner(VUGen脚本录制、Controller场景调度、Analysis结果分析);Jmeter监听器(聚合报告、结果树、表格/图形结果、BeanShell监听器)。
- 脚本设计:关联(提取动态参数如SessionID,供后续请求);思考时间(模拟用户操作间隔,贴近真实);参数化(固定数据换动态参数,适配环境);300客户端vs单客户端300用户(单客户端占资源/带宽,受IP连接数限;多客户端需调度中心,配网络权限);Jmeter保持Session(存登录Session,后续请求读取);分布式核心(心跳检测、高可用、容错、负载均衡)。
- 性能调优:
- 网络瓶颈:结合Network Delay Time,综合软硬件/网络分析。
- 内存泄漏:内存持续增长不释放,致宕机/响应慢。
- 阈值:2/5/8原则(2秒内快,2-5秒可接受,5-8秒慢,超8秒不可接受,上传下载可放宽)。
- TPS上不去:带宽不足、连接池过小、GC频繁、DB无索引/未读写分离、通信低效、硬件不足、压力机超限、业务逻辑复杂、缓存命中率低。
- 页面卡顿:后端接口慢、前端JS耗时、网络延迟。
- 测试报告:项目背景、工具、方案、数据(并发、TPS、响应时间、成功率、资源使用率)、结论(达标情况、问题、优化建议)。
五、持续集成(CI)
- 概念:持续集成(频繁合代码,自动化测试通过方可入主干);持续交付(代码随时可评审,就绪生产);持续部署(自动部署生产,随时发布)。
- 价值:提协作效率、改善覆盖率、自动化构建部署、缩反馈周期、降人工成本。
- Jenkins:开源CI工具,支持任务调度、自动化构建测试、结果可视化;主节点(master)管任务,从节点(slaves)执任务,多节点适配多环境;备份
JENKINS_HOME(含任务/节点配置、构建历史)。
六、其他问题
1. 安全测试
- 维度:用户认证、加密、入侵检测/漏洞扫描、数据备份恢复、防病毒。
- 常见攻击:
- SQL注入:表单/URL插恶意SQL,窃数据;防范:参数化查询、输入校验。
- XSS:注入恶意脚本,控用户浏览器;防范:输入输出转义、CSP策略。
- CSRF:盗用身份发恶意请求;防范:Token验证、Referer校验、SameSite Cookie。
- 文件上传:上传可执行脚本拿服务器权限;防范:文件类型白名单、重命名、上传目录不可执行、限大小、独立域名。
- DDos:伪造请求占资源,致服务不可用;防范:限SYN半连接数、缩SYN超时、关不必要服务。
- 渗透测试:模拟黑客攻击,主动发现漏洞。
- 漏洞成因:设计缺陷、弱密码、软件复杂、人为失误、管理不规范。
2. 问题定位
- 前后端BUG:前端发正确请求但渲染异常→前端;后端收请求后返回错/超时→后端。
- Web空白排查:确认网络/URL→开发者工具看状态码/响应数据→后端查日志,前端查JS异常/元素状态。
- Windows程序慢:查病毒、核对软硬件配置、查高负载服务、查网络/服务器连接、性能监视器看CPU/内存。
3. 沟通协调
- 开发不认BUG:对照需求文档,分歧则与产品对齐,统一标准。
- 线上BUG:测试环境复现→系统BUG提单,评优先级与发布计划;环境问题联合运维/开发排查。
- 用户投诉:记录细节,功能缺陷推动修复,体验问题反馈产品优化。
- 开发频犯低级错误:规范流程(提测前自测、冒烟准入)、加强测试覆盖、推常见缺陷清单促自检,必要时配套奖惩。
- 评审:参与方(用户、开发、测试、需求);目的(发现缺陷、优化性能安全);阶段评审(关键节点可行性);同行评审(具体模块缺陷排查)。
4. 测试认知
- 测试定位:兼具QC(质量控制,逐点验特性)和QA(质量保证,监督全流程风险),是质量守门员、流程推动者。
- 时间不足:加班、申请支援、协商延期、优先测核心高优先级功能。
- 八二原则:80%缺陷集中在20%模块;80%缺陷手工发现,20%自动化发现;剩余5%需上线后长期使用暴露。
- 零缺陷不可能:完全测试资源不足、输入输出组合多、实现路径多样、需求无绝对标准、概率性缺陷难复现。
七、面试指南
1. 各公司考察重点
- 腾讯:4轮(基础/代码→leader专业/项目→总监潜力/素养→HR软素质);首轮重点:测试基础(用例覆盖率≥80%)、专项(性能/安全工具)、延伸(Linux/DB/编程/环境搭建),现场写算法。
- 京东:5维度(Linux操作、SQL复杂查询、编程(快排/深浅拷贝/GC,不熟悉考思想)、测试(流程/V模型/用例设计)、逻辑(如10鼠测1000瓶毒酒))。
- 外派:项目熟悉度、问题解决/BUG挖掘/争议处理能力、技能(Linux/SQL)、个人规划/离职原因,留提问环节。
- 创业公司:基本素养(沟通/主动/学习力)、技能/项目深挖(用例设计、测试改进、测试金字塔/左移/右移)、岗位匹配(敏捷经验、MySQL/Linux、自动化/性能实践、职业规划),30-40分钟定适配。
- 服务型公司:业务逻辑占40%;员工面(SQL、用例设计、Redis/Nginx);组长面(脚本编写、环境搭建、接口/自动化/性能);项目经理面(表达/协作/情商);必备:测试理论、Java/Python/Go、Jmeter/Locust、MySQL/Redis/Mongo/ES、Linux/Shell、Git、Jenkins、学习能力。
- 区块链:优先级:逻辑>测试技术>沟通>垂直领域>稳定性(≥2年)>规划>优劣势;加分项:技术博客/著作、安全测试经验、开发经验。
2. 高频真题
- HR面:自我介绍、项目/离职原因、职业规划、期望薪资、优缺点、加班/出差接受度、求职动机、反问;应届生加试:竞赛/实习/学习情况;互联网加试:BAT亲属、健康、意向城市、其他面试进展;金融/科技加试:价值观、违规处理、适应力、矛盾处理。
- 笔试:基础概念(回归测试、测试模型、α/β测试、用例方法、缺陷等级);Linux(文件/进程/日志操作、权限修改);SQL(增删改查、模糊/分组/多表关联、事务ACID、索引);编程(快排/冒泡、深浅拷贝、GC、递归、数组/字符串操作、unittest);网络(HTTP状态码、TCP三次握手、UDP区别、OSI七层、常用端口);测试设计(ATM/登录/水杯/电梯用例、BUG报告、性能测试流程、Jmeter/Selenium使用);编程实操(日志遍历、数组插入、递归求和)。
- 技术面:高频题(自我介绍、项目难点、测试流程、用例设计、BUG处理、回归策略、开发与测试争议处理、覆盖率保障、敏捷认知、职业规划);工具(Jmeter/Locust、Selenium、Jenkins、Fiddler、k8s/Docker、Git);专项(性能测试场景/指标分析、自动化框架/元素定位/数据清理、安全/兼容/App测试);场景题(开发延期保交付、线上BUG处理、新增需求测试、全链路压测、线上接口监控);实操(Linux查日志/进程、MySQL改表结构、Docker启容器/拷文件、k8s改Pod标签、Python写交换变量函数)。