测试面试题及答案
测试面试题及答案
一.基础题:
1.测试用例你一般是怎么设计的,怎么可以提高覆盖率?有没有形成自己的一套方法论?
答案:(参考: )
一)测试用例的切面设计
所谓测试切面设计,其实就是测试用例大项的划分。测试用例划分的经典方法是瀑布模型,也就是从上到下,逐渐细分,大模块包括小模块,小模块包括更小的模块。但仅仅如此是不够的,我们还要从更多的角度切入系统,从不同的角度把系统切分成一块一块的,来进行测试,从而确保测试大项的完整性。
功能点切面,特定切面,隐含切面(后台功能、业务 流程的测试、某种特定情况下的系统运行、其它相关系统、除功能测试外的其它测试类型)
二)详细用例的设计 1、具体切面功能表现用例设计 (具体功能测试、组合操作的测试、GUI界面的测试、数据初始化情况测试、业务 需求实现是否正确、)
2、功能切面隐含测试项用例设计 (数据完整性的测试、后台的特殊处理、功能业务之间的关联与转换、从设计 实现发掘测试点、并发操作时的测试)
3、 特定切面用例设计
4、隐含切面用例设计 ( 无界面的后台功能、与业务流相关的测试、其它测试类型 )
三)测试数据的设计
2.电梯是怎么测试的?用例设计
答案:
1.功能:上升、下降、停止、开门、关门、梯内电话、灯光、指示灯等;
2.性能:速度、反应时间、关门时间等;
3.压力:超载、尖锐物碰撞电梯壁等;
4.安全:停电、报警装置、轿箱停靠位置、有人扒门时的情况等;
5.可用性:按键高度、操作是否方便、舒适程度等;
6.UI:美观程度、光滑程度、形状、质感等;
7.稳定性:长时间运行情况等;
8.兼容性:不同电压是否可工作、不同类型电话是否可安装等。其实在简单分析的过程中,发现许多东西根本测试不全,比如电话、灯光、材质、调度程序、可维修性等,当发现在一个用例中无法说清楚时,这些应该拆分开来分别测试。可以告诉主考官,你需要模块化地测试电话、灯光等。再有在一起的组装测试。
下面是详细的测试点:
需求测试 :查看电梯使用说明书、安全说明书等
界面测试 :查看电梯外观
功能测试:
1.测试电梯能否实现正常的上升和下降功能。
2.电梯的按钮是否都可以使用。
3.电梯门的打开,关闭是否正常。
4.报警装置是否可用。
5.与其他电梯之间是否协作良好。
6.通风状况如何。
7.突然停电时的情况。
8.上升途中的响应。1)电梯本来在1楼,如果有人按18楼,那么电梯在上升到5楼的时候,有人按了10楼,这时候是否会在10楼先停下来
2)电梯下降到10层时显示满员,此时若8层有人等待电梯,是否在8层停。
9.是否有手机信号
可靠性测试:
1.门关上的一刹那出现障碍物。
2.同时按关门和开门按钮。
3.点击当前楼层号码
4.多次点击同一楼层号码
5.同时按上键和下键
易用性 :电梯的按钮的设计符合一般人的习惯吗
用户文档: 使用手册是否对电梯的用法、限制、使用条件等有详细的描述
压力测试: 1.看电梯的最大承重量,在负载过重时报警装置是否有提醒
稳定性测试: 看垫底在最大负载下平行运行的最长时间
3.从零到一独立负责一个大项目,你是如何开展测试的?
1、需求评审,确认研发计划。编写测试计划、测试方案。
2、先根据产品的需求文档 + 自己对当前行业的了解,拆分测试点 。拆分测试点的过程中,把遇到的不清晰的需求(或者技术方面,不理解的知识点),通过问产品/开发/搜索引擎检索/查阅公司内部资料,搞定 。
根据自己梳理完成的最终测试点,开始设计测试用例、进行用例评审(或是测试点评审)。
3、测试执行过程中 ,问题提交Bug系统,对提交的bug进行跟进、回归 。
4、关注风险 / 延期 ,以及 质量 / 进度 的平衡 ,及时反馈。
5、完成测试,提交测试报告 。
6、开始发布 、上线 (或有灰度发布流程。记得把上线的步骤,自己用文档,完整的记录下来,并模拟几次,确保无遗漏)。
7、进行生产环境测试
8、上线后,核心业务的日志、数据监控
9、上线后,线上问题反馈流程 。
10、上线后的值班。
11、项目复盘(总结会)
4.接口测试你是怎么做的?都发现了哪些问题,详细说下定位分析过程。
先普及下UI功能测试的6大流程:
1、需求分析与评审
2、测试计划编写
3、用例设计与评审
4、用例执行
5、缺陷管理
6、测试报告
再来看下接口测试的8大流程:
1、需求分析
2、Api文档分析与评审
3、测试计划编写
4、用例设计与评审
5、环境搭建(工具)
6、执行用例
7、缺陷管理
8、测试报告
接口流程
1、需求分析 项目立项后,对于整体产品的需求进行认识和理解(与功能测试的需求分析是一致的)。
注意:此时只有产品需求文档,架构师还没有开始建模,主要目的是保证各部门(产品、开发、测试…)对于需求理解一致。
2 、api文档分析 【重点】该环节主要分析:请求和响应。
请求:1、请求url是否合理 2、请求信息头是否明确 3、请求方法是否合理 4、请求参数是否必填、含义、参数方式(url\form\json)
响应:1、响应状态码是否合理 2、响应数据格式是否明确 3、响应信息头内容是否明确异常:异常返回信息和错误代码业务:接口彼此之间依赖关系
该流程重点是:1、请求参数方式和类型2、接口之间依赖关系 3、错误异常
3、测试计划 由测试Leader编写,目的:分配测试任务进度安排和指导测试方案执行。
核心:测什么、谁来测、怎么测、风险预测及控制。
4、用例设计 提示:该环节主要针对参数、测试数据、安全、依赖、异常进行覆盖。
测试用例大体分为两种:1、根据需求进行提取测试点2、设计用例覆盖测试点
5、环境搭建
提示:项目环境部署需要根据计划中安排执行,是否需要测试人员部署。
环境搭建可以是LAMP也可以是LNMP。
若想学习LNMP环境搭建视频,可以点击下方百度网盘获取:
1)实战视频-《Linux命令实战之Lnmp搭建禅道测试环境》 密码:wynj
- 简历项目-《如何在linux环境中使用Lnmp部署测试项目》 密码:zgbv
6: 用例执行
使用公司指定工具执行测试用例。
提示:提测之前最好安排进行冒烟测试,保证提测时准时执行
7:缺陷管理
使用缺陷管理工具来对执行用例的缺陷进行管理(与功能测试缺陷管理一致)
提示:缺陷提交->修复->回归->关闭
8:测试报告
测试报告不同公司有不同的模板,但测试报告主题内容一般分为下列四部分:
1、测试过程
2、缺陷统计
3、缺陷分析
4、测试总结
答案2:
接口测试常见bug:
1、特殊值处理不当导致程序异常退出或者崩溃
2、类型边界溢出,导致数据读出和写入不一致
3、取值边界外值未返回正确的错误信息
4、参数 为null或空字符串“”等
5、权限未处理,可以访问其他用户的信息
例如:无权限可以访问,或者 一般用户可以访问管理员权限)
6、逻辑校验不完善,可利用漏洞获取非正当利益
例如:某网站兑换1块钱需要100币,当小于100币时调用后台 接口是否可以兑换
例如:购物结算时为100元,调用 后台接口设为0元,哈哈
7、状态处理不当,导致逻辑出现错误(可能程序员123都搞懵了)
8、数组类型item个数为0或者item重复时程序异常退出
9、超时问题,超时后处理
10、潜在性能问题(后台提交处理或者把性能风险提前提出)
5.测试过程中你遇到最难得一个技术问题是什么?如何解决的?
从三个方面来回答
1、遇到的bug比较难发现,例如是小概率bug,如何找到必现的路径
2、遇到的bug技术难度比较大,例如是性能问题,如何分析并配置调优的
3、遇到的bug沟通处理的过程曲折,学会了工作中处理问题的能力
总之,挑选任何bug都要展示出学习到的技能,不能只是随便一个普通bug
6.你们公司后端是微服务架构吗?介绍一下( )
二.数据库
1.说一下sql是怎么优化的?
1、对查询进行优化,注意防止进行全表扫描,应先在 where 及 order by 涉及的列上建立索引。
2、防止在 where 子句中使用!=或<>操作符,不如对引擎放弃使用索引而进行全表扫描。
3、防止在 where 子句中对字段进行表达式操作,会出现引擎放弃使用索引而进行全表扫描。
4、任何地方不要使用 select * from t ,而是用字段列表代替“*”,不要返回用不到的任何字段。
5、防止使用游标,游标的效率不高,另外游标操作的数据超过1万行,需要进行改写。
6、防止向客户端返回大数据量,数据量出现过大,检查相应需求是否合理。
7、避免临时表的创建,删除
2.怎么看索引有没有生效的?索引的几种类型说一下。什么情况会导致索引失效?一般都在哪些字段上面加索引?索引应用场景
3.什么是数据库死锁,如何避免?
4.手写sql单表查询,分组,排序等操作
5.手写sql多表连接查询,嵌套子查询等
三.网络
1.http,rpc协议的特点,除了http协议接口还测试过哪些协议接口?怎么测试的?
2.说下cookies,session,token鉴权机制?为什么要引入这套机制?
3.浏览器输入百度网址发生了什么?DNS解析过程
4.tcp为什么三次握手不是两次?
四.linux
1.linux监控操作系统的常用命令,查看JVM的命令
2.linux三剑客说一下有什么区别,应用场景是什么?
3.查找大于1M的文件linux命令
4.linux查找当前目录下所有后缀为.py的文件
5.shell学过吗?都会哪些东西?说一下应用场景?
五.python
1.说一下装饰器,应用场景有哪些,项目中是怎么用到的?
( 闭包函数、自由变量)
装饰器的使用方法很固定:
1、先定义一个装饰函数(帽子)(也可以用类、偏函数实现)
2、再定义你的业务函数、或者类(人)
3、最后把这顶帽子带在这个人头上
装饰器的简单的用法有很多,这里举两个常见的。
1、日志打印器
2、时间计时器
参考( 非常好的参考讲解 )
#########################################################
所谓装饰器就是把函数包装一下,为函数添加一些附加功能,装饰器就是一个函数,参数为被包装的函数,返回包装后的函数
装饰器本身就是一个函数, 将所装饰的函数, 作为一个参数传进来, 然后在执行这个函数之前, 进行一个处理,这就是装饰器. 所以和正常函数执行顺序是一样的..
( )
#########################################################
2.深浅拷贝
浅拷贝只拷贝第一层,深层次的数据改变都会影响其他。
深拷贝是完全拷贝,数据变化只影响自己本身
浅拷贝,改变原始对象中为可变类型的元素的值,会同时影响拷贝对象;改变原始对象中为不可变类型的元素的值,不会响拷贝对象。深拷贝,除了顶层拷贝,还对子元素也进行了拷贝。经过深拷贝后,原始对象和拷贝对象所有的可变元素地址都没有相同的了。
3.说下python的可变参数,应用场景是什么?
1)不定长元组参数(*args),就是不确定数量的参数,定义一个参数把传入的参数组合成元组,来接收函数调用时传递过来的N个参数,在函数体内以元组形式按顺序读取
2)不定长字典参数(**kwargs),就是不确定数量的参数,定义一个字典,按键值对形式来接收函数调用时传递过来的N个参数,在函数体内以字典形式按键值对读取。这样在传递的时候,就可以不用在意顺序问题了
4.面向对象三大特征
1)封装:根据职责将属性和方法封装到一个抽象的类中
2)继承:实现代码的重用,相同的代码不需要重复的写
3)多态:以封装和继承为前提,不同的子类对象调用相同的方法,产生不同的执行结果
5.类变量,实例变量,类对象,实例对象
1)类变量:定义在类里面,类的所有实例共享的变量,可以直接用类调用,也可以使用实例对象调用。
2)实例变量:类实例化之后,每个实例单独拥有的变量。
3)类对象 :即类的本身。
4)实例对象:由类实例化出来的对象。
6.return和yield的区别
共同点:return和yield都用来返回值;在一次性地返回所有值场景中return和yield的作用是一样的。
不同点:如果要返回的数据是通过for等循环生成的迭代器类型数据(如列表、元组),return只能在循环外部一次性地返回,yeild则可以在循环内部逐个元素返回。
7.推导式,迭代器,生成器
推导式:是可以从一个数据序列构建另一个新的数据序列的结构体。 共有三种推导 :列表推导式、字典推导式、集合推导式
迭代器:迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。迭代器有两个基本的方法:iter()和next()。
生成器:生成器是一个返回迭代器的函数,只能用于迭代操作。
8.python中私有变量能否访问
xx:公有变量
_xx:单前置下划线,私有化属性或方法,类对象和子类可以访问,from somemodule import *禁止导入
__xx:双前置下划线,私有化属性或方法,无法在外部直接访问(名字重整所以访问不到)
xx:双前后下划线,系统定义名字(不要自己发明这样的名字)
xx_:单后置下划线,用于避免与Python关键词的冲突
9.python中类的方法种类和区别
静态方法、普通方法、类方法
1)静态方法: 用 @staticmethod 装饰的不带 self 参数的方法叫做静态方法,类的静态方法可以没有参数,可以直接使用类名调用。
2)普通方法: 默认有个self参数,且只能被对象调用。
3)类方法: 默认有个 cls 参数,可以被类和对象调用,需要加上 @classmethod 装饰器
六.接口自动化
1.有了postman,jmeter还有开源的接口自动化平台,为什么还要写代码来做自动化,你们这套自动化框架的意义是什么?
存在很多复杂场景的接口测试的, 它不是能用简单的方式解决的
1.测试工具有很多不足的地方,比如测试数据的不可控。 接口测试的本质就是调用接口输入数据,再验证接口返回的数据是否符合预期,如果返回的数据不可控那么工具就无法断言结 果!
2.工具无法测试加密的接口,比如说一个接口的入参需要签名验证,即是对当前的时间戳+密钥进行MD5加密后传输,因为时间戳是动态的,所以一般的接口测试工具是无法模拟的
3.工具的扩展能力不足,比如想生成不同格式的测试报告,并将测试报告发送至邮箱,又或者想将接口测试集成到持续集成中,如jekins都存在局限性
自动化框架的意义
自动化测试更便于实施。这个说的是,你写测试脚本要方便。一个好的自动化测试框架是可以让不那么懂技术的人也可以写自动化测试脚本的。
解决自动化测试脚本本身存在的问题,如异常处理和场景恢复。
测试易于维护。自动化测试项目,基本都是没有好的管理以及维护,一定是个大坑。我可以很负责地说,自动化测试没有一年半载,你是看不到产出的。所以管理及维护就成了最重要的事情。而好的框架,可以减少你在管理维护中所投入的人力物力精力。
可重用性。框架的意义之一就在于可重用吧。所以在框架里,你可以实现一些通用功能,简化脚本开发过程。
美观易读的测试报告。拿UFT来说,它产出的测试报告只是基于测试脚本的,并没有那种基于测试集的报告,所以如果你要,测试框架里可以实现。
2.说下接口自动化分别用了哪些框架,怎么实现的,你主要负责哪些部分?
3.你们这套框架最难的技术点有哪些?
4.搭建框架过程中遇到哪些问题,怎么解决的?
5.数据驱动怎么做的?关键字驱动怎么做的?
6.这套框架覆盖了开发多少业务代码,怎么统计出来的?
7.每个框架的技术细节,不一一举例了……
七.性能测试
1.你们公司性能测试怎么做的,说一下流程?
2.TPS上不去什么原因,怎么排查?响应时间太长怎么分析?
3.线程阻塞和死锁问题怎么去定位分析,有什么现象?
4.内存泄露和内存溢出有什么区别?分别会有什么现象?怎么定位分析?
5.数据库是怎么监控的,sql慢查询怎么监控分析?
6.如何进行全链路监控分析,定位性能瓶颈?
7.压测线上环境都会遇到什么问题,数据隔离怎么做的?如何减小对生产影响?
8.测试过程中都发现了哪些性能问题,怎么定位分析的?优化方案是什么?
八.JVM
1.JVM内存结构
2.什么时候垃圾回收,哪些内存需要垃圾回收?
3.JVM参数怎么调优?
九.中间件
1.正向代理和反向代理区别?
2.mq是如何测试的?你项目中怎么应用的?不同mq的优缺点?为什么使用mq?
3.为什么使用redis,redis五种数据类型,如何测试redis的,项目中如何应用的?
4.都发现过哪些缓存方面的bug,怎么定位的?
5.redis穿透,击穿,雪崩机制,被问了好几次……
十.手撕代码
1.常见的排序算法,冒泡,快排等
2.数组,字符串的相关算法操作比如找一个字符串中重复最长的字符串等
3.简单的数据结构栈,队列,链表的操作等