测试面试题
一 、 测试工作流程
需求评审(有开发人员,产品经理,测试人员,项目经理)->需求确定->开发设计文档(开发人员在开始写代码前就能输出设计文档)->写出测试用例->发给开发人员和测试经理看看(正式的评审用例)->接到测试版本->执行测试用例->提交bug(有些bug需要开发人员的确定(严重级别的,或突然发现的在测试用例范围之外的,难以重现的),有些可以直接录制进TD)->开发人员修改->回归测试 — 提交测试报告—整个测试通过之后—版本上线
二、设计用例的方法
白盒测试:逻辑覆盖法,主要包括语句覆盖,判断覆盖,条件覆盖,判断-条件覆盖,路径覆盖
黑盒测试:等价划分类,边界值分析,错误推测法
**测试用例设计点 功能性 ** 易用性 安全性
兼容性(兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行)
三 、 怎么定位前端还是后台的问题
前端bug特点 1, 界面相关 2,布局相关 3,兼容性相关
后端bug特点 1,业务逻辑相关 2,性能相关 3,数据相关 4,安全性相关
前端bug主要分为3个类别:HTML,CSS, Javascript三类问题
出现样式的问题基本都是CSS的bug
出现文本的问题基本都是html的bug
出现交互类的问题基本都是Javascript的bug
\1. 查看前端给的状态码
\2. 查看后端返回信息
\3. 查看日志
\4. 对接口进行测试(Postman)
\5. 查看数据库状态
\6. 实际操作一下确定具体问题
\7. 前端是否有明显报错如(js css JavaScript)静态资源页面展示
\8. 后端获取数据库数据后端跨域接口功能实现
四 、怎么给开发提bug**
一,熟悉Bug管理工具
二,准确地给bug定级
三,准确记录bug信息
Bug的标题 和详细描述
标题主要是对你所提交的Bug进行简明扼要的描述;
提交bug时,应该说明哪些信息?
所属模块 bug类型 —(哪一类的错误:代码 界面 安全 性能 设计缺陷等)— 操作系统 — 浏览器
指派给哪位开发 — bug标题 — bug的严重程度 — 修改bug的优先级
复现步骤 (重现步骤最好能有截图和视频类附) 预期结果 实际结果
五、针对bug怎么去判定等级
1.致命问题:
造成系统崩溃、死机、死循环,导致数据库数据丢失,与数据库连接错误,主要功能丧失,基本模块缺失等问题。如:代码错误、死循环、数据库发生死锁、重要的一级菜单功能不能使用等
2.严重问题:
系统主要功能部分丧失、数据库保存调用错误、用户数据丢失,一级功能菜单不能使用但是不影响其他功能的测试。功能设计与需求严重不符,模块无法启动或调用,程序重启、自动退出,关联程序间调用冲突,安全问题、稳定性等。
3.一般问题
功能没有完全实现但是不影响使用,功能菜单存在缺陷但不会影响系统稳定性。
4.轻微问题:
接口、性能缺陷,建议类问题,不影响操作功能的执行,可以优化性能的方案等
六、除了接口怎么定位问题
看服务日志,有数据库相关报错,还有代码相关报错
七、 接口自动化
我们采用unittest和ddt数据驱动搭建测试框架,(对数据excel读取、yaml配置、Requests接口请求、Re参数化、Pymysql数据库效验、日志等模块实现封装),
1.Openpyxl来处理excel,存储测试数据(用例数据)
2.pyyaml来配置文件(configparse,pyyaml)
- Pymysql来连接mysql数据库,执行sql数据,进行数据效验
4.Requests请求库,来向接口发起请求
5.使用logging模块来创建日志器,记录项目中的日志信息
6.使用HttpTestRunner来生成HTML测试报告
7.使用re模块来实现参数化(正则匹配)
8.使用动态创建属性(类属性)的机制来实现接口之间的依赖 (setattr getattr)
八、 python的基本数据类型
整数 int类型 print(‘3+4的值是{}’.format(add))
字符串 字符串就是一系列字符。单引号、双引号或者三引号里面的内容就是字符串。
布尔类型 boolean:布尔类型【只有两个值,分别为True和False】 True and True # ==> True
列表 List 列表用 [ ] 标识, names_python_pc = [‘毛豆’,‘刘德华’,‘张学友’,‘美女’] 有序性包含不同种类、任意类型的对象 本地可修改
元组 tuple 用”()”标识 tup1 = 1,2,3 print(tup1) 有序不可修改
字典 Dictionary {key:value} 无序 **每个键都是唯一的
name_dictionary = {‘老爸’:300,‘老婆’:1000,‘老妈’:800,‘自己’:600,‘孩子’:200} print(name_dictionary)
集合类型:set { } 无序不重复
字符串 —>string类 索引–> index()、find() 长度 -->length() 删除 --> delete
分割 --> split()
运算符
- 算术运算符:+,-,*,/,%,即加、减、乘、除、取余
- 比较运算符:==,!=,>,<,>=,<=,即等于、不等于、大于、小于、大于等于、小于等于
- 赋值运算符:=,+=,-=,*=,/=,%=,即赋值、加赋值、减赋值、乘赋值、除赋值、取余赋值
- 逻辑运算符:and,or,not,即与、或、非
for循环 while循环。
九、json和string 相互转换
json对象(dict)转string 简单地直接转换----使用json.dumps()
string转json对象(dict)----使用json.loads()
十、 常见的异常都有什么 兼容性异常
ArithmeticException 算数异常
NullPointException 空指针异常
ArrtIdexOutOfBoundException 数组越界异常
InsexOutOfBoundException 索引越界异常
ClassCastException 类型转换异常
InputFormatException 输入类型不匹配
IOException 输入输出异常
SQLException SQL异常
IllegalArgumentException 非法参数异常
十一、 fiddler 抓包咋用?为什么要抓包 怎么运用其中功能
\1. fiddler默认只能抓包HTTP协议, 不能HTTPS协议
安装hTTPS证书
\2. 过滤器 filters: 过滤掉不需要关注的请求(通过服务器ip或域名进行过滤)
\3. rules --> automatic breakpoints --> before requests after responses
\4. autoresponder 进行重定向操作
\5. 使用composer进行发起请求, 进行接口测试.
\6. 抓包的目的
\1. 没有接口文档时, 可以以抓取的接口为参照
\2. 用于定位问题.(前端/后端问题)
\1. 通过页面发起请求, 抓包, 抓包之后确认一下,前端传递数据的准确性
\2. 前端调用接口的逻辑是否通畅
\3. 是否有多次/冗余调用
\4. 后端响应中, 1. HTTP协议响应状态码 2. 响应数据是否准确
\5. 业务逻辑是否正确
一.对PC参数进行配置
\1. 配置fiddler允许监听到https(fiddler默认只抓取http格式的)
打开Fiddler菜单项Tools->TelerikFiddler Options->HTTPS,
勾选