软件测试工程师面试题(含答案)

面试题列表

1、自我介绍,涉及工作经历 

答:基本信息+擅长测试方向+个人突出亮点+以往工作经历等等。

2、在公司中测试的流程是什么

答:测试流程:需求评审>测试计划>测试计划>测试方案>编写用例>执行用例>回归测试>提交缺陷报告>提交测试报告

3、举例一个项目,在项目中做了什么

答:可以聊聊做了性能、自动化、工具开发,测试平台开发、功能等自己擅长的地方。

4、如何提升测试效率,如何保障测试质量

答:测试人员应该从整个测试流程来把控软件质量,在整个过程中应当与其他研发人员共同提高产品的功能。

测试流程:需求评审>测试计划>测试计划>测试方案>编写用例>执行用例>回归测试>提交缺陷报告>提交测试报告

从以下几个方面来参考:

1)需求评审阶段,要对需求有准确的定位,尽可能和开发、产品对齐需求时有大致相同的需求理解;

2)测试方案及测试用例评审,对测试用例有更高的覆盖率,全面的测试类型,和有一个明确的测试重要性等级;

3)交叉测试,进行交叉测试,提高软件的易容性,不同的人对于不同的功能有不同的看法,也可以发现不同的问题;

4)回归测试,对于回归测试不仅要回归目标bug,也要进行深度和广度的测试,防止开发在修复bug时,引出其他问题;

5)与产品对齐,在研发阶段定期与产品人员对齐,确保软件的走向及市场需求准确;

6)Beta测试,如有条件做beta测试,则进行必要的beta测试,从真实使用的场景把控软件;

7)引入自动化测试:

对于适用自动化测试的产品,可以引入自动化测试,节约投入成本,提高迭代测试效率。

5、测试过程中印象比较深的bug,为什么印象深刻

答:自己发挥,每个人不一样,友情提示,最后要加上自己的思考和复盘。

6、app测试与web测试的区别点是什么

答:

1)功能方面:

web项目,一般都是b/s架构,基于浏览器的

app则是c/s的,必须要有客户端。

2)性能方面:

web页面可能只会关注响应时间

app则还需要关心流量、电量、CPU、GPU

3)兼容性方面:

web是基于浏览器的,所以更倾向于浏览器和电脑硬件,电脑系统的方向的兼容,不过一般还是以浏览器的为主。浏览器的兼容则是一般是选择不同的浏览器内核进行测试(IE、chrome、Firefox)。

app的测试则必须依赖phone或者是pad,不仅要看分辨率,屏幕尺寸,还要看设备系统。系统总的来说也就分为Android和iOS,不过国内的Android的定制系统太多,也是比较容易出现问题的。

4)相比较web测试,app更是多了一些专项测试:

一些异常场景的考虑以及弱网络测试。这里的异常场景就是中断,来电,短信,关机,重启等。

而弱网测试是app测试中必须执行的一项测试。包含弱网和网络切换测试。需要测试弱网所造成的用户体验,重点要考虑回退和刷新是否会造成二次提交。需要测试丢包,延时的处理机制。避免用户的流失。

5)安装、卸载、更新:

web测试是基于浏览器的所以不必考虑这些。而app是客户端的,则必须测试安装、更新、卸载。除了常规的安装、更新、卸载还要考虑到异常场景。包括安装时的中断、弱网、安装后删除安装文件,更新的强制更新与非强制更新、增量包更新、断点续传、弱网,卸载后删除app相关的文件等等。这里讲起来的话太多了,如果有疑问的同学可以评论或者给我留言。

6)界面操作:

app产品的用户都是使用的触摸屏手机,所以测试的时候还要注意手势,横竖屏切换,多点触控,事件触发区域等测试。

7、出现线上问题了,如何解决的

答:首先先解决线上bug,及时止损,然后再进行复盘和反思,提出以后避免线上问题发生的方式。

8、测试左移和右移分别做了哪些工作

答:左移可以说做产品需求梳理、白盒测试,代码review等等

右移:可以做线上监控、巡检等等

9、接口测试用什么做的,关注点是什么

答:postman、jmeter等工具都可以做,代码也可以。

10、如何保障用例覆盖全面

答:

1)对需求的正确理解

2)对开发结构、涉及模块有清晰的了解

3)对测试过程中要用的方法、数据、接口要有清晰的认知

4)根据需求、结合不同的场景、测试数据,编写测试用例

5)开展测试用例审评,让产品、开发、测试同时参与,确认是否有偏差缺漏,若有则修改完善

6)可以使用覆盖率统计工具,观测测试覆盖率,反向优化测试用例。

11、抓包工具用的什么,关注点什么,抓包工具的原理是什么,

答:fiddler Charles都行,关注的是接口的出参和入参、接口路径、请求方法、定位前后端的bug、mock、弱网测试等等。

工作原理:

首先我们要知道抓包工具的工作原理,就是设置代理。正常的客户端请求服务器就是直接有客户端发送请求到服务器服务器直接返回响应给客户端。那么抓包工具作为代理后,发出的请求数据就会先到抓包工具那由代理工具得到后在到服务器,随后服务器在返回给代理,在传给客户端。就像相亲的时候刚开始男女双方是谁都不认识没见过对方的。那么全部由媒婆出面来交流沟通告知对方。并且双方将信息传给媒婆后呢,双方也不知道媒婆会不会完整的传达自己的意思。媒婆可能会在其中添加一部分色自己的信息。在交给对方,这就相当于,客户端或者服务器将数据给到抓包工具后,抓包工具可以进行篡改,篡改后的信息在返回给对方。并且以界面的形式展示出来。

12、测试用例常用的的设计方法有哪些

答:边界值,等价类,状态转移,因果图,错误推测法等等,常用的还是边界值,等价类。

13、linux常用命令有哪些,比如看日志,看进程等

答:cat 、tail 、ps查询进程、vim编辑等等

14、数据库常用命令,一般会举例让你写sql

答:这个得自己积累练习

15、数据库索引的原理,索引的种类,为什么有时候索引会失效

16、cookie和session的区别是什么

17、有没有做过性能测试,性能测试关注的指标有哪些,实际项目中有没有做过性能,怎么做的

18、接口自动化用什么做的,如何进行断言的,是场景式的自动化还是单接口的自动化

答:python+pytest,java+testng等等,一般框架都有各自的断言框架,对接口响应码、响应内容等等进行断言,场景自动化了,单接口自动化没啥技术含量。

19、自动化中场景的话如何保障参数的传递,有没有做过什么优化

答:1、全局变量;2、每个场景依赖接口重新请求,可以说说封装公共模块,优化效率等等

20、testng中如何保障用例的执行顺序,常用的注解,用例执行完毕的时间大概多长,如何缩短执行时间

21、testng开启多线程如何保障用例执行不会出问题,用例是写在代码里还是存放在文件中

答:会的,我试过,会出现很多问题,用例看你的自动化项目的具体情况,数据驱动模式一般都是放在excel或配置文件里。

22、常见的接口响应状态码有哪些,分别是什么含义

答:

1)表示临时响应并需要请求者继续执行操作:

100 (继续) 请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。

101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。

2)表示成功处理了请求的状态代码:

200 (请求成功),服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。

201 (已创建) 请求成功并且服务器创建了新的资源。

202 (已接受) 服务器已接受请求,但尚未处理。

203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。

204 (无内容) 服务器成功处理了请求,但没有返回任何内容。

205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。

206 (部分内容) 服务器成功处理了部分 GET 请求。

3)表示要完成请求,需要进一步操作。通常,这些状态代码用来重定向:

300 (多种选择) 针对请求,服务器可执行多种操作。

301 (永久移动) 请求的网页已永久移动到新位置。服务器返回此响应(对 GET或 HEAD 请求的响应)时,会自动将请求者转到新位置。

302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。

304 (未修改) 自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。

305 (使用代理) 请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。

307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

4)这些状态代码表示请求可能出错,妨碍了服务器的处理:

400 (错误请求) 服务器不理解请求的语法。

401 (未授权) 请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。

403 (禁止) 服务器拒绝请求。

404 (未找到) 服务器找不到请求的网页。

405 (方法禁用) 禁用请求中指定的方法。

406 (不接受) 无法使用请求的内容特性响应请求的网页。

407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。

408 (请求超时) 服务器等候请求时发生超时。

409 (冲突) 服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。

410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。

411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。

412 (未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件。

413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。

414 (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。

415 (不支持的媒体类型) 请求的格式不受请求页面的支持。

416 (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。

417 (未满足期望值) 服务器未满足”期望”请求标头字段的要求。

5)一般是服务器问题:

500 (服务器内部错误) 服务器遇到错误,无法完成请求。

501 (尚未实施) 服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。

502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。

503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。

504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。

505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

23、如何定位一个问题是前端还是后端的

答:抓包看请求,web端用f12,手机端用fiddler或Charles,如果前端没有调用接口,就是前端的,如果有接口调用,再看看接口入参和接口文档里的约定是否一致,不一致就是前端的bug,入参一致,再去看后端日志和数据库的数据,如果处理的不正确就是后端bug。

24、计算机网络基础协议有哪几层

网络七层模型:

25、http和https,dubbo协议,rpc,tcp的异同点是什么

26、tcp三次握手是指的什么

27、冒泡排序,斐波那契数列,1000以内水仙花数等的算法编写

答:冒泡:

  1. public class Paixu {

  2. public static void main(String[] args) {

  3. int[] arr = new int[]{9, 8, 7, 6, 5, 4, 3, 2, 1};

  4. int[] arrs = MaoPao(arr);

  5. System.out.println(Arrays.toString(arrs));

  6. }

  7. public static int[] MaoPao(int[] arr) {

  8. //外层循环

  9. for (int i = 0; i < arr.length - 1; i++) {

  10. //内层循环

  11. for (int j = 0; j < arr.length - 1 - i; j++) {

  12. //两两比较

  13. if (arr[j] > arr[j + 1]) {

  14. int temp = arr[j];

  15. arr[j] = arr[j + 1];

  16. arr[j + 1] = temp;

  17. }

  18. }

  19. }

  20. return arr;

  21. }

  22. }

斐波那契数列:

  1. public class test4{

  2. public static void main(String[] args) {

  3. //创建一个用来装斐波那契数列的数组,假设只获取前十个数

  4. int [] arr = new int[10];

  5. //先将前两个放入数组

  6. arr[0] = 1;

  7. arr[1] = 1;

  8. //循环获得剩下斐波那契数

  9. for (int i = 2; i <arr.length; i++) {

  10. arr[i]=arr[i-1]+arr[i-2];

  11. }

  12. //输出这十个数

  13. String s = Arrays.toString(arr);

  14. System.out.println("前十个斐波那契数是:"+s);

  15. }

  16. }

1000以内水仙花数:

  1. public class sxhs {

  2. public static void main(String[] args)

  3. {

  4. int a,b,c;

  5. for( int n=100;n<1000;n++)

  6. {

  7. a=n%10; //个位数的数字

  8. b=n/100;//百位数的数字

  9. c=(n-b*100)/10;//十位数的数字

  10. if( a*a*a+b*b*b+c*c*c==n )

  11. System.out.println(n+" 是水仙花数!");

  12. }

  13. }

  14. }

28、内存溢出和内存泄漏的区别

答:内存溢出是指一种程序运行出现的错误,也就是说遇到这种情况程序是不能运行的。当程序运行需要的内存超过了剩余的内存时, 就出抛出内存溢出的错误,内存泄露是指占用的内存没有及时释放,内存泄露积累多了就容易导致内存溢出,所以说内存泄漏不一定会导致程序错误而停止,但对程序运行是有坏处的。

29、java中常用的锁的含义,乐观锁与悲观锁,阻塞锁和非阻塞锁等

答:维护并发安全常见的策略就是加锁,

悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,在获取数据的时候会先加锁,确保数据不会被别的线程修改。

锁实现:关键字synchronized、接口Lock的实现类

适用场景:写操作较多,先加锁可以保证写操作时数据正确

乐观锁认为自己使用数据时不会有别的线程修改数据,所以不会添加锁,只是在更新数据的时候去判断之前有没有别的线程更新了这个数据

锁实现:CAS算法,例如ActomicInteger类的原子自增是通过CAS自选实现

适用场景:读操作较多,不加锁的特点能够使其读操作的性能大幅提升

30、集合与数组的区别是什么,map的常见实现类有什么,分别有啥区别

31、多线程怎么实现的,常用的线程池有哪几个

32、final,finally,finalize的区别

1).final是一个关键字,如果我们用final来修饰属性的话,属性不可以改变,所以被final修饰的属性必须在声明的时候设置一个初始值,在之后需要用到的地方只能读取该值,不能对该属性做出改变,final修饰方法的话,方法可以被使用,但是不能被重写,final修饰类的话,类不能被继承,也就是说该类不能有子类,所以我们不能final来修饰一个抽象类。

2).finally是java的异常处理机制,我们经常会将finally语句放在try...catch...语句后面作为一种补充,因为finally语句不管代码有没有异常都会执行,这样我们可以用finally语句维护对象内部状态,清理非内存操作,例如我们可以使用finally语句来关闭流或者数据库等操作。

3).finallize方法是java.lang.Object里面定义的,因为Object是所有类的基类,所以我们可以理解为每个对象都有finalize方法,finalize的主要目的是在不可撤销的丢弃对象之前执行清除操作,对于给定的任何对象,java虚拟机最多只调用一次finalize()方法,finalize()方法是垃圾回收器删除对象之前对这个对象调用的。

33、队列与栈的区别是什么

答:队列是先进先出,栈是先进后出

34、在公司中常用的中间件有什么,如何进行测试的

答:可以回答redis或mq

35、如何保证消息队列的正确性,消息阻塞常见的原因是什么,如何解决

36、redis的用途是什么,如何测试的,如何保证与数据库的一致性

37、redis缓存雪崩,缓存击穿,缓存穿透的概念

38、spring常用注解有什么,举例@Autowired与@bean的区别

答:包含但不限于以下几种

1)@Autowired:注入一个 bean。

2)@Required:注入 bean 时,要求 bean 不能为 null,否则抛出 BeanInitializationException。

3)@Qualifier:当有多个相同类型的 bean 冲突时,@Qualifier 用来指定具体的 bean 名称进行注入。

4)@Configuration:标识一个 Spring 配置类。

5)@ComponentScan:扫描指定包下的所有 Spring 组件。

6)@Bean:手动创建一个 Spring bean。

7)@Primary:手动创建 Spring bean 时,指定当前为默认注入的 bean。

8)@Scope:配置 Spring bean 的作用域。

9)@Lazy:表示延迟注入 bean。

39、HashSet与TreeSet和LinkedHashSet的异同

1)排序

HashSet不保证元素的顺序,LinkHashSet保证FIFO即按插入顺序排序,TreeSet保证元素的顺序,支持自定义排序规则。

HashSet使用哈希表实现的,元素是无序的。添加、删除操作时间复杂度都是O(1)。TreeSet内部结构是一个树结构(红黑树),元素是有序的,添加、删除操作时间复杂度为O(log(n)),并且提供了first(), last(), headSet(), tailSet()等方法来处理有序集合。

LinkedHashSet是介于HashSet 和 TreeSet之间,内部是一个双向链表结构,所以它的插入是有序的,时间复杂度是O(1)。

2)null值

HashSet,LinkedHashSet允许添加null值,TreeSet不允许添加null值,添加null时会抛出java.lang.NullPointerException异常

3)性能

理论情况下,添加相同数量的元素, HashSet最快,其次是LinkedHashSet,TreeSet最慢(因为内部要排序)

4)TreeSet的俩种排序方式(我们可以给面试官讲讲自然排序跟比较排序)

40、后端通信方式有几种,同步请求与异步请求分别是通过什么技术实现的

答:rpc、https同步接口调用,mq异步消息。

41、面向对象的特点有什么,多态又是指的什么

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值