软件测试面试题总结
一、测试基础
- 对软件测试的理解(软件测试的目的)
找出软件产品和程序中的错误,使软件尽可能的符合用户的要求。 - 测试流程
a. 需求评审
b. 编写测试计划
c. 测试用例设计
d. 搭建测试环境以及执行用例
e. 缺陷管理
f. 编写测试报告 - 做好测试用例设计工作的关键是什么
用以较少的用例覆盖尽可能多的内部程序逻辑结果。 - 如何制定测试计划
a. 测试目标:明确测试的目标是什么,例如发现软件中的缺陷,检查软件是否符合用户需求等。
b. 测试方法:根据测试目标来选择测试方法,不同的测试方法针对的问题和范围不同,如黑盒测试、白盒测试、功能测试、性能测试等。
c. 测试时间表:根据项目进度和测试工作的重要性,确定测试时间表和测试阶段,尽量安排足够的时间进行测试。
d. 测试资源:包括测试人员、测试工具、测试环境等,需根据测试计划的需要进行规划和准备。
e. 测试报告:测试完成后,生成测试报告并分析测试结果,为软件改进提供依据。 - 在项目中如何保证软件质量
a. 产品,保证迭代过程中的产品逻辑,对于可能的兼容,升级做出预判,并给出方案
b. 设计,满足产品表达的同时,保证设计的延续性
c. 开发,产品细节的保证,技术方案选择要严谨,考虑兼容,性能,开发完成后要充分自测,严格遵循开发规范操作
d. 测试,验证产品逻辑,站在用户角度对交互设计进行系统验证,尽可能多的使用技术手段保证测试质量 - 功能测试用例一般包含哪些内容?
用例编号
用例标题【预期结果(测试点)】
所属模块
优先级(P0-P4【用户最常用的为P0,优先级最高】)
前提条件
测试步骤
测试数据
预期结果 - APP测试和web测试有什么区别
Web 端测试和移动端测试类型基本相似,都需要进行功能测试、性能测试、安全性测试,他们主要区分 web 端一般都是 b/s 架构, 基于浏览器的, app 是 c/s 架构,是有客户端的。 - 当开发人员说不是BUG时,你如何应付?
开发人员说不是 bug,有 2 种情况, 一是需求没有确定, 所以这个时候可以找来产品经理进行确认,需不需要改动, 商量确定好后再看要不要改。二是这种情况不可能发生, 所以不需要修改,这个时候可以先尽可能的说出是 BUG 的依据是什么? 如果被用户发现或出了问题, 会有什么不良结果? 程序员可能会给你很多理由,你可以对他的解释进行反驳。如果还是不行,那可以给这个问题提出来,跟开发经理和测试经理进行确认,如果要修改就改,如果不要修改就不改。如果最终 bug 被确定不改,那么就要在测试报告里面记录一下, 以便以后查阅。 - 遇到概率性bug怎么办?
概率性 bug ,又叫幽灵 bug,首先需要明确的是, 该类 bug 也是需要提单的,描述清楚当时操作环境、操作步骤、数据、并提供必要日志, 可备注上可能产生原因。然后耐心一点, 运用排除法、错误推测找规律, 必要时找开发人员、项目经理一起定位分析讨论, 如果最终仍未解决,那么需要在测试报告中体现,并分析可能造成的影响,大家一起权衡该 bug 是否可遗留。 - 如何提交一份高质量的缺陷跟踪单
首先要明确,缺陷跟踪单不仅仅是给自己看的,所以高质量的缺陷单, 最主要的一条判 断标准是, 别人一看就懂,标题简洁明了,步骤条理清晰。还需考虑缺陷的完备性,比如缺陷等级、所属功能模块、版本、复现步骤、预期结果、实际结果、产生原因、日志截图等。 - bug的级别定义
1级致命bug
导致内存泄漏
系统奔溃
2级严重bug
主要功能存在严重缺陷
安全性问题
3级普通bug
兼容性问题
影响单个功能,不会影响整个模块
4级提示bug
页面格式不规范
文字排列字体大小不统一 - 给你一个项目,如何开展测试
a. 查找需求说明、项目设计等相关文档,分析需求。
b. 制定测试计划,确定测试范围和测试策略。
c. 设计测试用例,包括功能、兼容、性能、安全等方面
d. 开展测试执行
e. 回归测试以及发送测试报告 - bug的生命周期
a. New : bug 创建完成之后的初始状态.
b. Open : 确认是否是 bug.
c. Fixed : 开发人员修改 bug 后的状态, 等待测试人员回归测试.
d. Rejected : 开发人员认为不是 bug, 拒绝修改.
e. Delay : 认为暂时不需要修改或者暂时不能被修改, 则延迟修改
f. Closed : 修改后的 bug, 经测试人员的回归测试, 验证通过, 则关闭 bug - 黑盒测试和白盒测试的区别
a. 黑盒测试:相当于是一个看不见的盒子,只进行UI界面的功能,源码不可见
b. 白盒测试:相当于是一个透明的盒子,程序源码和内部逻辑信息都可见
c. 灰盒测试:只能看得见部分源码,UI界面看不见【也就是接口测试】 - 发现bug以后怎么处理
a. 确认和记录:确保这是一个真实的bug,并详细记录重现步骤和影响。
b. 分类和优先级:根据严重性和影响范围为bug设定优先级。
c. 沟通和分配:将bug报告给对应的开发团队,并适当跟踪。
d. 修复和验证:开发团队修复后,我进行验证以确保问题解决。
e. 文档更新:在bug跟踪系统中更新状态,并进行必要的文档更新。 - 测试方法有哪些
a. 黑盒:等价类划分法、边界分析法、因果图法、错误推测法、正交法和场景法
b. 白盒:逻辑覆盖法、循环测试路径选择、基本路径测试 - 什么是等价划分法和边界值
a. 等价类划分方法:等价类划分法将程序所有可能的输入数据(有效的和无效的)划分成若干 个等价类。
b. 边界值方法:边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。 - 测试报告怎么写
a. 标题页:包括报告的名称、项目名称、版本号、编写日期和编写人。
b. 介绍:简要描述测试的背景、目的、范围和对象。
c. 测试概要:概述测试环境、周期、团队构成和测试类型。
d. 测试结果:详细展示测试用例的执行情况,包括通过和失败的用例数量,以及缺陷的概要统计。
e. 缺陷详情:列出重要缺陷的具体信息,如编号、描述、影响、重现步骤等。
f. 测试覆盖率:说明测试的覆盖情况,包括功能模块和代码覆盖。
g. 风险评估:基于测试结果对软件发布的潜在风险进行评估。
h. 总结和建议:给出对软件质量的总体评价,提出是否可以发布软件的建议,以及改进建议。
i. 附件:提及包含测试用例、数据、缺陷报告等的附件。
j. 版本历史:记录报告的修订历史。 - 测试发现bug 开发不认为是bug的时候你怎么办?
a. 测试人员在根据需求文档或者是规格说明书/原型图来进行匹配
b. 测试人员根据不同的测试环境来进行多测尝试来确认bug 并将bug的复现步骤进行记录
c. 如果开发仍旧认为不是bug 需要的测试主管来进行讨论 确认是否bug
d. 需要找产品经理和项目经理进行讨论是否bug
e. 如果认为是bug测试人员将bug进行记录并提交测试总结中 - 质量模型包括?(给你一个功能从哪几个方面测试)
功能、性能、兼容、易用、安全
二、网络基础
- 网络七层模型都是哪七层
a. 物理层
b. 数据链路层
c. 网络层
d. 传输层
e. 会话层
f. 表示层
g. 应用层 - HTTP协议是在哪一层,Tcp协议在哪一层?
HTTP协议处于应用层,TCP协议处于传输层 - http协议有哪几种请求方式?
a. GET:通常用于向服务器获取资源。
b. POST:该方法通常用于提交表单等数据到服务器,相对于 GET 等请求方法,POST 方法能够传输更多的数据量,并且不受 URL 长度限制。
c. PUT:该方法通常用于向服务器上传文件或者将一段文本发送到服务器存储。
d. DELETE:该方法通常用于从服务器上删除特定的资源。
e. HEAD:该方法与 GET 方法类似,但不同之处在于,服务器不会返回响应内容,而只会返回请求头信息。通常用于客户端需要验证某个资源是否存在或者进行缓存控制时。
f. OPTIONS:该方法通常用于获取指定 URL 资源支持的所有 HTTP 请求方法,并可以查询服务器的各种配置信息。
g. CONNECT:该方法主要用于在客户端和某个远程主机之间建立一条网络连接,并可以通过该连接进行安全的数据传输。
h. TRACE:该方法用于对当前请求和服务器进行轨迹追踪,通常用于调试和开发过程中。 - http和https有什么区别?
(1)https有ca证书,http一般没有;
(2)http是超文本传输协议,信息是明文传输。https则是具有安全性的ssl加密传输协议;(3)http默认80端口,https默认443端口 - TCP三次握手和四次挥手
TCP三次握手:目的是为了保持一次网络通信交互正常。等于是你在不认识我的情况下打我的电话让我来面试。
四次挥手:目的是为了确定数据全部传输完了。等于是我在上家公司辞职了。 - TCP和UDP的区别
a. UDP是无连接的;TCP是面向连接的
b. UDP是不可靠传输;TCP是可靠传输
c. UDP是面向报文传输;TCP是面向字节流传输
d. UDP支持一对一、一对多、多对一和多对多交互通信;TCP只能是一对一通信
e. UDP首部开销小,仅8字节,TCP首部最小20字节,最大60字节
f. UDP适用于实时应用(IP电话、视频会议、直播等);TCP适用于要求可靠传输的应用(文件传输等) - 可以采用四次握手吗?为什么?
这个肯定可以。三次握手都可以保证连接成功了,何况是四次,但是会降低传输的效率。
三、数据库 - 常用的聚合函数都有哪些?
count(col): 表示求指定列的总行数
max(col): 表示求指定列的最大值
min(col): 表示求指定列的最小值
sum(col): 表示求指定列的和
avg(col): 表示求指定列的平均值 - 主键、外键和索引的区别
主键是数据表中的唯一标识,确保数据的唯一性和完整性。比如学生表中的学号
外键用来关联和确定另一张表记录的字段,保持数据的一致性。
索引类似于字典的目录,可以提高查询效率 - drop、delete、truncate三者的区别
在数据库操作中,drop、delete 和 truncate 是三个不同的命令,用于移除数据或表结构。Drop 用于完全删除一个表或视图,包括其结构和所有数据,并且这个操作是不可逆的,同时不会记录在事务日志中。Delete 仅移除表中的数据,而不触及表的结构,它是可逆的,因为它可以在事务中被回滚,并且会将删除操作记录在日志中以便恢复。Truncate 类似于 delete,它移除表中的所有行,但与 delete 不同的是,truncate 不可逆且不会记录任何日志,但它通常比 delete 更快,因为它不记录个别行的删除。简而言之,drop 删除整个表,delete 逐行删除数据并记录日志,而 truncate 快速清空表中所有数据但不记录日志。 - 列举几种表连接的方式,有什么区别?
在数据库中,表连接的方式主要有以下几种:
内连接(INNER JOIN):只返回两个表中匹配的行。
外连接分为:
左外连接(LEFT JOIN):返回左表的所有行,即使右表没有匹配的行。
右外连接(RIGHT JOIN):返回右表的所有行,即使左表没有匹配的行。
全外连接(FULL JOIN):返回两个表中的所有行,无论是否有匹配的行。
自连接(SELF JOIN):一个表与自身进行连接。
交叉连接(CROSS JOIN):返回两个表的笛卡尔积,即每个表中的每一行都与另一表中的每一行组合 - 左连接和右连接
左连接(LEFT JOIN)和右连接(RIGHT JOIN)是SQL中用于关联两个表的查询操作,它们都属于外连接。左连接返回左表中的所有行,即便这些行在右表中没有匹配项;如果左表的行在右表中无对应行,则结果集中从右表对应的列将填充为NULL。而右连接正好相反,它返回右表中的所有行,即使这些行在左表中没有匹配项;如果右表的行在左表中找不到对应行,则结果集中来自左表的列将为NULL。这两种连接类型常用于确保当一个表的数据可能不完全与另一个表匹配时,依然能够获取到主表的全部数据记录。
四、Linux
- 说一下你常用的命令
答:常用的命令,比如cd进入目录、pwd显示当前文件路径、ls查看文件列表、ll查看文件列表详情、mkdir创建目录、rm删除、mv移动、cp复制、find搜索、which查找文件、cat查看文件内容、grep匹配文件中具体内容,tar压缩解压、zip压缩、unzip解压、shutdown关机、ifconfig查看接口配置、ps -ef查看所有进程、top显示进程状态、kill进程、service、systemctl服务查看、启动、终止。 - 在Linux中如何杀死一个进程?
kill 进程号 - 如何查找文件
find / -name 文件名 - 如何给一个文件添加可执行权限
chmod u+x 文件名 - 如何判断一个端口是否被占用
netstat -aon | findstr 端口号 - 操作系统相关的一些命令
cd:用于改变当前工作目录。例如,cd /path/to/directory 可以跳转到指定路径的目录。
ls:列出当前目录下的文件和子目录。
pwd:显示当前工作目录的完整路径。
mkdir:创建新目录
rmdir:删除空目录
rm:删除文件或目录
cp:复制文件或目录
mv:移动或重命名文件或目录
touch:创建新的空文件
常用的命令,比如cd进入目录、pwd显示当前文件路径、ls查看文件列表、ll查看文件列表详情、mkdir创建目录、rm删除、mv移动、cp复制、find搜索、which查找文件、cat查看文件内容、grep匹配文件中具体内容,tar压缩解压、zip压缩、unzip解压、shutdown关机、ifconfig查看接口配置、ps -ef查看所有进程、top显示进程状态、kill进程、service、systemctl服务查看、启动、终止。
五、python基础
- 面向对象的特征
封装、继承和多态 - pyhon都有哪些数据类型
整型--int
布尔型--bool
字符串--str
列表--list
元组--tuple
字典--dict
集合 -- set
空 - None - Python中的元组和列表的区别是什么?
相同点:
1)都是序列
2)都可以存储任何数据类型
3)可以通过索引访问
区别:
列表是可变的,而元祖是不可变的 - 如何在python中生成一个随机数
首先导入:import random
再调用方法:random.random() - Python中的break、continue、pass代表什么意思?
a. break: 跳出循环,不再执行
b. continue: 跳出本次循环,执行下一次
c. pass: 不做任何事情,只起到占位的作用 - 什么是切片?
切片是python中的一种方法,能让我们只检索列表、元祖或字符串的一部分。
六、接口测试
-
接口测试用例的编写要点有哪些?
a. 入参,包括参数合法性,参数校验,参数边界,参数为空,缺少参数等
b. 返回值,包括各种情况下的响应内容是否正常
c. 接口业务逻辑和功能是否正常
d. 数据库校验
e. 性能测试(接口tps,响应时间)
f. 安全性,敏感信息加密,权限控制等
2、你是怎么测试接口的?
a. 先了解接口的业务功能、入参出参以及接口对应的数据库存储
b. 依据接口接口测试用例设计方法完成接口测试用例的设计
c. 最后依据测试用例使用接口测试工具完成接口测试,并在测试过程中通过查看响应数据确保接口测试结果的正确性 -
get和post的区别
a. get和post请求都是客户端向服务器提交的一种请求方式
b. get是明文传输参数、倾向于请求服务器资源。比如打开网站
c. post传输数据不可见,安全性高,倾向于向服务器提交数据,比如注册等 -
http和https的区别
a. HTTP信息是明文传输的,而HTTPS是具有安全性的加密传输
b. HTTP的标准端口是80,而HTTPS的标准端口你是443
c. HTTP无需证书,而HTTPS需要认证证书 -
cookie和session的区别
a. cookie数据存放在客户端的,session数据放在服务端的
b. cookie不是很安全,别人可以分析存放在本地的cookie进行cookie欺骗
c. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的内存单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie, 而session则存储于服务端,浏览器对其没有限制 -
token是做什么用的
token就是令牌,是一个字符串,主要是用于做客户端身份认证,通常登录成功后,服务端会返回
token,客户端需要把token值保存下来,后续请求其他接口时,需要在请求中携带这个token值,只有服务端对token校验通过后,才允许访问。 -
fiddler的工作原理
代理服务器,当fiddler启动后,默认地址为127.0.0.1:8888,当浏览器/手机端请求时(前提浏览器/手机中的代理设置的地址为127.0.0.1:8888), 在应用层会先向代理服务器发送tcp链接握手的请求,代理服务器再向服务器发送信息。服务器返回给客户端之前会经过代理服务器。
代理服务器作用:可断点、修改请求和返回报文、可指定抓取特定域名的请求和返回。 -
为什么要做接口测试
a. 接口测试属于集成测试、测试介入越早、就越能在项目早期发现问题,其修复问题的成本越低
b. 接口测试非常快速、UI自动化执行一个测试用例10S左右、接口测试用例执行的话,需要的时间是毫秒级的 -
说一下你知道的HTTP状态码,以及它们代表什么意思?
状态码 解释
200 访问正常
307 重定向
401 未授权,需要身份认证
403 服务端禁止访问
404 请求资源找不到,例如url写错了
405 请求方法不允许
5xx 服务端内部问题 -
一个接口请求不通(或页面无法访问) 该如何排查
a. 检查网络连接:确认接口的IP地址是否正确,可以通过ping命令检查网络是否通畅。同时,确保本地网络代理设置正确,错误的代理设置可能会导致请求失败。
b. 检查端口状态:确认接口的端口号是否正确,并使用telnet命令检查端口是否能连通。如果telnet不可用,需要参考操作系统的相关指南开启Telnet服务。
c. 检查服务器状态:确认后端项目是否已启动或部署成功。可以登录到服务器上,使用ps命令检查项目的进程是否存在,并用tail命令查看部署日志。
d. 检查防火墙设置:查看服务器防火墙是否关闭,或者是否已经正确配置了允许访问的IP和端口号。如有需要,可以联系运维人员进行策略配置。
e. 检查客户端问题:如果是从浏览器发起的请求,清除浏览器缓存和更新浏览器版本可能有助于解决问题。同时,检查操作系统的host文件,确保没有绑定错误的IP映射。
f. 查看服务端日志:检查服务端的日志文件,日志中可能会记录错误信息或异常情况,这有助于定位问题所在。 -
接口测试流程
阅读接口文档
设计接口测试用例准备测试环境
测试工具及测试数据执行测试提交缺陷报告
回归测试编写测试报告 -
常见的HTTP请求头
host:目标域名或IP
Content-Length:请求数据长度
Accept:客户端希望接受的数据类型,/代表所有类型
User-Agent:客户端使用什么工具去访问(浏览器)
Content-type:请求body中的数据类型,常用的有:表单页面,json字符串等
Cookie:请求中携带的cookie信息
七、软件测试自定义问题
- 请介绍一下你的项目
这是一款基于b/s架构的web租房平台,主要为用户提供便捷的租房环境,该系统的主要功能有房源搜索、发布房源等功能,我主要负责的模块有房源搜索、发布房源等UI测试、功能测试和接口测试的工作。
2.你是怎么搭建测试环境的?
比如我这个项目,首先确定系统的环境是linux,使用远程管理软件将打包好的项目上传到服务器中
然后安装web服务器tomcat,安装jdk以及配置环境变量。
再安装数据库mysql以及配置下数据库 - 发现一个bug,怎么定位是前端还是后端的问题
a. 通过抓包工具抓包,然后查看请求报文,如果请求报文对比接口文档有问题,那么就是前端的问题,如果请求报文没有问题,那就看返回报文,返回的数据不对,那就是后端开发的问题。
b. 日志分析可以通过查看客户端/服务端的日志,分析有没有异常的日志信息,从而确定具体原因 - 如果给你一台电梯,请问你如何测试它
a. 功能:上升、下降、停止、开门、关门、梯内电话、灯光、指示灯等;
b. 性能:速度、反应时间、关门时间等;
c. 压力:超载、尖锐物碰撞电梯壁等;
d. 安全:停电、报警装置、轿箱停靠位置、有人扒门时的情况等;
e. 可用性:按键高度、操作是否方便、舒适程度等;
f. UI:美观程度、光滑程度、形状、质感等;
g. 稳定性:长时间运行情况等;
h. 兼容性:不同电压是否可工作、不同类型电话是否可安装等。
微信发朋友圈:
功能:
1.是否可以正常发布
2.是否可以编辑文字
3.是否可以单独发布文字
4.是否可以单独发布图片
5.文字跟图片是否可以一起
6.发布范围是否可以选择仅自己可见/全部可见/对谁可见/对谁不可见
7.是否可以正常评论
8.是否可以删除评论
9.能否收到点赞信息
10.能否分享歌曲/视频等
性能:1.编辑完成后是否能快速发布 2.多人同时发布是否出现卡顿
界面:1.界面是否按照ui原型设计 2.是否会引人不适
易用:1.发布按钮是否快速看到 2.点击各种title是否流畅
安全:1.数据库是否加密 2.不是好友是否能查看
兼容:多种不同品牌手机及电脑等
中断:在发布朋友圈时短信/电话/视频/微信联系机主是否还能正常发布
弱网:模拟弱网情况 查看是否能发布成功
评论:
功能:
1.能否给别人评论
2.能否看到其他人的评论
3.是否能删除评论
4.涉及铭感词汇会不会屏蔽
5.别人是否可以删除你的评论
6.回复的评论除了共同好友别人是否还能看到
7.在评论下能否@别人
性能:能否快速发布 并且 快速删除
界面:界面是否按照ui原型设计 字体大小 颜色 字体 是否美观
易用:点击评论按钮
安全:不是好友是否能看到我的评论
兼容:是否适用于所有手机/电脑
中断:打电话/打视频/发微信/发短信是否会打断评论
弱网:模拟弱网环境 看评论是否能发出 延迟多久
点赞:
功能:
1.是否能快速点赞/取消赞
2.自己能否给自己点赞
3.能否给别人点赞
4.共同好友是否能看到我的点赞
5.非好友是否能看到我的点赞消息
6.点赞完对方是否会接收到消息
7.取消赞对方是否能收到消息
8.多次点赞对方会不会收到多次提示
性能:快速点赞 取消赞 会不会出现卡顿
界面:是否按照ui设计完完成 点赞是否有特效提示
易用:是否方便使用者点击
安全:非共同好友是否能看到
兼容:是否适用于所有手机/电脑
中断:在点赞过程中接收到电话 点赞是否成功
弱网:模拟弱网 查看是否可以点赞成功
搜索:
功能:
1.是否能找到先想要的数据
2.是否能找到想找到的朋友
3.是否可以收缩到网络信息
4.能否查找到公众号
5.能否查找到群聊
性能:输入完成点击搜索能否快速查到需要的数据
界面:是否符合ui设计 按钮是否与ui设计一致
易用:按钮是否方便点击 输入框是否方便点击
安全:搜索的内容别人是否可以看到 是否对搜索内容进行加密
兼容:不同手机/电脑 不同版本不同型号测试
中断:若在搜索过程中接电话是否还能搜索成功
弱网:模拟弱网环境 查看是否还能搜到需要的内容
购物车:
功能:
1.购物车是否有限制
2.可以放入多少商品
3.能否可以多选
4.能否可以选择一起结
5.对支付金额是否有限制
6.同样的商品接入购物车你是否会重复
7.能否设置商品数量
8.全选后金额是否有问题
9.是否自动使用抵扣券
10.跨店满减是否计算正确
性能:选择全部是否会出现卡顿
界面:购物车界面是否按照ui设计 配色 字体 是否美观
易用:点击后跳转详情页是否没有出现卡顿
安全:购买信息是否会加密 购买人姓名/电话/个人信息/支付方式是否加密
兼容:手机端与电脑端不同手机测试 不同版本不同型号是否一
中断:支付一半后软件闪退在次进入是否在支付页面
弱网:模拟弱网模式是否会有延迟 延迟时间