经典测试工程师面试题(二)
背景
为了扩展家里领导的测试知识水平和专业知识能力提升,以及为以后更好的面试做基础,特意从众多测试相关题型整理出来,其中的答案仅供参考。
什么是bug?
没有实现需求说明书列出的功能,出现了没有需求说明书提到不该出现的事情;实现了多的功能;没有实现应该实现的逻辑。
开发人员修复缺陷后,如何保证不影响其他功能?
重新执行测试用例,并且针对这个缺陷影响的相关点写新的测试用例。
为什么选择测试这行?
因为其具有挑战性和成就感,找一些系统隐藏的逻辑漏洞的时候,自己就非常的开心。并且测试需要细心和耐心,自己可以很快的分析bug的来源。
简单概述缺陷报告,并说明包括哪些项?
缺陷描述,缺陷的优先级,缺陷的标题,缺陷所属版本号,缺陷所属的功能模块,操作步骤,预期效果,缺陷原因,缺陷所属的开发人员.
进行测试时产生了哪些文档或记录?
测试用例,测试报告,测试日报
开发与测试的关系?
没有开发就没有测试,开发之后才开始测试,
当测试过程发生错误时,有哪几种解决办法?
1.跳转其他的测试流程
2.调用某个程序能绕过这个错误,继续后面的流程
什么是兼容性测试?
兼容性测试是检查软件在不同软件平台,硬件平台上是否可以正常运行的测试。
主要查看软件在不同操作系统、浏览器、数据库中是否运行正常
软件的评审一般由哪些人员参加?其目的是什么?
参加人员:需求业务人员、产品经理、项目经理、开发人员、测试人员
目的:查看软件在未正式投入运行前是否还存在问题。对于不同软硬件平台能否正常运行,是否有与客户理解不一致的地方,同时可以对一些可以改进的地方再多加改进。
开发人员说不是bug时,你如何应付?
首先把自己的理由,并以需求说明书为自己的站点,如果开发人员还是不认同,可以把自己的观点和理由,提交给产品经理,由其去决定是否为一个bug
软件测试项目从什么时候开始为什么?
需求确认开始,因为在需求阶段,测试可以评审需求并进行静态测试,减少开发过程中的bug
您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作?
做过web测试,小程序测试,H5页面测试,后台测试,接口测试。最擅长接口测试,自己给公司的业务流程写过一套自动化框架,用于回归业务流程
开发人员老是犯一些低级错误怎么解决?
要求开发人员进行自测,把这些问题在开发阶段就解决好
通过缺陷管理系统对开发人员进行控制
所有的软件缺陷都能修复吗?所有的软件缺陷都要修复吗?
能修复,但不一定所有的缺陷都要修复
为什么尽量不要让时间富裕的员工去做一些测试?
1,非专业测试人员,没有组织性的测试工作,没有规律和针对性,会影响到测试的质量和版本更新的速度。
2,专业测试人员(但不是这个项目的测试员)这些人员不受测试计划的时候和任务约定,测试完毕后评估测试小组的工作质量,不利于bug管理。
在您以往的工作中,一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?
前提条件、测试环境、操作步骤、预期结果、实际结果、严重等级、版本信息,出现概率
问题描述和操作步骤要尽可能描述详细,可以初步分析bug是客户端的问题还是服务端的问题
您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。
黑盒:
边界值分析法:如参数的范围0-128,输入128,129,0这些值,查看是否有错误等
错误推测法:导入功能时,表格为空表格,表格输入1行,表格输入10000行等
因果图方法:组合参数逻辑图
场景分析法:根据用户操作模拟用户操作
白盒:
逻辑覆盖法,基本路径测试
不能发现BUG的测试用例不是好的测试用例吗?
不一定,要看情况,如果测试用例质量高,没有发现bug,说明开发质量高。但一般程序都会有bug,如果没有发现BUG,就要思索测试场景是否有遗漏,需求是否理解没到位
测试用例需要哪些人来评审?
产品经理,开发人员,测试人员,业务需求人员
静态测试和动态测试有什么区别?
静态测试:不运行程序,针对PRD等检查代码,审查代码,静态结构分析,分析代码质量
动态测试:运行程序进行黑盒测试和白盒测试
什么是内存泄漏、Http错误率、吞吐率。响应时间分别在web端和移动端是多少?哪些场景可以证明响应超时?
内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果
HTTP错误率(HTTP error rate) 在选定时间段内,HTTP错误数量与请求数量的比率。
吞吐率(Throughput) 是场景运行过程中服务器每秒的吞吐量。其度量单位是字节,表示每个请求连接在任何给定的每一秒从服务器获得的数据量。
web端
当用户在2秒以内得到响应时,会感觉系统的响应很快;
当用户在2-5秒之间得到响应时,会感觉系统的响应速度还可以;
而当用户在超过8秒后仍然无法得到响应时,会感觉系统糟透了,或者认为系统已经失去响应,
场景:请求超时、页面加载失败
什么是接口测试
接口测试是测试系统组件间接口的一种测试。接口测试就是测试不同系统或模块之间资源交互是否正确
为什么要做接口测试
因为在大部分系统和产品中,资源数据都是核心,所以接口是需要要测试的,并且接口中大部分内容都是数据,通过数据的对比可以推测系统和产品的逻辑,测试接口就是测试逻辑。所以很必要做接口测试
什么时候做接口测试
1.出现bug,通过接口测试,清晰找到bug的源头,是前端还是后端的bug
2.回归测试,利用接口测试原有的接口是否正常,保证之前的业务流程没有受影响
3.接口开发完成后,可以做接口测试
接口测试的工具有哪些
soapUI、postman、jemeter、insomnia、paw
接口测试的流程是什么?
1.接口的通过性验证:数据正确输入,是否正确返回结果。测试接口的正常场景和异常场景
2.边界测试:不按照你接口文档上的要求输入参数,测试其边界情况。比如说必填的参数不填,输入整数类型的正常,超过参数取值范围等
3.参数组合:如果接口中有参数需要组合用的,两个参数是组合使用,测试其各种情况
4.异常验证:测试幂等情况,并发情况,事务测试等异常情况
5.接口安全:绕过验证,敏感信息加密等情况
6.性能测试:响应时间、并发数、吞吐量、服务器资源利用率
什么是单元测试、功能测试、集成测试?
加分项:单元测试、功能测试、集成测试分别在web端、接口端、移动端的定义,你平时是怎么理解它们的?
单元测试:是针对程序模块来进行正确性检验的测试工作
功能测试:在单元测试的基础上,测试某一个功能点
集成测试:将所有模块按照设计要求组装成为子系统或系统,进行集成测试
web端
单元测试/功能测试:页面元素是否正确显示其有效功能,如提交的action是否正确,搜索点击是否执行
集成测试:调用了后端接口的数据是否显示正常,能否满足需求
接口端:模块/系统之前的调用,接口是否与设计相符,模块组合后是否满足需求
单元测试:某个函数/方法 写的代码是否达到编写者的预期
功能测试:为实现一个功能点,调用几个方法/函数
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
分别用C、Java、Python写出相关代码及测试用例
Python
def TargetSum(nums,target):
if len(nums) < 2:
return 0
for i in range(0,len(nums)-1):
for j in range (i+1,len(nums)):
if nums[i] + nums[j] == target:
return [i,j]
测试用例
def test_TargetSum1(self):
assert TargetSum([1,1,3,6,0,2],2) == [0,1]
def test_TargetSum2(self):
assert TargetSum([1],1) == 0
def test_TargetSum3(self):
assert TargetSum([6,2,4,3,1,2],4) == [1,5]
def test_TargetSum4(self):
assert TargetSum([2, 7, 11, 15],9) == [0,1]
Java
public int[] TargetSum(int nums[],int target){
Map<Integer, Integer> map = new HashMap<>();
for(int i=0;i<nums.length;i++){
int temp = target - nums[i];
if(map.containsKey(temp)){
return new int[] { map.get(temp), i };
}
map.put(nums[i],i);
}
return null;
}