一、问题预测
1、让简单介绍下自己(这个不用说了每次面试开场)
面试官,你好,我叫xxx,xx年本科毕业,从事软件测试将近3年的时间。在此期间做过一些项目也积累过一些经验,能够独立地完成软件测试流程的一个工作。最近的一份工作是xx公司,主要参与app系统测试,负责xxapp,一款类似抖音的短视频app功能测试,负责过的功能模块有拍摄、上传、搜索、推荐引擎等。主要运用边界值,等价类,错误推测等常见黑盒测试方法。我最近有在学习的是一个app的自动化测试,它是使用Pythopn+Appium,结合pytest自动化测试框架,基于PO的思想来实现的。平时我会在各新媒体平台分享我的测试经验,现在总粉丝大概有1w+,以上就是我的一些简单的自我介绍,谢谢。
2、让说下自己会的内容
说自己会的就行,不会的千万不要提,比如:我之前主要做过的是功能测试,web自动化测试、app专项测试、接口测试、也有用过Jmeter做过一些性能方面的测试。我对于缺陷管理工具比如禅道,版本控制器git与svn能够熟悉应用。数据库、linux、Fiddler、Jmeter这些应用也比较熟悉。我熟悉软件测试基础理论和测试流程,测试方法等,有app测试、web测试、接口测试经验。熟悉数据库增删改查操作,熟悉使用测试管理工具。
3、看了哪些书籍(有问到)
软件测试,软件测试的艺术、软件测试实用教程、Google 软件测试之道,最喜欢的书是大话软件测试,这本书能帮助新手深入理解性能测试和自动化测试的意义,也能帮助有多年工作经验正处于迷茫阶段的从业人员排忧解难,还能给那些刚刚步入管理岗位的菜鸟们提供指导(尤其是团队建设、绩效管理等)
4、了解过哪些技术博客/论坛(有问到)
testerhome、CSDN一些博客(面试经验:面试中会问具体哪些博客),和公众号(面试经验:面试中会问具体哪些公众号)
5、是否了解软件测试需要掌握哪些知识(有问到类似问题)
软件测试基础知识,软件测试的流程,测试用例方法,bug提交,测试报告,测试计划,数据库相关知识,UI自动化,抓包分析,接口测试(手工+自动化)、测试工具、性能测试等。
6、觉得自己需要补充哪些?做了哪些行动?
很多公司自动化测试有要求,由于之前的工作主要涉及的不多,我最近有在学习的是一个app的自动化测试,它是使用Pythopn+Appium,结合pytest自动化测试框架,基于PO的思想来实现的测试。所以这方面的知识储备不够,希望以后在工作中能深入学习。
7、为什么做测试,觉得自己做测试有哪些优势?(有问到)
我觉得我个人的性格比较适合做测试。我比较细心耐心,考虑事情比较全面,这样对于我在设计测试用例时很有帮助,而且我能够很好的与人协调沟通,当我们测试和开发发生沟通上的矛盾时我也能很好的解决,我平常喜欢刷微博、知乎看热门评论,喜欢考究大众心理,这有助于我站在用户角度设计测试点。
8、知道哪些Bug管理工具系统
禅道/bugzila/Easybug等
9、测试用例的基本要素是?
三大核心要素为 :标题 、步骤 、预期结果
1.标题:是对测试用例的描述,标题应该清楚的表达测试用例的用例
2.步骤:对测试执行过程进行描述
3.预期结果:提供测试执行的预期结果,预期结果一般是根据产品需求得出,如果实际结果和预期结果一致则测试通过;反之失败。
非核心要素:
4.预支条件:执行当前测试用例所需要的前提条件,如果这些前提条件不满足,则后面的步骤无法进行或无法的到预期结果。
5.测试用例所属的项目(一般使用用例管理工具一次性分配)
6.用例编号(用例管理管理工具会自动分配)
如果没有用用例管理工具
产品编号-ST-系统测试项名-系统测试子项名-XXX
7.重要级别:一般分为高、中、低(每个公司的等级可能有出入)。
高:系统基本核心业务
中:介于高低之间
低:使用频率不高,对系统功能影响不大
8.测试用例输入:用例执行过程中需要加工的外部数据
二、介绍一下自己测试过的项目
1、对项目进行基本介绍
这一部分对项目的基本介绍重点要概括说明项目的基本功能和组成部分。
2、说明自己负责测试的模块
这一部分需要挑选自己比较熟悉的业务功能模块,因为后续面试的问题可能就出自这些模块。
3、针对部分模块展开进行说明
最后挑选一些有代表性的模块展开说明,这里需要注意的是说明的模块或者业务一定要描述的清晰有条理。
介绍的整体项目时间把握在2分钟内,目的是让面试官对你之前的项目有一定的了解,同时体现下自己的逻辑和表达能力。如果想进一步的丰富的话,可以再简单说明下公司的测试流程,及测试中使用到的具体的技术,比如数据库等。
三、技能方面
1、 数据库方面常识
关系型数据库:把复杂的数据结构归结为简单的二元关系(即二维表格形式),通过SQL结构化查询语句存储数据
典型产品:
Mysql:互联网领域、大中小型网站,游戏公司,电商平台等等。体积小、速度快、成本低、开放源代码
Oracle:传统大企业、大公司、政府、金融、证券等。安全性、成本高、
非关系型数据库:非关系型数据库也被称为NoSQL数据库,NOSQL的本意是“Not Olnly SQL”。NOSQL为了高性能、高并发而生
其他分类
1)键值(Key-Value)存储数据库:主要是使用一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。简单、易部署、高并发
典型:Redis、Memcached
2)列存储(Column-oriented)数据库:应对分布式存储的海量数据。如果我们有一个Person类,我们通常会一起查询他们的姓名和年龄,而不是薪资。这种情况下,姓名和年龄就会被放入一个列族中,而薪资则在另外一个列族中。
典型:Hbase
3)面向文档数据库:数据存储的最小单位是文档
典型:Mongodb、Hive
Mongodb一个介于关系型数据库和非关系型数据库之间的产品。高性能、易部署、易使用,存储数据非常方便。
Hive可以用来进行统计查询,HBase可以用来进行实时查询
一些增删改查笔试题准备
2、 linux操作
linux搭建测试环境,比如web系统服务搭建。
linux常用命令
1)Linux管理文件和目录的命令
2)有关磁盘空间的命令
3)文件备份和压缩命令
在Linux中,常用的文件压缩工具有gzip、bzip2、zip。bzip2是最理想的压缩工具,它提供了最大限度的压缩。zip兼容性好,Windows也支持。
4)有关关机和查看系统信息的命令
5)管理使用者和设立权限的命令
6)线上查询的命令
7)文件阅读的命令
8)网络操作命令
9)其他命令
10)bash常用命令
3、缺陷方面(有问到)
描述一个你印象最深刻的bug
其实,面试官并不关心你描述的这个bug是否真的有价值,或有多曲折离奇?他只是:
1)了解你平时工作中的测试能力
所以,这就要求的你平时工作中遇到bug时试着自己去定位,定位bug的过程远比你的单纯的执行测试用例有“价值”(自我技能提高的价值),在定位bug的过程中你需要掌握和运用更多知识。
另外,建议你平时养成总结的好习惯,发现的bug,开发解决了,最好问问他原因以及解决的方法,这样再遇到类似问题时,自己也可以试着定位解决。遇到难解决的bug,也可以把最终的解决过程记录下来。(这不是就有素材了)
2)考察你的表达能力
我们搞技术的有许多属于闷骚性格,让我们和技术打交道游刃有余。在QQ群里聊天,也风趣、幽默、机智、博学… 因为网络段子看多了嘛,再加上有百度加持。但面对公司会议或者和陌生人交流时,语言表达能力比较欠缺。
所以,建议你平时可以主动要求去分享一些自己工作中用到或学习的技术。或者多去参加集体活动,加强自己的表达能力。
3)也许就是想抛一个问题给你,自己好有时间继续看你的简历。
如果,一时想不起来怎么回答,可以这么切入,找一个自己工作中很熟悉的项目,然后,谈谈你是如何对这个项目进行测试的,然后,在某一个版本测试中,发现xxx,开发也xxxx,前端也xxxx,运维也xxxx,最后终于发现原来是xxx引起的xxxx 。
把你工作过程中的测试方法和步骤描述清楚了,那么这个bug有没有价值或是否印象深刻就不那么重要了。
4、用例部分
现场让你设计个用例,比如水杯、凳子怎么测试?
首先说明的是,遇到这样的测试题目,首先应该反问面试官,需求是什么样的,比如是测什么样的杯子。
因为设计测试用例的规则应该是根据需求分析文档设计用例,客户需求什么,就测试什么。
但是在没有需求分析文档的前提下,来设计测试用例,可以考查一个测试人员的基本功,比如考虑问题是否全面,设计测试用例的方法是否合理等。
一般是根据自己的日常经验和测试的思维来设计测试用例。在设计测试用例时一般从以下几个方面进行分析:功能测试,性能测试,界面测试,安全性测试,兼容性测试,可用性测试,可靠性测试,本地化/国际化测试。
5、软件测试流程
公司严格规范测试流程和测试文档,首先是参与需求评审,编写测试计划、测试方案、测试用例,进行测试方案及用例的测试组内部评审,外部评审。
提取部分一级用例提交研发自测,研发自测通过后开开始执行一轮系统测试。
测试过程中发现并提交、跟踪问题。
问题修复后进行回归测试。
一轮测试完成后对修复包进行冒烟测试,测试通过则进行二轮测试。
二轮测试完成后会进行需求交叉测试。
完成测试编写系统测试报告提交验收测试。验收测试通过输出验收测试报告。
6、网络相关
网络协议,如TCP/UDP的区别?
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
三次握手与四次挥手
三次握手通俗版:
第一次握手:客户端要和服务端进行通信,首先要告知服务端一声,遂发出一个SYN=1的连接请求信号,”服务端哥哥,我想给你说说话”。
第二次握手:当服务端接收到客户端的连接请求,此时要给客户端一个确认信息,”我知道了(ACK),我这边已经准备好了,你现在能连吗(SYN)”。
第三次握手:当客户端收到了服务端的确认连接信息后,要礼貌的告知一下服务端,“好的,咱们开始联通吧(ACK)”。
到此整个建立连接的过程已经结束,接下来就是双方你一句我一句甚至同时交流传递信息的过程了。
四次挥手断开连接通俗版:
第一次挥手:双方交流的差不多了,此时客户端也已经结尾了,接下来要断开通信连接,所以告诉服务端“我说完了(FIN)”,此时自身形成等待结束连接的状态。
第二次挥手:服务端知道客户端已经没话说了,服务端此时还有两句话要给客户端说“我知道你说完了(ACK),我再说两句&*…%¥”…
第三次挥手:此时客户端洗耳恭听继续处于等待结束的状态,服务器端也说完了,自身此时处于等待关闭连接的状态,并对告诉客户端,“我说完了,咱们断了吧(FIN)”。
第四次挥手:客户端收知道服务端也说完了,也要告诉服务端一声(ACK),因为连接和断开要双方都按下关闭操作才能断开,客户端同时又为自己定义一个定时器,因为不知道刚才说的这句话能不能准确到达服务端(网络不稳定或者其他因素引起的网络原因)。
所以默认时间定为两个通信的最大时间之和,超出这个时间就默认服务器端已经接收到了自己的确认信息,此时客户端就关闭自身连接,服务器端一旦接收到客户端发来的确定通知就立刻关闭服务器端的连接。
到此为止双方整个通信过程就此终结。
这里要声明一下:断开链接不一定就是客户端,谁都可以先发起断开指令,另外客户端和服务端是没有固定标准的,谁先发起请求谁就是客户端。
三次握手阐述:
在第一次消息发送中,A随机选取一个序列号作为自己的初始序号发送给B;
第二次消息B使用ack对A的数据包进行确认,因为已经收到了序列号为x的数据包,准备接收序列号为x+1的包,所以ack=x+1,同时B告诉A自己的初始序列号,就是seq=y;
第三条消息A告诉B收到了B的确认消息并准备建立连接,A自己此条消息的序列号是x+1,所以seq=x+1,而ack=y+1是表示A正准备接收B序列号为y+1的数据包。
四次挥手阐述:
由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,
收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。
首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。
(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
7、测试工具
测试工具,无非这几类:
BUG管理工具:禅道、Jira、Bugzilla等。
web端自动化测试工具:selenium、QTP等。
app自动化测试工具:有Appium,MonkeyRunner、Robotium等,
性能测试工具:主要是Loadrunner和Jmeter。
抓包分析工具:wireshak、fiddler。
数据库工具:mysql/oracle
自动化测试工具 (如QTP)
性能测试工具 (如loadrunner)
测试管理类 (如jira)
安全测试工具
渗透测试工具
8、其他概念问题
Beta测试与Alpha测试有什么区别
1、Alpha测试
Alpha测试是由用户在开发环境下进行的测试,也可以是开发机构内部的用户在模拟实际操作环境下进行的测试。开发者坐在用户旁边,这是在开发者受控的环境下进行的测试。由开发者随时记录下错误情况和使用中的问题。
2、Beta测试
Beta测试是由软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,这是在开发者无法控制的环境下进行的测试。由用户记录下遇到的所有问题,定期向开发者报告。beta测试是一模拟真实的使用环境从而发现缺陷的一种测试
3、验收测试
验收测试是以用户为主的测试,软件开发和QA人员也应该参加,测试一般在用户所在地进行,由用户验证软件产品是否满足了所有的需求的一系列的验收测试工作。
仅限于做项目的公司,部门内部测试稳定后,根据合同中需求由发包商进行验收测试。验收测试的目的是为了以发现”未实现的需求”为目的,以评估”适合使用”为目标,该类测试的不是以发现缺陷为主要目的。
区别:两者的主要区别是测试的场所不同。
Alpha测试是指把用户请到开发方的场所来测试,beta测试是指在一个或多个用户的场所进行的测试。Alpha测试的环境是受开发方控制的,用户的数量相对比较少,时间比较集中。
而beta测试的环境是不受开发方控制的,谁也不知道用户如何折磨软件,用户数量相对比较多,时间不集中。
一般地,alpha测试先于beta测试执行。通用的软件产品需要较大规模的beta测试,测试周期比较长。如果产品通过了beta测试,那么就可以正式发行了。
Alpha测试在系统开发接近完成时对应用系统的测试;测试后仍然会有少量的设计变更。这种测试一般由最终用户或其它人员完成,不能由程序或测试员完成。
Beta测试 当开发和测试根本完成时所做的测试,最终的错误和问题需要在最终发行前找到。这种测试一般由最终用户或其它人员完成,不能由程序员或测试员完成。
四、你还有什么想问的吗(必答)
面试官要给面试者一个提问的机会,其实是因为,面试者有权利了解面试他的这个部门的基本信息、岗位信息以及他将来可能要使用的技术、负责的业务。
所以可以去问一些关于部门、技术栈等方面的信息了解清楚,从而更好地评估自己是否适合这个部门,更广泛地去了解部门的信息,并提前学习相关的一些技术栈,假如你将来真的要加入这个公司,这也会是对你非常有帮助的。
面试官听到你问这种问题时,也会很热心地回答你,他也会对这种求知欲很满意的,毕竟你是想了解他所在的部门,所做的事情,想要加入他们,面试官可以收到你想要传达给他的心意
问你真正想问的,不代表你可以无底线地提问,对面试官来说,有一些问题是比较禁忌的,我们不妨来看几个反面例子。
不要问薪资:直接问薪资是不可取的,假如你参加的是技术面试,千万别问薪资,人家会觉得你很不专业,并且心思都放在了钱上。如果是HR面试,你还可以比较含蓄地问一下“贵司的薪资结构是怎么样的”,侧面进行了解,千万不要说“我一个能拿到多少钱”这样直白的话。
不要问私事:有些面试者比较随意,想直接从面试官身上获得一手的信息,比如问面试官“一个月工资多少钱”、“平时你加班严重吗”、“你觉得这家公司怎么样”这就好像一个刚认识的人打探你的家事一样,会让人很反感的。
不要问一些和职位无关的事情:有些面试者可能跳出了面试职位,直接开始问一些比较脱离实际的问题“未来公司战略是怎么样的”、“我们部门发展现状,将来会如何如何”这类假大空的问题也是要避免的。我相信犯这个错误的人应该比较少,毕竟咱们程序员都比较实在。
五、简历模板
简历是面试中最重要的一环,这里详细介绍一下简历怎么写,才能吸引HR的眼睛。
1)个人基本信息
简历开头是个人信息,这个大家都没有异议的吧?但是个人信息应该包含哪些内容,每个人理解都不一样,我的建议是:
1、要包含:姓名、性别、学历、工作年限、电话、邮箱地址;
2、不包含:照片(对自己特自信的除外)、毕业学校(特知名的除外)、专业(特自豪的除外);
原因:咱们是技术岗,一切以技术优先;
学校和专业如果是优势,当然鼓励放前面,甚至可以把学校期间获得的奖项也简要写一写,这个是加分项。如果不是,请尽快让筛简历的人往下看到自己的优势;
2)个人专业技能
作为技术岗位,你的个人技能是面试官最为关注的要点之一。而作为软件测试岗位,如果想要理想的薪资,技能不可以过于单薄。
既然是专业技能,记得写一些自己拿的出手的东西,应聘测试工程师,你说自己熟练使用office文档,这有什么关系?
更悲剧的是,只是熟悉测试用例编写方法,就是本来应该掌握更好的测试技能反而还不如 office 用的好了?
这部分我的建议是:
1、不要随便写「精通」,特别是针对操作系统和编程语言,如果你真的「精通」,当我没说;
2、如果招聘需求有明确技能要求,请自己对照着优先级提供自己对应的技能熟练程度;
3、要突出你的个人特色,你最擅长的一定要写在前面。有时候HR真的会没耐心看完,注意力最多3行;
4、简历是给别人看的,是要吸引别人注意力的,要提供别人关心的内容,不要一股脑把自己自以为傲但又毫不相干的特长列上去;(2和3的总结)
5、个人能力中写的都是熟悉和掌握,甚至还有了解,对于HR来说,掌握代表的是会用,熟悉代表着用过,了解就代表着不会。对于自己真正掌握的技术,可以大胆写上“精通”,能达到精通的技能一定是深度学习和经验累积的结果。
6、简历中最核心的在于“个人能力”,首先要确保展示自己所掌握的技能,并且一定要有所擅长,不然面试一问三不知就很尴尬了。
3)工作经历
工作经历就简单罗列一下自己在不同公司的从业经验就可以,一般只需要提供时间区间、公司名、岗位名称即可。
几个注意事项:
1、不要写公司介绍,不关心;
2、不要写工作简介,项目经验里面有;
3、每个公司尽量只占一行,不用在这吸引太多眼球;
4、如果呆过的公司比较多,建议把位置调整到项目经验的后面去;
4)项目经验
现在所有的企业除了比较看重实际工作经验之外也非常注重项目经验。
并且项目经验是简历中篇幅最多,一定要格外用心去写。
写项目以及工作经验的时候我们可以按照S.T.A.R.法则来写
S情景:项目是在什么背景下制作的,要在什么情况下完成。
比如:为了用户可以更好的体验xxxx,公司研发了xxxx,本项目主要针对xx用户,由xxx和xxx系统或架构组成,由什么语言来编写的;
T任务:在本项目中主要负责什么,比如:参与该模块测试的组员有xx人,我主要是负责xxx,用它来xxx的,并且负责xx用例以及报告的设计以及评审组织演说等等;
A行动:在这个任务中你做了什么。比如:使用xx管理用例的编写,通过xx管理代码和版本,使用xx工具做了什么,我对该模块的工作使用了xx技术等等;
R结果:通过本次行动得到了什么结果,比如:编写了xx个用例,发现了xx个bug,编写了xx行代码。利用xx工具做的结论—压测结果,或者测试结果,开发结果等,通过以上得到了项目对我的一些影响。
项目经验几个注意事项:
1、按时间倒序写,就是最近的项目写到最前面;
2、挑几个典型项目进行重点罗列,就是可以体现自己能力的项目;
3、项目简介要简洁,自己提炼下语言,不要从别的地方拷贝粘贴一大段你自己都不看的内容,突出下自己负责模块的重要性即可;
4、前面写的专业技能,要在典型项目的工作职责中有体现,如果专业技能写自己会很多自动化工具,结果项目里全是手工测试,这明显有问题;
5、工作职责里挑典型的、能体现自己专业技能的部分重点写,其他和别人做的一样的内容简写;
5)整体格式
首先,这份简历看上去干净整洁,条理清晰,让人赏心悦目,这是一个加分项。
不要有拷贝粘贴的痕迹,告诉你一个小秘密,如果是 docx 文件,系统又开启了豆沙绿的话,很容易看出来哪些是拷贝粘贴的内容。
其次,个人技能很丰富,完全符合当下市场需求。不管是理论基础,还是功能、性能、自动化,都有体现出来。任何一家企业所涉及的技能都能用得上。
你要明白,虽然一份好看的简历能为你打开一扇扇面试的大门,但最终面试官考察你的,还是你简历上体现出来的技能点是不是真材实料,你对知识点掌握和理解的程度,你是否能思路清晰的描述出你曾经做过的项目等等。
即使某些知识点,你仅仅是学习过,但并没有实际使用过,但如果你能思路清晰的描述出来,也会很加分。
最后,一定要记住,写简历最重要的是用心,如果对自己的敲门砖都不用心,怎么能保证是真的想进门?
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取