自动化测试面试题
测试用例设计方法
- 黑盒测试:
- 等价类划分
- 边界值分析
- 因果图法
- 正交实验设计
- 判定表法
- 错误推断法
- 白盒测试:
- 动态测试:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖
- 静态测试:不执行程序,检查代码逻辑
- 灰盒测试:介于黑盒和白盒之间,适用于集成测试阶段。
接口测试
- 依据:接口文档(说明、参数、参数类型、字段长度、是否必填、实现功能等)。
- 步骤:
- 根据接口说明设计测试用例。
- 将测试用例转化为自动化测试脚本。
- 运行脚本,不依赖其他接口(除登录接口)。
网络协议
- 7层协议:
- 通信子网:
- 物理层:中继器、集线器
- 数据链路层:网桥、交换机
- 网络层:路由器、防火墙
- 传输层:TCP、UDP
- 资源子网:
- 会话层
- 表示层
- 应用层:FTP、HTTP、Telnet、DNS
- 通信子网:
- FTP:工作在应用层,用于文件传输。
TCP 和 UDP 区别
- TCP:面向连接,可靠的数据传输服务,数据单元是报文段。
- UDP:面向无连接,不可靠,尽最大努力的传输服务,数据单元是用户数据报。
前后端分离的安全性
- 后端验证:仅依赖前端限制不安全,需要后端进行接口验证。
- 数据加密:前后端传输、日志打印等信息应加密,特别是涉及隐私信息(如身份证、银行卡等)。
B/S 和 C/S 架构区别
- B/S:
- 维护成本低
- 响应速度慢
- C/S:
- 响应速度快
- 安全性高
- 适用于局域网
- 针对不同操作系统需要分别开发,维护成本高
Bug 提交内容
- 缺陷的测试环境
- 功能模块
- 缺陷描述
- 缺陷截图
- 缺陷的优先级
- 缺陷的严重程度
SQL 查询
- 查询年龄最小的5个男生:
SELECT * FROM students WHERE gender = '男' ORDER BY age, id LIMIT 5;
- 统计班级身高最高的学生:
SELECT MAX(high) FROM students; SELECT * FROM students WHERE high = (SELECT MAX(high) FROM students);
HTTP 和 HTTPS 区别
- HTTP:明文传输,无加密。
- HTTPS:
- 加密传输,安全性更高。
- 使用端口 443,HTTP 使用端口 80。
- HTTPS 需要证书,HTTP 不需要。
访问网页速度慢的原因
- 检查本地网络是否正常。
- 查看网络带宽是否被占用。
- 使用
ping
命令检查服务器响应时间。
需求测试紧急上线应对措施
- 与开发团队和产品经理沟通。
- 优先处理关键问题。
- 进行快速测试和回归测试。
- 寻求团队协助。
- 提供明确的问题报告。
前端和后端问题判断
- 使用抓包工具确认前端是否调用接口。
- 检查前端传参是否正确。
- 检查后端接口返回结果是否正确。
APP 测试和 Web 测试的区别
- APP 测试:
- 中断测试(电话、短信、蓝牙、充电、低电量等)
- 安装、卸载操作
- 弱网络测试
- Web 测试:
- 浏览器兼容性
- 响应时间、CPU、内存、吞吐量
- 性能指标:
- Web:响应时间、CPU、内存、吞吐量
- APP:响应时间、CPU、内存、吞吐量、流量、电量
- 测试工具:
- Web:Selenium
- APP:Appium
- 页面操作:
- Web:屏幕左上角、右下角
- APP:手势、横竖屏、触控、前后台切换
- 安全测试:
- Web:敏感信息泄露、跨站脚本、SQL 注入
- APP:访问通讯录、相册、相机
JMeter 操作步骤
- 创建线程组。
- 新建 HTTP 请求默认值(输入接口服务器 IP 和端口)。
- 新建多个 HTTP 请求(每个请求一个用例,输入接口路径、访问方式、参数等)。
- 创建断言和查看结果树。
性能测试指标
- 响应时间
- 吞吐量
- 并发数
- TPS(每秒事务数)
- QPS(每秒查询数)
项目上线后的工作
- 输出测试报告(测试结论、数据指标、测试人员、相关文档)。
- 执行线上接口自动化回归用例,确保核心服务正常。
- 手工回归核心业务主流程,确保核心服务正常。
- 回归测试新增功能,确保所有功能正常上线。
- 线上数据监控(1-2天)。
- 需求收益核算,查看新功能是否达到预期收益。
Cookie、Session 和 Token 区别
- 存储位置:
- Session:服务器
- Cookie、Token:客户端
- 数据类型:
- Session:任意类型
- Cookie:字符串
- 安全性:Token > Session > Cookie
接口测试常见问题
- 接口功能不符合需求或与接口文档不一致。
- 界面操作问题(手工或自动化测试)。
- 权限问题(角色模拟测试)。
接口测试用例设计
- 确认接口功能是否正常。
- 全面覆盖输入参数(正常、异常、边界情况)。
- 使用等价类划分法和边界值分析法设计测试用例。
- 测试参数组合(必选和可选参数)。
- 测试约束条件(如输入非数字、超出范围、违反规则等)。
确保接口测试用例的覆盖率和准确性
- 确保业务功能覆盖。
- 确保业务规则覆盖。
- 确保参数验证覆盖。
- 确保接口异常处理覆盖。
Bug 可能存在的地方
- 前端
- 后端
- 数据库
OOP 核心特性
- 封装性:将类的属性和实现细节进行捆绑,保护数据和隐藏实现细节。
- 继承性:通过父类创建子类,子类继承父类的属性和方法。
- 多态性:通过统一方法调用实现不同行为,提高代码灵活性和可扩展性。
三次握手和四次挥手
- 三次握手:建立 TCP 连接的过程,确保双方准备好通信。
- 四次挥手:断开 TCP 连接的过程,确保双方都已准备好断开连接。
接口测试用例内容
- ID
- 模块
- 用例标题
- 接口名称
- 前置条件
- 接口地址
- 请求方式
- 请求头
- 请求数据类型
- 请求参数
- 预期结果
- 测试结果
性能测试用例内容
- 用例 ID
- 用例标题
- 用例描述
- 用例步骤
- 期望性能
- 测试结果
- 并发数
- 事务平均等待时间
- 事务最大响应时间
- 事务最小响应时间
- 中位数
- 吞吐量
软件测试流程
- 分析测试需求
- 制定测试计划
- 设计测试用例
- 执行测试
- 编写测试报告
集成测试方法
- 非增量式集成测试:一次性组装所有模块进行测试。
- 增量式集成测试:
- 自顶向下集成:从主程序模块开始,逐层向下组装和测试。
- 优点:早期验证主要控制点,减少驱动器开发成本。
- 缺点:桩模块开发量大,底层验证延迟。
- 自底向上集成:从底层模块开始,逐层向上组装和测试。
- 优点:早期验证底层行为,减少桩模块开发成本。
- 缺点:启动开发工作量大,高层接口变化频繁时影响较大。
- 自顶向下集成:从主程序模块开始,逐层向下组装和测试。
正常流程测试
- 打开微信,进入“我”的页面,选择“钱包”或“支付”。
- 点击“银行卡”,选择“添加银行卡”。
- 输入银行卡号、持卡人姓名、身份证号等信息,并进行验证。
- 设置支付密码或进行其他安全验证。
- 确认添加成功,并能在银行卡列表中看到新添加的银行卡。
异常流程测试
- 输入错误的银行卡号、持卡人姓名或身份证号,验证系统是否正确提示错误信息。
- 尝试使用已绑定的银行卡号进行重复绑定,验证系统是否正确提示“该银行卡已绑定”等相关信息。
- 尝试在绑定过程中取消操作,验证系统是否正确处理并返回到绑定前状态。
响应时间测试
多次尝试添加银行卡,记录从点击“添加银行卡”到系统完成绑定并返回结果的时间,确保响应时间在可接受范围内。
并发测试
模拟多个用户同时尝试添加银行卡的场景,验证系统在高并发情况下的稳定性和性能表现。
密码安全性测试
- 尝试使用弱密码进行绑定,验证系统是否正确提示“密码强度不足”等相关信息。
- 验证支付密码是否采用加密存储和传输,确保用户密码安全。
信息泄露测试
验证在添加银行卡过程中,系统是否对敏感信息(如银行卡号、身份证号等)进行了脱敏处理或加密显示。
不同操作系统测试
在不同版本的 Android 和 iOS 操作系统上尝试添加银行卡,验证系统在不同平台上的兼容性。
不同设备型号测试
在不同品牌和型号的手机、平板等设备上尝试添加银行卡,验证系统在不同设备上的兼容性。
银行卡号长度测试
- 验证系统是否能正确处理符合标准的银行卡号长度(如16位、19位等)。
- 尝试输入过短或过长的银行卡号,验证系统是否能正确提示错误信息。
输入字符限制测试
- 验证在输入持卡人姓名、身份证号等信息时,系统是否对输入字符的长度、类型等进行了限制。
- 尝试输入超出限制的字符,验证系统是否能正确提示错误信息。
SQL
- 比较运算符:
<>
或!=
:不等于BETWEEN...AND...
:在某个范围之内(含最小值和最大值)IN(...)
:在列表中的值(多选一)LIKE
:模糊匹配(%
匹配任意字符,_
匹配单个字符)IS NULL
:是NULL
AND
或&&
:并且(多个条件同时成立)OR
或||
:或者(多个条件任意一个成立&#x