测试面经 | 从测试螺丝钉到大厂测试开发,三点成长心得和面试经验

原文链接


霍格沃兹测试学院优秀学员学习心得与面试经验分享,进阶学习文末加群!

学习心得

本人本科毕业后在一家金融类软件服务商做测试,工作了近2年的时间。这家公司作为乙方,需要满足甲方提出的各种定制化需求,而且当时所在的项目组常常需要去甲方单位现场出差。一方面,我个人不太喜欢这样的工作方式;另一方面,感觉测试工程师在公司的地位很低,连代码权限都没有,也没人关心你的个人成长,所以下决心跳槽去互联网企业发展。

在准备面试期间,了解到霍格沃兹测试学院的测试开发实战课程,课程内容设计很丰富,涵盖了互联网测试行业各大主流技术方向,感觉随便拿一个出来都可以当做一个专职的来做,比如UI自动化测试,接口自动化测试,性能测试,代码覆盖率,静态代码扫描,专项测试等,各个部分可组装成一个完整的体系,可以全面补齐我的技能短板,当下就决定报班学习。比较幸运的是,在霍格沃兹测试学院学习不到半年内,就顺利拿下了某互联网电商平台的测试开发岗位Offer,不仅薪资翻了一倍多(涨幅114%,年薪23W+),更重要的是工作模式和技术栈发生了很大的变化。

在新的互联网测试团队,测试QA需要对整个产品质量负责,从需求初审,终审,设计用例,测试,UAT验收,回归验收,项目上线等整个流程都贯穿其中,并辅以接口自动化测试和CI/CD持续交付等提高测试效率。UI自动化因为项目变动频繁,且考虑到ROI,只做了核心功能的case。线上监控有Grafana,日志平台使用的是ELK,而且已经陆续要迁移到自研的平台上了。另外各种环境部署都配合Docker,也慢慢由Mesos迁移到K8S。很喜欢这里的工作氛围,有很多技术挑战也有很多成长机会,也需要不断学习保持自己的竞争力。

这里也简单分享我个人的一点测试开发学习心得和面试经验:
首先,要有意识系统构建自己的测试开发技能体系。比如学院课程里接口自动化测试+静态代码扫描+代码覆盖率+报告展示+邮件生成这个流程结合Jenkins,可以形成一个完整的闭环监控体系,对于开发每次提交代码则触发一次。再比如UI自动化+STF整合成一个兼容性测试平台,结合Jenkins也可以做到闭环。

其次,学习过程中,最重要的是动手实践。一定要动手自己去敲代码,去搭建环境,去把整个流程跑通,即使是实现一个Demo,也会让你有成就感。在学习过程中,我就在阿里云买了一个服务器,自己搭建Jenkins,把自己写的接口自动化和UI自动化跑起来,并搭了一个Grafana+Prometheus的监控体系,虽然都是些小玩具,但还是倍感欣慰,由于内存有限,像类似STF、SonarQube无法搭建在服务器上,但自己本地都尝试过。一番动手实践下来,感觉收获很多,也才能正真理解很多技术细节要点。
最后一点是,知识既要有广度,也要有深度。一定要有自己最为擅长的东西,像我自己虽然接触了很多,尝试了很多,但感觉技能水平深度还不够,仍需不断学习,这里也与各位同学共勉。

面试经验

因为在异地,我的面试经历是通过远程视频面试的,整体体验还不错。

首先,是惯例的自我介绍,当前工作主要负责哪些内容。

然后,面试官按简历内容进行了一些提问,比如当前接口测试怎么测的,讲一下大概的流程。UI自动化这一块目前工作如何,这两个问题因人而异,但主要就是讲数据准备,用例执行,数据清理,以及框架封装,平台工具之类,就不多讲了。由于简历上提到了资源监控的服务的搭建经历,就详细介绍了一下我用Docker+Prometheus+Grafana搭建的服务监控阿里云服务器和MySQL资源使用情况,讲了监控的内容有哪些。

接着,问了一下平常有开发过什么工具吗,说了一下之前写的数据回滚的工具,根据数据库事务Log,Oracle提供的那个Flashback,先把数据准备和用例执行过程中会变动的表全部拿到,开启表行权限,再记录当前的scn号,在执行完以后将表全部回滚,里面还封装了一下HTTPClient,写了一个get方法,两个post方法去刷缓存,一个是json串的,一个是key-value的。

再接下来就是具体的出题目了。

第一个题目是Linux技能。问我平常Linux哪些命令用的比较多,我写了一部分cpcdscprmmkdirgrepsedawknetstatpslslsofvimechocat大概这么几个(其实平常用到很多,当时紧张没想起来),让我介绍一下这几个命令,tarmvhistorytailtopwgetfindtouchcleardfduchmodcurl这些,然后就针对我写的那几个命令问了几个问题,mkdir怎么创建a/b这样的目录(a不存在)?三剑客如何使用?注意grep命令会把自身grep出来,如何去掉这个内容?还有问了一下ps-ef和psaux有什么差别?最后给了一个properties文件,让找出某个配置的值(这个挺简单了)!

第二个题目给了道编程题。直接在在线IDE里写出来并调试出结果。给一个数组a,输出这个数组里元素出现次数大于数组长度一半的那个元素。题目相对来说简单,但面试手撸代码这个过程让人感觉有点紧张。写了大概十来分钟,所幸还是写出来了,不过还是有bug,只适合数组元素都是正数的情况,我就是遍历数组,找出最大值记录,然后同时new一个和原来数组一样大小的数组b,关键就一行代码b[a[i]]++,将a的值当做b的下标,遍历到一个相同的值b对应的下标加1,然后再遍历新数组,当值大于原来数组长度一半直接输出下标,之前的max值控制遍历的长度,因为只需要遍历到b[max]就结束了,当时还在想怎么考虑负数的情况,面试官直接就问我思路,提到其实hashmap可以很轻松实现,但是平常没怎么写过,怎么遍历key和value也记不太清,算是勉强过关。

第三个题目是设计测试用例了。因为是电商公司,自然就是一个类似淘宝下单的界面。有库存,价格,图片,尺码,颜色,购买数量这几个,让我直接在ide里面写一下测试点,分别对功能、性能、兼容性、安全四个方面写了一下。这个问题具体的就不展开讲了,就讲一下我漏了的地方,购买数量上限是5,即[1,5],当库存不够的时候忘了考虑数量即使在这个区间也无法购买的情况,然后就是图片,面试官点了一下,我只写了检查图片是否符合预期,没仔细写,然后说了一下图片是否符合衣物,图片的清晰度,是否经过压缩,图片大小限制,是否经过裁剪。

最后问了一下数据库相关的问题,问我是否平时都是增删改查,有没有经历过相对复杂一点的问题。刚开始没听太懂,我以为是指SQL的分析函数,事务,触发器编程等东西,实在没用过,就简单说了下除了增删改查还用过orderby,groupby,partition等,后来面试官说是对于数据库优化有没有实际经验,比如慢SQL之类,也没怎么经历过,就说了下一般通过增加索引来提高查询速度,然后面试官根据索引问了一些问题,什么情况下使用索引,使用索引以后会有哪些负担,索引怎么实现的?这个我只说了下B+tree或者Btree?可能只是想问问我知不知道是什么东西,并没打算真的问怎么实现的。

到这差不多一个小时了,惯例结束前会让面试者提问,我问了一下那边的测试流程(想知道项目管理这一块乱不乱),面试官说了一下需求都会有评估时间,开发提测时间延后测试肯定也延后,不会出现压缩测试时间的情况;最后问了一下那边接口测试怎么开展的(主要还是全代码实现的,基于Python用Unittest实现的,自己封装了一套),至此就结束啦。

以上,整体感觉比较顺利,可能我之前的学习实践经历给面试官留下了较好的印象,这里也再次感谢霍格沃兹测试学院各位老师的指导和帮助,也祝各位测试小伙伴能收获成长,一起进步!

【相关阅读】

测试面经|半年薪资翻倍逆袭大厂,这位“上错车”的测试媛不简单!干货|一文搞定Linux常用高频命令