Skip to content

上海能良武汉研发基地 - 测试工程师校招面试 Q&A

字数
6596 字
阅读时间
26 分钟

一、自我介绍类

Q1:请做一个简单的自我介绍。

参考回答:

“面试官好,我叫陈启明,昆明理工大学计算机科学与技术专业,2026届本科毕业生。

大学期间我系统学习了软件测试相关知识,具备扎实的黑盒测试方法论,能熟练运用等价类、边界值、场景法进行业务分析。技术层面,我掌握了Python + Pytest + Selenium + POM的自动化测试框架搭建,能结合Allure生成可视化报告,利用Fixture和conftest实现用例的前后置处理与数据共享。接口测试方面,我熟悉Postman进行接口调试与断言,能用JMeter做简单的性能压测。

项目方面,我有三个经历:一是在极客资讯平台做功能测试,设计了AI辅助用例生成Skill提效;二是在安享智慧理财项目独立搭建了UI自动化框架并完成接口测试,累计开发20+条核心业务自动化用例,效率提升60%;三是最近刚完成一个电商APP的手工专项测试项目,涵盖了功能、兼容性、Push消息、性能监控等专项测试。

我对电商业务非常感兴趣,能良是天音控股旗下的核心电商企业,业务覆盖全主流电商平台,技术场景复杂,对测试工程师来说是很好的成长环境。希望能有机会加入,谢谢!”

二、项目深挖类(重点!)

Q2:挑一个你最拿手的项目,详细介绍一下。

参考回答(以“安享智慧理财”为例,用STAR法则):

  • S(情境):这是一个金融借贷平台,涉及借款人、投资人、审核员三种角色,包含借款、投资、还款等复杂业务流程。项目前后端分离,需要保证核心链路的功能正确性和稳定性。

  • T(任务):我负责针对借款、投资、还款三大核心业务链路,搭建UI自动化框架并完成接口测试。

  • A(行动)

    1. 基于POM设计模式封装了Selenium基类,把页面元素定位和业务操作分离,提高代码复用性;
    2. 通过Pytest + Fixture管理用例执行前后的数据准备和登录态处理;
    3. 集成Allure生成可视化测试报告,方便团队查看执行结果;
    4. 使用Charles模拟弱网环境,测试APP在网络不佳时的表现;
    5. 根据接口文档,使用XMind梳理测试点,用Postman对核心业务接口进行调试和断言。
  • R(结果):累计开发了20+条核心业务自动化用例,覆盖借款、还款全链路场景。UI自动化回归效率提升了60%,用例成功率稳定在98%以上。

Q3:你项目中“效率提升60%”是怎么算出来的?

参考回答:

“60%的提升是基于对比得出的。在引入自动化之前,核心业务链路的回归测试完全靠手工执行,一轮完整的回归需要大约2小时。

搭建自动化框架后,核心业务用例全部实现自动化执行,加上Allure报告的自动生成和分析时间,一轮回归控制在48分钟左右。

具体计算是:(120分钟 - 48分钟)/ 120分钟 ≈ 60%。当然这个数字会随着用例数量的增加有所浮动,但整体上自动化确实大幅提升了回归测试的效率。”

Q4:POM分层架构你是怎么设计的?为什么要用POM?

参考回答:

“POM即Page Object Model,是我在安享智慧理财项目中采用的架构设计。主要分为三层:

  1. Page层(页面对象层):存放每个页面的元素定位和页面操作方法。比如登录页有输入用户名、输入密码、点击登录等方法,每个方法封装了具体的元素定位和操作细节。

  2. TestCase层(测试用例层):编写具体的测试用例,调用Page层的方法组合成业务场景。用例层只关心业务逻辑,不关心元素怎么定位。

  3. Base层(基础层):存放Selenium的二次封装、日志、配置文件、工具方法等公共模块。

为什么要用POM:

  • 当页面UI发生变化时,只需要修改Page层的定位器,测试用例层不需要改动,维护成本大幅降低;
  • 测试代码可读性强,用例层读起来就像在描述业务操作;
  • 代码复用率高,避免重复写元素定位代码。”

Q5:自动化用例执行失败了,你的排查思路是什么?

参考回答:

“我的排查思路分四步:

  1. 看Allure报告:先看报告里的失败截图和错误日志,初步判断是元素找不到还是断言失败。Allure会记录每一步的执行截图,能快速定位到哪一步出的问题。

  2. 检查测试环境:确认测试环境是否正常、测试数据是否被污染。有时环境问题导致页面加载慢,触发超时。

  3. 本地复现:在本地调试模式执行失败的用例,观察浏览器操作过程,看看是页面元素变化了还是业务逻辑变更导致的。

  4. 定位问题归属:如果是前端页面改版导致定位器失效,更新Page层的定位表达式;如果是后端接口返回异常,提交Bug给开发修复。修复后全量回归验证。”

Q6:你是怎么用AI生成测试用例的?“Skill”具体指什么?

参考回答:

“在极客资讯项目中,我设计了一套可复用的AI提示词模板,我称之为‘用例生成Skill’。

具体做法是:针对登录、文章发布等核心模块,我设计了Few-shot + 角色扮演模式的Prompt。我会在提示词中:

  • 先设定AI的角色:‘你是一位资深测试工程师’;
  • 然后给出2-3个功能描述和对应测试用例作为示例(Few-shot);
  • 最后输入新的功能需求,让AI参考示例格式批量生成用例。

生成完成后,我会结合等价类、边界值等黑盒方法进行人工复核和补充,确保没有遗漏异常场景。

这套模板可以快速复用到其他模块,只要换掉功能描述就能生成一批基础用例,我再去做增量补充。单模块的用例设计时间从原来的2小时压缩到了40分钟左右。”

Q7:你用Postman怎么处理接口依赖的?

参考回答:

“在安享智慧理财项目中,很多接口需要登录后才能访问。我用Postman的变量机制来处理:

  1. 写一个登录接口的请求,在Tests脚本中用pm.response.json()提取返回的token数据;
  2. pm.environment.set(‘token’, token值)将token设置为环境变量
  3. 后续所有需要鉴权的接口,在请求头中添加Authorization: Bearer
  4. Collection级别的Pre-request Script中可以统一处理,确保每次执行Collection时自动完成登录和token刷新。

这样做的好处是:单接口调试时独立方便,批量执行时又能自动串联,兼顾了灵活性和自动化。”

Q8:APP测试和Web测试最大的区别是什么?

参考回答:

“最大的区别体现在三个方面:

  1. 架构不同:APP端是C/S架构,Web端是B/S架构。APP需要安装在移动设备上,Web通过浏览器访问。

  2. 测试范围不同:APP除了功能测试,还有专项测试——包括安装卸载升级、兼容性(机型/系统版本/分辨率)、交叉事件(来电/网络切换/旋转屏幕)、Push消息推送、流量/电量/CPU/内存等性能指标。Web测试相对更侧重兼容性和服务器性能。

  3. 交互方式不同:APP支持多点触控、手势、传感器等,Web主要是鼠标键盘操作。”

Q9:你用ADB做过哪些事情?

参考回答:

“在电商APP测试项目中,我使用了ADB命令行工具做辅助测试:

  1. 安装与卸载:用adb install批量安装不同版本的APK,用adb uninstall卸载验证数据清除;
  2. 日志抓取:用adb logcat抓取APP运行日志,辅助定位崩溃和异常问题;
  3. 稳定性测试:用adb shell monkey执行随机事件对APP进行压测,检查是否出现ANR或崩溃;
  4. 性能监控:用adb shell dumpsys meminfo查看内存占用,监测是否有内存泄漏;用adb shell top实时查看CPU使用情况;
  5. 页面信息获取:用adb shell dumpsys window | findstr mCurrentFocus获取当前页面名称,用于启动测试和自动化定位。”

三、技术基础类

Q10:接口测试中GET和POST的区别?

参考回答:

对比点GETPOST
数据位置参数拼接在URL后面(Query String)参数在请求体中(Body)
数据长度限制URL长度有限制(约2KB)理论上无限制
安全性参数暴露在URL中,不安全参数在Body中,相对安全
缓存可以被浏览器缓存默认不会被缓存
幂等性幂等(多次请求结果相同)非幂等(多次请求可能产生不同结果)
典型场景查询、搜索提交、创建、修改

面试时可以说: “GET一般用于获取数据,参数暴露在URL;POST用于提交数据,参数放在Body中。做接口测试时,我习惯结合业务场景判断用GET还是POST——比如登录接口用POST,商品列表查询用GET。”

Q11:说一下常见的HTTP状态码?

参考回答:

状态码含义举例场景
200成功请求成功,返回数据
301永久重定向网址迁移,永久跳转
302临时重定向临时跳转,如未登录跳转到登录页
400请求错误参数格式不对或缺少必传参数
401未授权需要登录或token过期
403禁止访问登录了但没权限
404资源不存在请求的URL不存在
500服务器内部错误后端代码异常

面试时可以说: “测试接口时,我主要关注2xx表示成功,4xx代表客户端问题(参数、鉴权),5xx代表服务端问题。发现4xx先检查自己传参,发现5xx直接提单给开发。”

Q12:Cookie和Session的区别?

参考回答:

对比点CookieSession
存储位置存储在浏览器端存储在服务器端
大小限制一般4KB以内无明确大小限制
安全性相对不安全(可被篡改)相对安全(存储在服务端)
生命周期可设置过期时间一般会话结束就失效
依赖关系独立存在依赖Cookie存储SessionID

面试时可以说: “Cookie是存在客户端的身份凭证,Session是存在服务端的用户状态。用户登录成功后,服务器生成Session并返回SessionID给客户端存到Cookie中,后续请求带上Cookie中的SessionID,服务器就能识别用户身份。在做接口测试时,如果涉及登录态,我通常会先获取Cookie或Token,再传递给后续接口。”

Q13:你熟悉哪些Linux命令?平时怎么用?

参考回答:

“测试工作中常用的Linux命令有这些:

命令用途测试场景举例
ls查看目录文件查看日志文件是否存在
cd切换目录进入日志存放目录
grep搜索文件内容过滤日志中的ERROR关键字
find查找文件查找指定名称的配置文件
tail -f实时查看文件末尾实时监控日志输出
ps查看进程查看服务进程是否在运行
netstat查看网络端口确认端口是否被占用
mkdir/touch创建目录/文件创建测试数据存放目录

实际工作中最常用的是tail -f实时看日志,和grep过滤关键字定位问题。比如服务报错时,我会用grep ERROR app.log快速找到错误信息。”

Q14:手写一个多表联查的SQL。

参考回答:

sql
-- 场景:查询每个用户的订单数量,只显示下单超过3笔的用户
SELECT u.user_name, COUNT(o.order_id) AS order_count
FROM users u
INNER JOIN orders o ON u.user_id = o.user_id
WHERE o.order_status = '已完成'
GROUP BY u.user_id, u.user_name
HAVING COUNT(o.order_id) >= 3
ORDER BY order_count DESC;

核心知识点(被追问时展开):

  • INNER JOIN:取两个表的交集,只返回匹配的记录;
  • GROUP BY:按用户分组,再用COUNT聚合统计订单数;
  • HAVING:对分组后的结果做筛选(WHERE是对原始行做筛选);
  • 执行顺序:FROM → JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY。

Q15:Python中没什么是Fixture?为什么用它?

参考回答:

“Fixture是Pytest中用于管理测试前置和后置操作的装饰器。在安享智慧理财项目中,我主要用它来处理登录态:

python
import pytest
from selenium import webdriver

@pytest.fixture(scope=“session”)
def driver():
    “”“每个测试会话只创建一次浏览器驱动”“”
    driver = webdriver.Chrome()
    yield driver
    driver.quit()

@pytest.fixture(scope=“function”)
def login(driver):
    “”“每个测试函数执行前自动登录”“”
    driver.get(“登录页面”)
    driver.find_element(...).send_keys(“用户名”)
    driver.find_element(...).send_keys(“密码”)
    driver.find_element(...).click()
    yield  # 测试函数在这里执行
    # 测试完成后清理数据

使用Fixture的好处:

  1. 代码复用:登录逻辑只需要写一次,多个用例共享;
  2. 依赖管理:自动处理用例的执行顺序和依赖关系;
  3. 多种作用域session级别(整个测试会话共享)、function级别(每个用例独立),灵活控制资源的创建和销毁。”

四、测试基础与流程类

Q16:你熟悉的黑盒测试方法有哪些?举个例子。

参考回答:

“我常用的黑盒测试方法有四种:

  1. 等价类划分:把输入数据分成有效等价类和无效等价类,每类选一个代表值测试。比如登录密码要求6-20位,有效类是6-20位的密码,无效类是少于6位、多于20位、为空。

  2. 边界值分析:测试边界值最容易出错。比如密码6-20位,边界值是5位、6位、20位、21位。

  3. 场景法:模拟用户真实操作路径。比如登录场景包括:正确的用户名密码登录、密码错误登录、用户不存在登录、连续输错锁定等。

  4. 判定表:处理多条件组合。比如优惠券使用规则:订单金额、用户等级、使用平台等多个条件组合时,用判定表确保覆盖所有组合。”

Q17:完整的测试流程是怎样的?

参考回答:

“标准的企业级测试流程分为六个阶段:

  1. 需求分析阶段:参与需求评审,理解业务逻辑,识别测试点和风险点;
  2. 测试计划阶段:制定测试策略、资源排期、测试范围边界;
  3. 用例设计阶段:用等价类、边界值、场景法等方法设计用例,用XMind梳理脑图,进行用例评审;
  4. 用例执行阶段:按计划执行用例,记录测试结果;
  5. 缺陷跟踪阶段:发现Bug提交到禅道等管理工具,跟踪开发修复,回归验证直到关闭;
  6. 测试报告阶段:输出测试报告,包括用例执行情况、Bug统计、遗留风险、测试结论。”

Q18:Bug的生命周期有哪些状态?

参考回答:

“一个Bug从发现到关闭,通常经历以下状态流转:

状态含义谁操作
新建(New)测试刚提交,尚未确认测试
已确认(Confirmed)开发确认是Bug开发
已修复(Fixed)开发完成修复开发
待验证(Verify)等待测试验证测试
已关闭(Closed)验证通过,正式关闭测试
拒绝(Rejected)开发认为不是Bug/或无法复现开发
重新打开(Reopen)验证不通过或复现测试

实际工作中,重点跟踪的是‘新建→已确认→已修复→已关闭’这条主线。遇到‘拒绝’状态,要和开发沟通确认,无法达成一致时找产品经理评判。”

五、职业规划与行为类

Q19:你未来3-5年的职业规划是什么?

参考回答:

“我是从长远发展来看待这个岗位的。我的规划分两个阶段:

短期(入职后1-2年):在能良打好电商业务基础和技术功底,尽快熟悉公司的业务和技术架构,成为一个能独立负责模块的测试工程师。同时利用轮岗机会深入理解用户侧和业务侧的需求逻辑。

中期(3-5年):向测试开发方向深入发展,从‘执行测试’逐步过渡到‘设计测试框架、搭建测试平台’,成为团队中的技术骨干。如果有机会,希望在接口自动化或全链路压测方面建立更深的技术壁垒。

长期来看,我的目标是在测试技术领域深耕,但不排除向测试管理方向发展的可能——但这需要建立在扎实的技术功底之上,所以前几年我会把主要精力放在技术积累上。”

Q20:为什么选择做测试而不是开发?

参考回答:

“选择测试而不是开发,基于我对自己的认知和对测试这个岗位的理解:

  1. 视角优势:我的思维习惯是比较全面的——做测试时,我会下意识考虑各种异常情况和边界场景,而不只是‘功能能跑通就行’。这种思维模式让我更适合做质量保障工作。

  2. 用户视角:测试是离用户最近的岗位之一,能真正感受到自己工作带来的价值——保障了用户体验、拦截了线上事故。我比较享受这种‘发现问题、解决问题’带来的成就感。

  3. 测试开发的复合性:现在的测试岗位早已不是‘点点点’,而是需要写代码、搭框架的测试开发。这个岗位既能让我发挥编程能力,又比纯开发多了一层对系统整体质量的责任感。”

Q21:你的优点和缺点是什么?

参考回答:

优点:

  1. 自驱力强:大学期间我主动学习了自动化测试框架、接口测试、APP专项测试等多个方向,不只是跟着学校课程走,而是自己找资料、动手实践;
  2. 做事细致:写测试用例时会反复琢磨边界值和异常场景,发现Bug后喜欢追根究底;
  3. 学习速度快:从零搭建自动化框架、学ADB命令,基本都是边查边做,上手比较快。

缺点:

  1. 经验不足:毕竟还没正式工作过,对大型商业项目的复杂度和团队协作流程还在学习中;
  2. 容易过度追求完美:写用例时总想把所有场景覆盖完,有时候会在细节上花太多时间。现在会有意识地先保证核心场景覆盖,再补边缘场景。”

Q22:你对轮岗(客服1.5个月+直播1.5个月)怎么看?

参考回答:

“我理解这是能良培养校招生的特色机制,轮岗对我来说不是‘打杂’,而是真正理解业务的机会:

  1. 客服轮岗:能直接接触到用户的真实反馈和痛点——哪些功能用户最困惑、哪些报错最容易出现。这些信息对测试来说非常珍贵,能帮助我在设计用例时更贴近用户场景。

  2. 直播轮岗:能理解流量转化和用户行为逻辑,比如直播间的用户是怎么下单的、支付转化路径是怎样的。这些是我作为测试在办公室里接触不到的。

总结来说:我愿意接受轮岗,也期待通过这3个月真正理解电商业务——我相信这段经历对我以后做测试,尤其是场景覆盖和缺陷定位,是很大的加分项。”

Q23:为什么选择能良?

参考回答:

“选择能良有三点原因:

  1. 平台价值:能良是天音控股旗下的核心电商企业,业务覆盖淘宝、拼多多、京东、抖音、快手等全主流电商平台,在各大平台拥有700多家店铺。技术场景复杂、数据量庞大,对测试工程师来说是很好的成长环境。

  2. 技术导向:武汉是公司的研发基地,说明公司对技术足够重视。岗位明确是‘研发工程师-测试方向’,走的是测开路线,和我自身的技能积累和发展方向一致。

  3. 培养体系:公司有明确的校招培养机制和轮岗安排,说明愿意花时间和资源培养新人。对刚毕业的我来说,第一份工作最看重的就是‘能不能学到东西’。”

六、向面试官提问

Q24:你有什么想问我们的吗?(必备问题库)

建议选2-3个提问:

技术与发展类:

  1. “这个岗位的自动化测试占比大概是多少?团队目前主要使用哪些自动化框架和技术栈?”
  2. “测试团队目前面临的最大技术挑战是什么?”
  3. “公司对校招生的培养路径是怎样的?入职后会有导师带吗?”

团队与业务类: 4. “武汉研发测试团队目前有多少人?测试和开发的比例大概是多少?” 5. “测试团队是如何参与需求评审的?测试在项目中的话语权怎么样?” 6. “公司的产品迭代周期大概是多久?测试团队如何应对快速上线的压力?”

岗位细节类: 7. “定岗方向的分配是在offer时确定,还是轮岗后双向选择?” 8. “这个岗位的晋升路径大概是怎样的?从初级到高级大概需要多长时间?”

七、面试避坑提醒

不要这样说建议改成
“我不会,但我可以学”“我对XX了解还不够深入,但我在XX项目中有类似经验,相信能快速上手”
“那个项目是练手的”“虽然是练习项目,但我严格按照企业级标准执行了完整测试流程”
“开发写的Bug太多了”“我发现问题后会积极推动开发修复,共同保障产品质量”
“我不想轮岗,只想写代码”“我理解轮岗的价值,愿意通过轮岗深入理解业务”
“我没什么想问的”准备2-3个有深度的问题反问面试官

祝面试顺利!🍀

贡献者

The avatar of contributor named as freeway348 freeway348

文件历史

撰写