一、常见面试题及解答
1、软件测试定义⭐
软件测试就是验证软件产品特性是否满足用户的需求。
2、为什么需要软件测试
企业为何需要招聘⼤量的测试⼈员呢?
企业最终的目的是 "盈利 ",互联网企业借助软件 / 系统来跟用户交互从而获得盈利,也就是说企业的受众群体主要是广大的使用用户,而用户的使用感受将直接影响企业的盈利,若产品质量太差将导致大量用户的流失,所以企业非常重视测试。

3、软件测试和软件测试开发的区别⭐
(1)软件测试开发工程师
工作重心为可测试性以及通用测试基础框架。编写单元测试框架和自动化测试框架。软件测试开发工程师关注质量提升和测试覆盖率。
简称测开,工作重点是业务测试,对于测试人员来说,是没有权限开发业务代码的。
(2)测试工程师
与软件测试开发工程师关系密切,但把用户放在第一位来思考。测试工程师组织整体测试实践,并进行分析总结,驱动测试执行,构建端到端的自动化测试。
工作重点是业务测试,更多的测试工作是点点点的测试。
(3)共同点 & 不同点
-
共同点 :测试和测试开发都统称为测试人员,主要职责就是对产品质量负责,保障项目质量安全。
-
不同点 :测试开发比测试多 "开发" 二字,而这个开发并不是指业务开发,因为业务开发是开发人员的主要职责,这里的开发指的是需要开发测试效率工具 ,通过效率工具来提升测试效率和测试质量,比如我们的自动化、性能测试等就属于效率工具。
4、软件测试和开发的区别
(1)工作内容
开发⼈员:
- 通过⼀些编程语⾔,如 C,C++,C#,Java,Python,PHP 实现软件的特性。
- 修改 BUG。
测试⼈员:
- 编写测试用例,执行测试用例,发现软件的缺陷,验收缺陷 ...
- 利⽤测试工具保障软件的质量。
(2)难易程度上
开发:
- 应届生要求掌握语言基础、开发框架、数据库、数据结构、Linux 等课程。
- 在职人员还需掌握更多中间件如:Redis、rabbitMQ、ES 等要求掌握以上技术并能运用在代码开发中。
测试:
- 应届生要求掌握语言基础、开发框架、数据库、数据结构、Linux 等课程。
- 掌握测试技能:测试概念、设计测试⽤例、执行测试等。
- 在职人员还需掌握更多中间件如:Redis、rabbitMQ、ES 等。
总结:开发广度小,专业度高。测试广度大,专业度相对较低,⼤型互联网企业对测试人员的专业要求可能跟开发差不多。
5、选择走测试为什么还要学这么多的开发知识?
从以下观点进行展开:
- 从个人爱好出发:个人对开发技术比较感兴趣,所以在校期间看了较多开发方面的专业知识(目的是凸显自己爱学习)。学好开发知识能够提高软件测试质量。通过查看代码中数据的走向能够更好的从代码层面去发现问题。
- 从工作性质出发:测试不仅包含黑盒测试,还有白盒测试。测试人员也需要具备扎实的开发能力(能够看懂代码、了解开发框架)来提高个人项目测试质量,另外测试人员也需要开发测试效率工具来辅助提高测试效率和质量(凸显自己对软件测试工作的了解),也需要编写代码,如自动化测试、性能测试、开发测试效率工具等。
结合上面两点来表达。
6、优秀的软件测试人员具备的素质
(1)综合能力
A. 沟通能力
测试工程师的沟通能力会直接影响工作开展的效率。良好的沟通能力是测试⼯程师获得更好发展的 "敲门砖"(面试、工作都需要沟通)面试的时候,有人就存在明明知道是什么,却怎么都表达不出来或者表达不清楚,导致面试评价比较差。
B. 快速学习能力
对不同的业务需求和功能的快速学习和理解能力。
未来我们都会经历跳槽,不同的公司,业务不⼀样,所以测试人员需要具备快速学习业务的能力。
a. 对于测试新技术和新方法的学习能力
计算机行业发展迅速,每⼀个技术人员需要时刻保持⼀个学习新技术的能⼒,不断提升自己,从而适应业界的需求。
b. 对不同语言的快速学习能力
大多人在工作之前基本掌握⼀到两门语言,然后实际在工作中,可能需要接触其他的语言,比如 PHP、GO、Python 等。
C. 开发能力
测试⼈员除了保障项⽬质量之外,也需要针对当前业务开发效率工具,来提升测试效率和质量。如自动化、性能测试等就是效率工具。
D. 文字能力
测试人员需要编写各项文档,如测试计划、测试⽤例、测试报告等等。
(2)掌握自动化测试技术
自动化测试技术在测试领域中占有举足轻重的地位,是中大厂必不可少的技术事务。每次更新历史迭代功能都需要手动测试一遍,耗时耗力,而历史功能测试内容基本都是一样的,那么掌握自动化测试技术就可以将测试人员从大量重复性的手工劳动中解放出来,这样可以把更多的精力花在更多类型的测试上。
A. 认识自动化
什么是自动化呢?
在日常生活中,自动洗手液的出现,避免了人们按压瓶子动作,在疫情阶段使用自动洗手液有效减少了交叉感染的风险。
在农业上,自动洒水器的出现,大面积的土地也能够实现快速、均匀的洒水。
在交通上,交通灯的出现。使得交通有序进行,极大减少了堵车或其他事故的概率。
在测试中,我们常常会见到接口自动化、UI 自动化(Web 自动化、移动端自动化),接口自动化能够自动的去请求接口并校验接口返回属性是否符合预期结果;UI 自动化能够自动在界面或者移动端上模拟人的行为进行操作,并检查元素和操作等是否符合预期结果。
(3)测试用例的设计能力
测试用例设计能力是指:无论对于什么类型的测试,都能够设计出高效地发现缺陷,保证产品质量的优秀测试用例。
如何提高测试用例设计的能力?
- 掌握设计测试用例的方法。
- 阅读好的测试用例设计案例。
- 多写多练,积累,总结。
(4)探索性思维
测试工程师在执行测试的过程中不断学习被测系统,结合自己的经验,知识,直觉, 进行系统的错误猜测和逻辑推理,整理和分析出更多有针对性的的测试关注点。 探索性思维的质量取决于测试人员的经验。
生活中有很多要做的事情都需要人们具备探索性思维。比如炒菜,油温的大小控制,火候大小的控制,调味品量的控制都非常考验厨师的探索性思维。
(5)兴趣
兴趣是就业择岗的重要因素之⼀,选择了但是仍然对个人的⼯作性质不感兴趣,可想而知,这样的选择也不会⾛的太远。
(6)责任感和压力
责任感是任何⼯作的都需要的,对于测试工作者而言:
测试往往是产品质量的最后的把关者;由于测试⼯作成效很难衡量,测试用例执行、bug 数目的多少都无法说明产品的质量是否合格;虽然在敏捷模型中团队中每个⼈都需要对产品质量负责,但是产品的测试质量是跟测试⼈员那密切相关的。所以,责任感是最重要的测试必备素质之⼀。
压力,测试工作者,特别是属于互联网行业需要能够抗住各种压力。
7、为什么走测试岗位而不走开发岗位
注意要点:软件开发和软件测试开发是两个不同的工作。
回答思路:从岗位工作性质分析 + 个人性格 / 爱好 + 个人职业规划三个方面阐述。
(1)个人性格 / 兴趣爱好 :从性格和兴趣出发,测试工作需要测试人员具备良好的耐心、细心,接触了测试内容后对测试工作产生浓厚兴趣。结合测试人员需要具备的素质来阐述个人在测试工作方面有哪些优势,如沟通能力、文字组织能力、细心、热衷发现代码中的问题等。
(2)工作 / 岗位性质 :不管是测试还是测试开发都统称为测试人员,所以测试人员主要以保障项⽬测试质量为主,通过开发一些测试效率工具(比如我们学的自动化就是效能工具,除此之外还有内存泄漏工具等等)来提高测试效率。而软件开发主要以业务编码为主。
(3)个人职业规划
大学期间就树立了走测试方向的目标,今后将继续提高测试和开发能力,争取在测试领域做出⼀番有影响力的事务。建议规划为(1~3 年内,太长就有点假、大、空),参考:入职之后一年内积极积累个人的测试经验,夯实测试能力和开发能力,做好个人的项目测试管理,打好测试基础。后续继续提高个人的测试影响力,不管是项目测试还是技术能力上都能够独挡一面,个人负责的业务这块的所有项目都可以自己完成高质量测试并交付。
8、设计测试用例的万能思路⭐
假如面试官给你任意东西让你来设计测试用例,使用万能公式就能够说出来非常多的测试用例:


9、黑盒测试用的多还是白盒测试用的多?

回答上面这句话后,再给面试官说说自己掌握了哪些黑盒设计测试用例的方法(等价类,边界值,正交法,场景法,错误猜测法等等),以及这些方法的适用场景。
10、自动化测试能够取代人工测试吗?
自动化测试(自动化脚本,由测试人员来编写的)不⼀定比人工测试更能保障系统的可靠性,自动化测试是测试人员手工编写,后续如果有功能的变更自动化也需要进行不定期的维护和更新。
11、自动化测试可以大幅度降低工作量,对吗?
错误,"⼀定程度上" 和 "⼤幅度" 的表达方式需要注意。
测试工作中不仅仅包含执行测试阶段,测试主要由人工测试,通过自动化测试来辅助测试。
12、开发不认可提测试的 Bug 该怎么办?⭐
-
具备批判性思维,自己在提 Bug 时是否是误操作导致的,是否存在创建 Bug 时描述不规范等问题。
-
如果是对 Bug 的等级不认可,Bug 等级要有理有据,讲出 Bug 这样定级的原因。
-
站在用户的角度看待问题,反问:"如果你是用户,你能接受这样的问题吗?"。
-
不光要能提出 Bug,最好也能提出解决方案。
-
如果以上的沟通都无法解决问题,组织 Bug 评审,邀请开发、测试、产品等代表参会,针对该问题进行分析如何进行解决,什么时候解决,由谁解决。
13、项目研发流程中出现需求变更,测试人员应该怎么做?
及时了解需求变更情况,上报领导,针对需求变更确定新的测试范围,对测试用例进行灵活的修改,如果之前的项目测试时间不够。
14、给项目测试留的时间只有 3 天,而测试评估需要 5 天,这种情况该怎么办?
- 秉持测试质量为上原则。询问是否可以适当压缩上游(设计 & 开发)时间,从而增加保留的测试时间。
- 告知测试风险。是否可以接受只测试主要功能,次要功能可能会遗留风险或者次要的功能,直接让产品 / 运营验收的时候测试。
- 若上述步骤都无法得到同意,继续向上反馈。将问题和历史沟通反馈给上级 / 测试经理并请求帮助。
15、如何提高测试人员和开发人员的沟通效率?
- 沟通之前准备好需要讨论的问题,避免多次无效的沟通。
- 沟通时注意合理且有礼貌的表达,若讨论出现对立意见,不要上升情绪,保持讨论对事不对人的原则。
- 秉持批判性思维,反思自己,对他人的建议不排斥并辩证性吸取经验。
- 对于讨论会议要做好记录,避免会后遗忘造成无效的沟通。
- 尽量采取面对面的高效沟通,减少低效的沟通工具来传递信息。
16、如何判断是前端问题还是后端问题
利用抓包工具或者浏览器开发者工具查看接口返回值:
-
若接口返回值正确但是前面展示不正确,则前端问题。
-
接口返回值不正确,后端问题。
仅供参考:
我写的 Web 项目(仅设计到前端代码和后端代码),在测试的时候发现有个字段展示的数据不正确,我首先通过在页面上使用 F12 开发者工具查看接口的请求参数和返回值是否正确。当时发现接口返回值是正确的,所以我判定是前端代码写的有问题。如果是接口返回值就是错误的,那可能是代码逻辑出现了问题,需要对后端代码进行调试。
17、测试中遇到的问题如何进行解决?
这个问题问的比较模糊,没有针对具体问题的提问。这种情况下可以自由发挥 ,给面试官展开讲讲在学习中 / 写代码中遇到的具体的 Bug 的例子,重点在于讲述 Bug 定位思路和如何解决的问题。该问题可以是真实遇到的也可以是自己想象出来的,建议面试之前一定要准备一个这样的问题。
- 内存泄漏的案例:程序在短时间内运行没有问题,长时间运行会存在程序崩溃的问题
- 忽略边界值的问题
- 页面数据展示异常
仅供参考:
我写的 Web 项目(仅设计到前端代码和后端代码),在测试的时候发现有个字段展示的数据不正确,我首先通过在页面上使用 F12 开发者工具查看接口的请求参数和返回值是否正确。当时发现接口返回值是正确的,所以我判定是前端代码写的有问题。如果是接口返回值就是错误的,那可能是代码逻辑出现了问题,需要对后端代码进行调试。
18、自动化元素查找失败的原因有哪些?
- 元素定位方式写错了,如 cssSelector 写成了 xpath。
- 元素写错了,xpath 或者 cssSelector 写错了。
- 页面加载速度慢,代码中未添加等待。
- 打开了新的标签页,未执行切换窗口操作。
- 页面出现了异常,如警告 / 确认 / 提示弹窗未处理导致无法定位页面元素。
- 要定位的元素为动态元素,每次打开对应的元素名不一样。
19、对自己的项目做过哪些测试工作?
从以下测试内容进行展开:
项目中需要体现对项目的测试,至少要有对项目编写的测试用例。描述对哪些页面哪些功能编写了测试用例,主要从哪些方面来设计的测试用例(功能测试、性能测试、界面测试、兼容性测试、易用性测试、安全性测试、弱网测试......)。
如有自动化测试内容,讲解用到了什么自动化工具,对哪些页面/功能进行了自动化测试,自动化测试操作的具体流程是什么,自动化测试结果是什么(最好有通过自动化测试发现的代码问题,没有的话问题也不大).
如有性能测试内容,讲解用到了什么工具,对哪些接口进行了性能测试,性能测试操作的具体流程是什么,性能测试结果是什么(最好有通过性能测试发现的程序问题,没有的话问题也不大)。
20、让你去做纯功能测试你愿意吗?
这道题考的是我们的工作态度,和对测试工作的职业规划,那回答的时候,首先要肯定的回答:可以接受,然后,我们可以按照以下的思路来进行阐述。
- 功能测试是测试人员的基础技能,功能测试都没有做好,那么就不要说自动化测试,或者测试开发了。
- 业务质量是需要从多个维度来保障的,自动化测试其实也是功能测试的范畴中,通过自动化来保障业务功能没有问题,这并不冲突。
二、常见测试用例面试题示例
1、淘宝购物车

2、水杯

3、登陆页面

4、微信发朋友圈

5、朋友圈点赞

6、微信提现

7、百度搜索框

8、会员连续包月

9、算法测试用例

(1)从参数上进行设计
有效等价类:int 类型、数组。
无效等价类:
- 类型:String、float、double...
- 数组:字符串、数字、集合、列表...
- 长度:过长(大)、过短(小)、NULL、不传参数
(2)从代码逻辑上进行设计
第一层循环(a)、第二层循环(b)、if语句(c)
组合:ab、abc、ab否c
(3)从代码性能进行设计
数组过大时时间复杂度和空间复杂度是否符合预期。
(4)考虑异常情况
循环计算过程中,时间过长的话程序是否会出现故障,要不要加上异常处理 trycatch。
