真实面试1
字数
6738 字
阅读时间
26 分钟
上海威顿电话面试复盘文档
一、基础信息
- 面试发起方:上海威顿信息科技有限公司
- 面试候选人:陈启明
- 项目背景:候选人无企业实习,仅自学线上项目(2个:极客文章管理功能测试项目、金融理财UI自动化项目)
- 文档用途:面试问题梳理+标准高分回复参考,用于复盘查漏补缺
二、面试完整问题+候选人原始回答+优化标准答案
1. 基础项目背景类
问题1:你简历里的项目都是实习项目吗?
- 候选人原回答:不是,是网上自学项目
- 优化高分回复: 我没有企业实习经历,简历中两个项目均为自学实战项目,完全按照企业真实测试流程完整落地,覆盖手工功能测试、黑盒用例设计、Python+POM UI自动化、接口测试全流程,完整复刻企业测试工作链路。
问题2:完整介绍两个项目,从需求梳理、测试文档编写、测试执行全流程说明
(1)极客文章管理系统(手工功能测试)
- 候选人原回答:
- 梳理页面功能:登录、注册、文章发布、内容审核、文章上下架、管理员管理
- 结合UI原型梳理需求,借助AI生成初稿测试计划,人工查漏补缺
- 选定全业务链路:注册→登录→写文章→发布→后台审核
- 使用等价类、边界值、判定表、流程图黑盒方法,用XMind梳理测试点
- AI辅助补全测试点,筛选当前知识点可覆盖场景,剔除暂未掌握内容
- 基于测试点输出标准化测试用例,包含前置条件、测试数据、操作步骤、预期结果
- 逐条执行测试并标记,避免漏测
- 优化高分回复: 该项目是Web后台内容管理系统,我完整独立走完软件测试全生命周期:
- 需求分析:拆解原型页面模块,梳理注册、登录、文章发布、审核上下架、后台用户管理核心业务,梳理完整业务流转链路;
- 测试计划输出:基于需求划定测试范围、测试资源、测试周期、测试方法,先用AI生成基础版本,人工结合业务修正、补充边界场景;
- 测试点&用例设计:以黑盒测试为主,采用等价类、边界值、判定表、业务流程图法拆分场景,XMind梳理全量测试点;借助AI查漏补缺遗漏场景,结合自身掌握技术栈筛选可落地场景;标准化输出测试用例,规范填写前置条件、测试数据、操作步骤、预期结果;
- 测试执行:按业务链路逐条执行用例,执行完成标记状态,覆盖正向、反向、异常场景;
- 缺陷管理:发现问题在禅道提交缺陷,包含复现步骤、截图、测试数据,跟进修复与回归。
(2)金融理财项目(Python UI自动化)
- 候选人原回答:
- F12开发者工具定位页面元素,Python编写自动化脚本
- 初期面向过程写法,难以维护,后续重构POM分层架构
- 分层抽象页面元素对象,提升代码复用与维护性
- 自动化核心价值:打通完整业务链路,替代重复手工操作,大幅提升回归测试效率
- 复用AI生成规范提示词,统一自动化代码分层、fixture前后置、目录规范,可一键生成标准化自动化脚本
- 优化高分回复: 项目为金融理财Web端,核心落地UI自动化回归方案:
- 元素定位:浏览器F12工具分析DOM,使用Xpath、ID、class等方式定位页面控件;
- 脚本迭代优化:初期采用面向过程编写,代码耦合度高、复用差;系统学习POM设计模式重构,分层:页面层(封装元素与操作)、业务层(封装业务流程)、测试用例层(pytest执行用例)、公共工具层;
- 执行逻辑:自动化脚本覆盖完整理财业务流程,自动化执行回归,替代重复手工测试,大幅缩短版本回归时间;
- 工程化规范:沉淀标准化AI提示词,定义项目目录分层、fixture前后置处理、元素封装规范;输入业务流程即可生成符合统一规范的自动化代码,实现脚本快速复用拓展。
问题3:自动化项目中是否用到AI?怎么用?
- 候选人原回答:学习阶段未使用,补全业务链路时使用;告知AI项目分层、fixture规范、目录结构,生成标准化可复用自动化代码,沉淀通用提示词模板
- 优化高分回复: 深度结合AI辅助自动化工程搭建:
- 前期学习语法、POM架构时自主实操;搭建完整业务自动化链路时借助AI;
- 提前统一项目规范:分层结构、页面元素存放目录、前置后置fixture处理规则、断言规范;将规范输入AI,生成统一标准自动化代码;
- 沉淀通用提示词模板,后续新增UI/接口自动化链路,直接调用模板生成规范代码,降低重复编码成本,统一团队代码风格。
2. 自动化&页面复杂场景处理类
问题4:页面元素多、前端请求接口繁杂,纯人工定位效率低,有什么提速方案?
- 候选人原回答:
- 优先和产品、开发沟通,获取接口文档、业务说明,减少试错成本;
- 开展探索性测试,逐一点击页面功能;
- F12、Charles抓包查看前端触发的接口、请求参数;
- 可借助AI辅助梳理页面功能与接口清单(之前未想到该方案)
- 优化高分回复: 分四层方案快速梳理页面元素与接口,提升可测性验证效率:
- 前置信息获取:对接开发、产品拿到接口文档、页面原型、业务流程图,提前梳理页面关联接口,减少盲目探索;
- 工具抓包解析:使用浏览器F12 Network面板、Charles抓包工具,操作页面同时捕获所有请求URL、请求方式、入参、响应数据,自动整理接口清单;Elements面板批量提取页面控件ID、Xpath;
- 探索性测试兜底:无文档情况下执行探索测试,覆盖全部按钮、弹窗、输入框,记录触发事件与对应接口;
- AI辅助整理:将抓包数据、页面原型描述输入AI,自动归类页面模块、对应接口、交互事件,快速输出完整页面元素&接口清单,快速验证页面可测性。
问题5:该复杂页面梳理场景,能否用AI辅助发掘接口/元素?
- 候选人原回答:可以,之前没有想到这个用法
- 优化高分回复:完全可以,有两种落地方式:
- 输入页面原型描述+抓包原始请求日志,AI自动拆分页面模块、绑定对应接口,输出结构化清单;
- 针对未梳理的交互功能,描述页面操作逻辑,AI预判会触发的接口、入参字段,提前设计测试场景,大幅减少人工摸索时间。
3. pytest、接口自动化基础问题
问题6:pytest框架如何搭建?
- 候选人原回答:pip安装pytest,在config文件做基础配置,安装完成即可直接使用
- 优化高分回复: 完整搭建流程:
- 环境准备:pip安装pytest、selenium、requests等依赖库;
- 目录分层:按照POM规范创建pages、testcases、common、conftest、config目录;
- 全局配置:根目录创建pytest.ini配置文件,配置用例执行规则、日志输出、用例命名规范、失败重跑;
- 共用前置后置:通过conftest.py定义全局fixture,封装浏览器初始化、登录鉴权、环境销毁等通用操作;
- 用例编写:test_开头命名测试文件,函数/类封装测试流程,执行pytest命令批量运行用例,支持allure生成可视化测试报告。
问题7:接口自动化如何写断言验证预期结果?
- 候选人原回答:先手工操作确认页面反馈(如登录成功文字、页面跳转),再把该结果编写进代码做校验
- 优化高分回复: 分UI自动化、接口自动化两类断言实现:
- UI自动化断言:执行操作后,定位页面结果元素,获取文本、URL、状态,通过pytest断言对比实际值与预期值;例如登录成功后校验页面标题、用户昵称;
- 接口自动化断言:使用requests发起请求,提取响应json字段,通过assert做多维度校验:状态码、返回码、业务数据、数据长度、关键字段值;Postman中可通过Tests脚本编写JS断言,提前校验接口返回合规性。
问题8:登录带随机验证码,自动化如何处理?
- 候选人原回答:联系开发临时固定验证码(如888888),规避动态验证码阻碍自动化执行
- 优化高分回复:四种行业通用解决方案,按优先级排序:
- 测试环境特殊处理:协调开发增加测试开关,关闭验证码校验,或固定验证码为静态值;
- 接口绕过登录:开发提供测试专用免登接口,自动化直接获取token,跳过前端登录流程;
- OCR图像识别:接入第三方OCR工具识别验证码图片,自动填充;
- 万能测试账号:预留无验证码的测试专用账号,用于自动化回归。
问题9:Postman的主要使用场景?
- 候选人原回答:依据接口文档做接口功能测试,使用Tests后置脚本编写断言校验返回结果
- 优化高分回复:
- 单接口功能测试:根据接口文档填写请求头、参数,校验正向/异常入参返回;
- 接口串联测试:通过环境变量、全局变量实现接口关联(登录获取token传给后续业务接口);
- 自动化断言:Tests脚本编写JS断言,校验状态码、业务字段、数据格式;
- 批量压测/批量请求:Collection批量执行接口,快速验证多业务链路可用性;
- 接口调试:抓包复制请求到Postman,快速复现线上接口异常问题。
4. 登录功能测试点&安全测试类
问题10:登录功能能设计哪些测试点?
- 候选人原回答:
- 账号、密码字符长度限制3-10位,用等价类(有效/无效)+边界值(2、3、8、10、11位);
- 协议勾选框:不勾选点击登录提示报错;
- Charles断点中间人攻击:前端输入正确密码,抓包篡改请求密码,校验后端是否二次校验;
- 优化高分回复: 登录模块分四大类测试场景:
- 输入框等价类+边界值 账号:有效(3-10位字符)、无效(❤️、>10、空、特殊符号、中文、空格);边界2/3/10/11位; 密码:同账号长度规则,额外覆盖纯数字、纯字母、混合大小写、特殊字符;
- 页面交互校验 未勾选用户协议禁止登录;输入框实时格式提示;清空按钮、回车登录、忘记密码跳转;
- 异常场景 账号不存在、密码错误、账号密码不匹配、账号锁定、空账号/空密码提交;
- 安全测试场景 Charles断点篡改请求参数中间人攻击;密码明文传输校验;重复提交防重放;token时效校验;SQL注入输入测试。
问题11:中间人篡改请求数据,后端如何识别拦截?
- 候选人原回答:前后端双重校验,传输数据加密+双方约定密钥,后端解密校验数据一致性,篡改后解密失败直接拦截
- 优化高分回复:主流安全校验方案:
- 签名校验(最常用) 前后端约定统一加密密钥,请求参数+时间戳拼接后MD5/SHA256加密生成sign签名;后端接收后使用相同规则重新计算签名,与请求携带sign对比,不一致判定数据被篡改;
- 时间戳防重放 请求携带时间戳,后端校验时间差,超过5分钟直接拒绝,防止篡改旧请求重复发送;
- HTTPS传输加密 底层传输链路加密,中间人无法直接解析原始请求;
- 敏感数据后端二次校验 密码、金额等核心字段不在前端做最终判断,后端独立校验业务逻辑,仅前端校验不生效。
问题12:若攻击者反编译加密算法,替换篡改后的签名,系统如何防护?
- 候选人原回答:密钥不暴露在前端,后端独立持有密钥,篡改后无法生成合法签名
- 优化高分回复:
- 密钥分离:前端仅放固定盐值,核心密钥存放服务端,不暴露前端代码;
- 非对称加密:采用RSA非对称加密,前端公钥加密,后端私钥解密,私钥仅服务端持有,中间人无法伪造合法签名;
- 动态加盐:每次请求生成随机盐值参与签名计算,固定篡改模板无法复用;
- 接口限流+黑名单:短时间大量异常签名请求,封禁客户端IP。
5. 批量入库/查询接口数据校验类
问题13:批量入库接口、批量查询接口,如何验证写入数据准确?(可访问数据库场景)
- 候选人原回答:调用批量插入接口写入样本数据,数据库查询原始入库数据,再调用查询接口对比返回值,三者一致则数据无异常
- 优化高分回复: 三层数据比对校验:
- 准备标准化测试数据集,记录预期入库完整字段;
- 调用批量入库接口,记录接口返回成功标识;
- 直连数据库查询对应批量数据,获取数据库原始存储内容;
- 调用批量查询接口,获取接口返回数据;
- 对比:预期数据 == 数据库存储数据 == 接口返回数据,三者完全匹配代表数据写入、读取逻辑无缺陷;出现不一致定位入库/查询接口逻辑bug。
问题14:纯黑盒测试,无数据库访问权限,如何校验批量插入与查询数据一致?
- 候选人原回答:插入前查询确认无目标数据,插入后调用查询接口能查到对应数据;Postman添加断言校验返回数据存在;无法精准对比字段内容
- 优化高分回复:两种无库校验方案:
- 自校验业务流程 插入前调用查询接口确认目标数据不存在;执行批量插入;再次调用查询接口,遍历返回列表,逐条对比插入时的原始字段值,通过Postman JS断言 / Python代码断言匹配所有字段;
- 唯一标识校验 每条批量数据携带全局唯一ID(订单ID、流水号),插入后通过唯一ID精准查询单条数据,完整比对所有字段,保证每一条数据存储无丢失、无错乱;
- 异常兜底:新增批量删除接口,测试完成清理测试数据,避免脏数据干扰后续用例。
问题15:Python接口自动化实现批量数据对比怎么做?
- 候选人原回答:Python主要写UI自动化,接口代码接触较少,这块基础薄弱
- 优化高分回复(补齐短板标准答案): 使用requests库实现,结合字典/列表做全字段比对:
- 定义批量插入原始测试数据(列表嵌套字典存储每条记录字段);
- requests.post调用批量入库接口;
- 提取每条数据唯一标识,循环调用查询接口,获取实际返回数据;
- 编写通用比对函数:循环遍历原始数据与查询返回数据,对比key对应value;
- pytest断言,字段不一致直接抛出异常,打印差异字段用于定位bug;
- 可封装通用工具类,后续所有批量接口直接复用数据比对逻辑。
6. 数据库SQL相关问题
问题16:数据库表关联查询有哪些?
- 候选人原回答:内连接、左连接、右连接、子查询
- 优化高分回复: 常用关联查询分为连接查询、子查询两大类:
- 多表连接:INNER JOIN(内连接)、LEFT JOIN(左外连接)、RIGHT JOIN(右外连接)、FULL JOIN(全外连接);
- 子查询:标量子查询、表子查询、exists/exists not 相关子查询;
- 其他:联合查询UNION、UNION ALL。
问题17:左连接、右连接区别与效果?
- 候选人原回答:左连接以左表为基准,左表所有数据全部展示,右表无匹配字段填充null;右连接以右表为基准,右表数据全部展示,左表无匹配填充null
- 优化高分回复:
- LEFT JOIN 左外连接:以左表为主表,左表全部记录保留;右表满足关联条件的数据匹配展示,无匹配则右表字段为NULL;
- RIGHT JOIN 右外连接:以右表为主表,右表全部记录保留;左表无匹配记录时左表字段为NULL;
- 日常测试中左连接使用场景最多,右连接可等价交换左右表后用左连接实现。
问题18:内连接作用?
- 候选人原回答:INNER JOIN仅展示左右两张表关联字段完全匹配的数据,过滤两边无匹配的记录
- 优化高分回复: INNER JOIN内连接,只返回两张表中关联字段匹配成功的数据;任意一张表无对应匹配数据,该行直接过滤;适用于需要两张表数据同时存在的查询场景。
7. Linux日志、JMeter性能测试
问题19:Linux系统查找日志关键字用什么命令?
- 候选人原回答:第一反应说logcat(安卓日志),Linux接触较少
- 优化高分回复(区分场景):
- Linux服务器日志检索核心命令:
grep "关键字" xxx.log基础检索;grep -i "关键字" xxx.log忽略大小写;grep -A10 -B10 "关键字" xxx.log展示匹配行前后10行日志;tail -f xxx.log | grep "关键字"实时滚动监控日志; - logcat是Android adb日志命令,仅用于APP测试,Linux服务器不适用。
问题20:JMeter工具主要用途?
- 候选人原回答:性能压测,模拟并发用户访问,统计吞吐量、响应时间
- 优化高分回复: JMeter核心用途:
- 接口性能压测:模拟多并发用户,测试接口吞吐量、平均响应时间、95/99分位耗时、错误率;
- 接口功能调试:单请求发送,查看请求响应详情;
- 接口串联自动化:正则/JSON提取器关联上下游接口参数;
- 分布式压测:多机器集群模拟超大并发。
问题21:JMeter单条请求详细日志包含哪些信息?
- 候选人原回答:请求成功/失败状态、接口基础信息、传输数据
- 优化高分回复: 单请求查看结果树中包含完整信息:
- 请求部分:请求方法、URL、请求头、Cookie、请求参数、请求体;
- 响应部分:响应状态码、响应头、响应体、响应耗时;
- 附加信息:线程编号、采样时间、错误原因(失败时)、断言执行结果。
问题22:JMeter上下游接口参数如何传递关联?
- 候选人原回答:未实操过JMeter关联,参考Postman逻辑,提取返回数据存入环境变量供后续接口使用
- 优化高分回复: JMeter标准接口关联方案:
- 添加后置处理器:JSON提取器(json返回)、正则表达式提取器(文本/HTML返回);
- 设置引用变量名、匹配规则,提取上游接口返回token、id、流水号等参数;
- 下游接口请求参数中使用
${变量名}引用提取到的值,实现参数传递; - 全局变量可通过用户自定义变量元件统一管理。
8. 缺陷生命周期管理
问题23:Bug生命周期如何跟踪管理?
- 候选人原回答:使用禅道管理
- 复现bug,先检索是否重复缺陷;无重复新建,填写模块、优先级、严重级别、复现步骤、测试数据、截图;指派对应开发;
- 开发确认缺陷,按优先级排期修复;
- 开发修复提交后,测试执行回归测试;验证无问题关闭缺陷;
- 新版本迭代同步回归历史缺陷,防止bug复现;
- 优化高分回复: 完整缺陷闭环流程(禅道工具落地):
- 缺陷提交:发现异常后,检索项目缺陷库避免重复提单;新建缺陷,完善模块、严重程度、优先级、前置条件、复现步骤、预期/实际结果、附件截图日志,指派对应开发;
- 缺陷确认:开发接收,区分有效bug、需求变更、使用问题;无效缺陷备注原因关闭;有效缺陷纳入迭代排期;
- 缺陷修复:开发完成修复后修改缺陷状态为已修复;
- 回归验证:测试拉取新版本复现场景,验证缺陷彻底修复;无关联问题则关闭缺陷;
- 迭代回归:新版本上线前,对历史高优先级缺陷统一回归,防止代码改动导致缺陷复现;
- 缺陷统计:定期汇总缺陷密度、修复时效,输出测试质量分析。
三、面试复盘总结(个人短板)
- 实操短板
- Linux命令使用不熟练,日志检索命令混淆安卓logcat与Linux grep;
- JMeter仅了解基础压测概念,未实操接口参数关联;
- Python接口自动化代码编写较少,批量数据比对落地经验不足;
- 表达短板
- 回答时逻辑零散,没有分层结构化输出;
- 遇到不熟悉场景第一时间直接承认薄弱,未给出替代解决方案;
- AI辅助测试场景思路局限,未主动拓展AI梳理接口、生成用例等用法;
- 优化提升方向 4. 补充Linux常用日志、文件操作命令实操练习; 5. 搭建JMeter串联接口压测demo,掌握JSON提取器参数关联; 6. 完善Python requests接口自动化脚本,封装批量数据比对工具类; 7. 回答技术问题统一采用「总分结构」:先讲整体方案,再分点细化落地步骤。