⬇️ 点击“下方链接”,提升测试核心竞争力!
>>更多技术文章分享和免费资料领取原文链接
本文为霍格沃兹测试开发学社优秀学员跳槽笔记,测试开发进阶学习文末加群。
关于我,普通二本,非计算机专业,培训出身,北漂,五年多的工作经验,做过外包,中间有过频繁的跳槽经历,手工点点点为主,最近确认了新Offer,远程办公,涨薪幅度40%+,年薪大概40w+。我知道这个薪资横向对比其实并不算高,说实话离自己的期望也还差了一些,能力不足是一方面,另一方面是薪资没谈太好,有点着急了,这个后面会讲到。
虽然五年多跳槽了五次,但其实我的面试经历并不算丰富,因为每一次跳槽面试的次数都屈指可数,所以这篇文章更多的是简单回顾一下过往,同时附带一些思考和总结,或许会对后来者有所借鉴和启发,也可能全是废话。
只怪当时太年轻
就从培训说起吧,由于原生家庭以及自我认知的不足,大学时选错了专业(电气工程及其自动化)。加之少不更事,沉迷游戏(英雄联盟),不思进取。坠入爱河,不能自拔,虚度了光阴,甚至差点遗憾了终身。或许是命运吧,在大三快要结束的时候,恰好有个校企合作的培训,免费,不限专业,学分可互换,有两个方向,一个是软件开发,另一个是软件测试。
因为非计算机专业,C语言学的也不好,所以就选择了我认为门槛较低竞争较小的软件测试,大四开学告别了温柔乡从郑州去到洛阳,开始了培训。培训的内容主要就是软件测试基础、Linux,以及惠普的测试三大件。那段时间我一周的学习量可能比大学以来的学习量加起来都要多,一方面是感兴趣,另一方面是再不学毕业可能真的就失业了,原本半年的培训,我只学了三个月,一个电话面试就找到了一份实习的工作,可见测试的门槛确实很低,不过其中的努力是少不了的,记得当时像我一样去培训的有几百人,最终进到这个圈子的貌似并没有多少,并不是说那些同学差,或许人家已经在其他领域混的风生水起了,亦或者去继承家产了也不是没有可能。
之所以回顾了下这段培训的经历,是因为它改变了我的命运,让我进入到了互联网这个行业,所以我对培训这件事并没有厌恶和抵触,在我的简历和自我介绍中也都会提到。那为什么工作了几年之后,还要再次培训呢?暂且先不谈这个,先来回顾下我的外包经历吧。
上文提到我大四开学培训了三个月的软件测试,一个电话就通过了面试,当天办理完离校手续,然后买了人生第一张机票,从洛阳飞到了传说中的北京,开启了北漂。但来到北京之后才知道还要再面试,才知道外包是什么意思。三大软件测试外包公司我去过两个,第一次是博彦科技外包到新浪微博,算上实习做了一年半,第二次是软通动力外包到手机百度,做了整一年。之所以有两次外包经历,是因为中间去过一家私企,感觉并不理想,做了一个月就走了,当时没有更好的选择,无奈又做了一年。
毕竟是大厂,我想很多选择外包的同学都是看中了这一点,虽然是外包,但大厂的环境氛围和业务流程确实能带来一些不一样的体验,如果幸运的话,遇到一个好领导或同事,在技术上也能收获很多。比如我编写测试用例和使用Charles抓包,就是在新浪实习时的组长手把手教的,不过外包的工作一般都比较简单和枯燥,转正的机会和名额是相当有限的,不建议做的时间太久,否则可能会影响到以后的职业生涯,我有次走内推就被嫌弃外包经历过多,若不是朋友提醒可能都不知道为什么好端端的简历直接被Pass,所以外包虽好,可不要贪杯喔。
选择比盲目努力更重要
为了摆脱外包的困境,自学了Python,不断弥补各种计算机基础知识,构建底层知识网,学过CSS、HTML、JS等前端知识,学过Android、微信小程序,甚至学习了区块链,当然现在基本上都忘的差不多了。因为不实际去做项目,每天点点点写不了几行代码,学过的那些皮毛很容易就忘了,虽然做过大量的笔记,画过各种脑图,但转化不成自己的东西,掌握不了底层的原理,狼吞虎咽,很容易走火入魔,这让我差点放弃了测试,想过转开发,想过转产品,甚至天真的想过去创业,整个人变得越来越浮躁。
然而在生活的逼迫之下,不得不面对现实,踏踏实实做好测试才是正确的选择,移动端测试做腻了,就去做Web端,UI测试做烦了就去做接口,功能测试做累了就做自动化等等,不断地找寻新鲜感。也可以改变自己的定位,比如可以从功能测试工程师转变为自动化测试工程师,可以从测试开发工程师转变为测试架构师,你会发现测试这个职业跟开发其实是差不多的,不要把自己局限在某个标签下,不断地去探索和尝试自己擅长的领域。
但尝试归尝试,正常是不建议跳槽太过频繁的,会给人一种不稳定的感觉,但如果你跟我一样,为了摆脱外包的桎梏,多跳个几次其实也没什么,只要在面试过程中解释清楚一般都会理解的,不过最终肯定是需要有一段比较稳定的工作经历,我在前几年折腾完之后现在已经稳定工作了三年多,所以才没影响我这一次的跳槽。
这三年里,工作内容基本还是功能为主,但在闲余时间把Python重学了一遍又一遍,学一遍忘一遍,直到我开始上手做项目写框架,不断地查漏补缺,慢慢地终于算是掌握了它,基于Python+Django等搭建了测试数据构建平台,基于Python+Requests等写了自动化接口测试框架,都不是Demo,而是真正基于业务去解决问题,当你看到研发和产品都在用你写的平台,甚至还会给你提Bug和需求的时候,那种感觉是很奇妙的,会激励你去做的更好,去学习更多的东西,因而形成一个正向循环。
当然这个过程是需要付出很大心血的,尤其是身边没有人可以帮助你的情况下,我想如果早一点遇到霍格沃兹测试开发学社这样的组织,应该会少走很多弯路。因为在这里你可以随时提问,会有很多跟你一样的同行者,会有经验丰富的前辈指引,不止有方法论,还有具体的解决方案,这是大多数人更需要的东西,你只有解决了一个又一个问题,才能真正理解那些形而上学的东西,不然都是假大空。
目标明确
我在报班之前其实对那些测试框架已经有所了解和使用,而且我还有学不完的各种知识付费课程,觉得也没必要再花那个冤枉钱,毕竟一路都是自学走过来的,但犹豫对比了很久之后,还是选择了来霍格沃兹测试开发学社学习下,因为他的课程确实很系统,而且有比较多的实战项目,一节直播课下来可能比自学一周要学到的多。不过我后期因为个人琐事耽误了一些课程,到毕业都还没全看完,状态也不是很好,甚至都没来得及复习一遍,面试前也没有刷过笔试和算法题之类的,那么我是如何拿到Offer的呢?
我觉得最重要的就是明确目标,知道自己想要什么,对什么感兴趣,如果不知道,那至少应该知道自己不想要什么,对什么不感兴趣,这样你就有了方向,有了范围,有了取舍。
拿我自己来举例,我不喜欢也不想找移动端相关的测试,因为外包那两年每天面对着十几款各式各样的测试机,每一种机型的开发者模式设置和截图方式都滚瓜烂熟,还有丑到爆的定制化操作系统对我真的是一种折磨,移动端APP我真的测吐了,所以ADB以及Appium这些移动端相关的工具和框架我就可以不再去复习,问就是会,但不好意思,记不清了。那我喜欢什么呢,接口测试相关的,所以我只需要把网络协议抓包以及我自己写的接口测试框架回顾一下即可。
再比如我对区块链相关的项目和企业感兴趣,我只需要去约面这类相关的公司就可以了,其它的尽可能都拒绝,除非薪资到位,但也要估摸下自己的能力,没那个实力就别浪费彼此的时间了,正确地认识自己,合理的期望薪资,找到感兴趣的领域,化被动为主动,就是你来挑公司,而不是公司挑你了,另外我首先会考虑远程办公的,所以面试也都是远程,综合下来面试效率得以极大地提升。
还原真实面试场景
如果要具体到面试题,说实话,不同企业不同面试官不同职级不同轮次都不太一样,不过正常情况下都是基于你简历提到的那些技能点提问,比如简历写了熟练掌握Python,那就有必要熟悉下装饰器、闭包以及多线程等,再比如提到了解Ngnix,那正反向代理的区别肯定是要知道的。然后就是根据你过往所测试的业务去提问,一般会挑跟你面试岗位所要负责的业务关联性最高的,或者你最熟悉的,你需要熟悉业务的整个流程,以及底层服务的调用关系,主要考查你对业务的熟练度以及深度等。最后就是根据你写的测试框架和项目提问,比如框架解决了什么问题,涉及的模块和设计思路,难点是哪块,哪些地方还可以优化等等。
不知当讲不当讲,大概率还会有我最讨厌的一种题目,那就是假设一个场景,让你对此设计测试用例,面试官往往还会补充一句,不用太细,那样会影响面试时间,当我听到这儿的时候真心想来上一句国粹,在那短短的几秒内我真的很难设计出什么测试用例,除非它是个登录框(手动狗头),我能按各种测试方法理论给你扯出个几十条,但往往都没那么简单,或者说过于简单了,简单到这种场景我平时基本都不会写什么啰嗦的测试用例,测就完事了呗,言归正传,如果真的遇到这种问题像我一样答不上来几句,建议在反问环节请教一下面试官,不要像我一样把这茬儿给忘了,以至于现在还不会答,所以……这种题出场率真的很高,但我也只能帮到这儿了。
关于算法,在我看来这东西本质上是用来筛选那些没有实际工作经验的应届生用的,就像大多数公司卡学历一样,我们都知道学历的高低和能力并不正相关,但竞争同一岗位的人如果太多的话,终归要用某些条件来过滤掉一大批人,另外就是大厂的偏爱,而我对大厂并没有什么执念,所以也就没必要刷什么力扣之类的,而且30k以下的测开岗对算法貌似也没那么高的要求,大可不必浪费太多精力,据我所知,现在大厂在选拔人才时,也越来越反感那些张口就给出BugFree最优解的刷题选手,除了能证明他有备而来,态度还不错,其他什么也证明不了,听懂掌声。
除此之外,我觉得我的个人网站(准确的说是笔记博客)在某些时候也起到了一定的作用,曾经有大佬通过我在招聘网站遗留的博客链接,看了我写的内容,然后又找到我的GitHub给我发了真诚地职位邀请邮件,甚是惊喜,不过我没有珍惜那次机会,因为当时还没有跳槽的计划,就不展开讲了。我想说的是,尝试把自己学到的东西总结分享输出,于人于己都是好事,但我很反感那种不思考直接复制粘贴别人东西的,完全就是在制造互联网垃圾。
回到正题,当你顺利或者磕磕绊绊地通过了一面二面甚至多人同时面的技术面之后,最后就是HR面了,也就是谈薪资,文章开头提到我薪资这块没谈好,导致最后离期望差了一丢丢,郁闷了好一阵子,主要原因就是我忽略了它的重要性,以为不涉及技术压根儿就没准备,本来是视频形式的面试,耳机突然没电了,然后临时改成电话,在外面冻的哆哆嗦嗦的,面对人力同学一顿基操,很快就被绕进去了,也反映出了自己的谈判能力太差,我本身就社恐,基本每次面试都很难发挥出真正的实力来,除了怪自己也没什么好抱怨的,其实手里不止这一个Offer,不过确实是岗位匹配度很高,所以谈的着急了一些,以至于还被人力当场夸了实诚,现在想想,可谓是伤害性不大侮辱性极强。
最后我想说,测试开发工程师本质上还是测试,而不是开发,之所以要求有代码能力,是希望我们在工作中可以用它去解决问题,可以用不同的工具,或者自己创造工具,但它也只是工具,重要的是解决问题的能力。而不是使用过多少工具,所以不要陷入某个工具的细枝末节里无法自拔,遇到问题钻牛角尖儿,搞懂它们的底层原理和技术架构才是正事,比如TCP/IP模型,比如PO模式等,以上只是我个人的一些浅薄认知,仅供参考。
最后的最后,感谢霍格沃兹测试开发学社,很久没有这么认真的写过东西了,愿读到这里的你前程似锦,生活不止眼前的苟且,还有诗和远方的田野。