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

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

学习心得

本人本科毕业后在一家金融类软件服务商做测试,工作了近 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 哪些命令用的比较多,我写了一部分 cp cd scp rm mkdir grep sed awk netstat ps ls lsof vim echo cat 大概这么几个(其实平常用到很多,当时紧张没想起来),让我介绍一下这几个命令,tar mv history tail top wget find touch clear df du chmod curl 这些,然后就针对我写的那几个命令问了几个问题,mkdir 怎么创建 a/b 这样的目录(a不存在)?三剑客如何使用?注意 grep 命令会把自身 grep 出来,如何去掉这个内容?还有问了一下 ps -ef 和 ps aux 有什么差别?最后给了一个 properties 文件,让找出某个配置的值(这个挺简单了)!

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

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

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

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

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