目录
- 一、测试开发与用户需求
- 二、软件开发生命周期与开发模型
- 三、BUG管理与评审
- 四、测试用例设计方法
- 五、测试方法与技术
- 六、测试分类
- 七、测试方法详解(白/黑/灰盒)
- 八、测试阶段分类
- 九、自动化测试基础
- 十、自动化测试常用操作
- 十一、弹窗与等待机制
- 十二、浏览器导航与文件上传
- 十三、面试常见问题
一、测试开发与用户需求
- 测试开发:核心在于验证软件特性是否满足用户需求。
- 用户需求:未经合理评估的需求不能作为开发和测试的依据。
- 软件需求:是开发与测试人员执行工作的基础。
二、软件开发生命周期与开发模型
1. 软件开发生命周期 (通用流程)
需求分析 → 计划 → 设计 → 编码 → 测试 → 运行维护
2. 常见开发模型
- 瀑布模型 (适用于固定需求的小项目)
- 每个流程只执行一次,线性推进。
- 缺点:产品周期长,用户难以及时体验。
- 螺旋模型 (适用于规模大、复杂度高、风险大的项目)
- 每阶段引入风险分析。
- 缺点:需额外风险分析人才。
- 增量模型 / 迭代模型 (适用于大型项目)
- 大需求拆分为小需求,逐步上线。
- 敏捷模型
- 典型代表:Scrum(结合增量与迭代)
- 三大角色:产品经理、项目经理、研发团队
- 五个重要会议:需求发布、计划发布、每日会议、演示会议、回顾会议
三、BUG管理与评审
1. BUG基本要素
- 问题出现的版本、环境、步骤
- 预期结果 vs 实际结果
2. BUG定义
- 不符合项目文档实现即为 BUG。
3. BUG级别与修复顺序
- 修复顺序:崩溃 > 严重 > 一般 > 次要
- 作用:BUG 级别用于评估开发能力、影响年终奖。
4. 遇到争执时的建议
- 先自查 BUG 描述是否清楚。
- 站在用户角度考虑问题。
- BUG 定级需有理有据。
- 提升自身技术和业务能力,提出问题并给出解决方案。
5. BUG评审人员
- 测试代表
- 开发代表
- 产品代表
四、测试用例设计方法
1. 思维模式
- 常规思维
- 逆向思维
- 发散型思维
- 注:笔试常用 Excel 表格,面试常用思维导图。
2. 万能测试用例公式
- 功能测试:验证功能是否正常
- 界面测试:大小、形状、颜色、材质
- 性能测试:反应速度与效率
- 兼容性测试:不同平台、版本
- 易用性测试:用户操作便利性
- 安全性测试:私密性,如 SQL 注入、越权
- 弱网测试:覆盖各种网络场景(工具:Fiddler/Charles 控制网速)
- 安装与卸载测试:多种安装/卸载场景
- 软件更新测试
五、测试方法与技术
1. 测试用例设计技术
- 等价类:少量用例覆盖广泛场景(有效/无效等价类均需测试)。
- 边界值分析:关注边界及次边界值。
- 场景法:模拟多个事件流(基本流、备用流)。
- 正交表法:减少用例数量,保证覆盖面(如 L4 正交表)。
- 判定表
- 错误猜测法
2. 接口测试
- 核心:请求与响应
- 常用工具:Postman
六、测试分类
- 界面测试:所有可见元素
- 功能测试:功能点验证
- 性能测试:响应速度
- 可靠性测试:非正常/正常运行时间比
- 安全测试
- 易用性测试
- 静态测试:代码、界面或文档静态检查(如 SonarQube)
- 动态测试:运行程序、输入数据、检查输出
七、测试方法详解(白/黑/灰盒)
| 类型 | 描述 | 方法/覆盖 | 优缺点 |
|---|---|---|---|
| 白盒测试 | 分析程序内部结构,单元测试,可见代码 | 语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖 | 深入代码逻辑 |
| 黑盒测试 | 只关注功能,不看代码 | 等价类、边界值、因果法、场景法、错误猜测法 | 优 :贴合用户视角 缺:无法覆盖所有代码 |
| 灰盒测试 | 介于白盒与黑盒之间 | 常用于集成测试 | / |
八、测试阶段分类
1. 按阶段划分
- 单元测试:最小功能单元(方法、函数)
- 集成测试
- 系统测试:由测试人员执行
- 冒烟测试:验证程序可测试性
- 回归测试:循环验证
- 验收测试:交付前测试
2. 按测试方式
- 手动测试
- 自动化测试
3. 按实施组织
- α测试 (Alpha):内测,公司内部人员(非开发与测试人员)
- β测试 (Beta):公测,正式用户部分参与
九、自动化测试基础
- 目的:提升测试质量与效率
- 应用场景:回归测试、新旧版本对比
- 自动化测试分类 :
- 浏览器自动化
- Web 前端自动化
- 后端接口自动化
- 终端软件自动化
- 分层模型 :
- UI 接口测试(顶层)
- API / 集成 / 组件测试
- 单元测试(底层,投资回报率最高)
十、自动化测试常用操作
1. 元素查找
find_element(方式, "元素"):查找单个元素find_elements(方式, "元素"):查找多个元素- 支持方式 :
cssSelector、xpath- xpath 示例:
//*(所有页面元素)、//*[@id="..."](匹配指定id)
- xpath 示例:
2. 元素操作
- 模拟键盘输入:
send_keys("内容") - 清空内容:
clear() - 获取文本信息:
text - 获取属性值:
get_attribute(属性)
3. 页面信息
- 页面标题:
title - 获取 URL:
current_url
4. 窗口操作
- 获取当前句柄:
current_window_handle - 获取全部句柄:
window_handles - 切换窗口:
switch_to.window() - 最大化/最小化/全屏:
maximize_window(),minimize_window(),fullscreen_window() - 设置窗口大小:
set_window_size(长,宽)
5. 屏幕截图
-
保存截图:
save_screenshot('路径+名称') -
动态命名示例 :
pythonfilename = "autotext" + datetime.datetime.now().strftime('%Y-%m-%d-%H%M%S') + '.png'
6. 关闭与退出
- 关闭窗口:
close() - 退出浏览器:
quit()
十一、弹窗与等待机制
1. 弹窗处理
- 场景:页面无法查找元素时,需先处理弹窗。
- 类型:警告弹窗、确认弹窗、提示弹窗。
- 操作 :
switchTo.alertalert.accept()(确认)alert.dismiss()(取消)send_key()(输入内容)
2. 等待机制
-
强制等待 :
sleep()(不推荐,浪费时间) -
隐式等待 :
implicitly_wait()(作用于所有脚本元素) -
显示等待 :
pythonWebDriverWait(driver, sec).until(EC.invisibility_of_element((By.XPATH, 查找元素))) -
注意:显示等待与隐式等待不要混用。
十二、浏览器导航与文件上传
1. 导航操作
- 打开网址:
get(网址) - 前进/后退/刷新:
back(),forward(),refresh()
2. 浏览器参数设置
- 无头模式 :
add_argument("-headless")(默认有头) - 页面加载策略 :
page_load_strategy='加载方式'normal:默认,等待所有资源。eager:建议,主体部分准备好即可。none:不阻塞 WebDriver。
十三、面试常见问题
Q1: 软件测试开发工程师 vs 测试工程师
- 相同点:均为测试人员,负责保障产品质量。
- 不同点 :
- 测试开发侧重开发测试效率工具(如自动化、性能测试),不是业务开发。
- 测试工具无法完全替代测试人员。
Q2: 为什么测试岗位需学习开发知识?
- 测试人员需编写代码(自动化、性能测试、工具开发),了解开发框架。
- 有助于提升测试质量,从代码层面发现问题。
Q3: 为什么选择测试而非开发?
- 岗位要求、个人兴趣、职业规划。
Q4: 自动化测试能否取代人工测试?
- 不能。自动化测试由测试人员编写,需定期维护和更新,不能完全保障系统可靠性。
Q5: 自动化测试能否大幅降低工作量?
- 不能。测试工作不仅仅是执行测试,还包括设计、维护等环节。