今年是我进入测试行业的第十五个年头了,突然冒出个念头,希望把过往经历和想法想写下来。
故事的开始
2008 年,广州
大约 3、4 月份开始和舍友们一起去参加各种招聘会。虽然读的是所谓集应用数学和计算机技术与一体的信息与计算科学专业,考试成绩在班里面也还可以,但半读半混日子的心态下面(高考发挥和志愿填写失误,当时的学校其实并非自己的意愿,所以一直带着点自暴自弃的心态),真正的计算机课程其实没有太多的积累,实习也是跟着学院安排去一家工厂参观一下,实际的计算机积累基本上是零。加上当年年初开始的金融危机,就业形势越发不理想,导致到了毕业离校的日子也还没找到工作。
不停在当时的各个招聘网站上无差别的海投,也偶尔参与了一些面试,但是都没有下文。直到 10 月份,收到某公司通知,我去面试一个助理测试工程师的职位。虽然当时对测试一无所知,但好在当时的英文笔试题(公司做的是海外的业务,需要用英文进行书面沟通;大四刚考过了六级,加上当时考研也对英文有持续复习,所以这部份笔试做得还不错)、逻辑测试题(四年的数学课程起到了作用)都做得不错,面试时虽然对测试一无所知,但好在面试官看我逻辑思维各方面表达都还可以,所以给我发了 offer。
于是我误打误撞地,在2008年10月29日这一天,开始了自己的测试工作生涯。
从零到一
第一家公司当时的主要业务是一个面向北美学生贷款业务的系统,之前的几年一直在非常好的盈利中;结果正好碰上当时美国的次贷危机,整个产品在正面打击之下完全地垮了。于是在我入职的一年之内,整个测试组的人数从 10 几个骤降到了 2 个,只剩下我和另一位天天说懒得换工作的前辈。也是这样一个契机,我突然从一个新人,要去陆续承担不同的业务模块。
公司一直在持续对一个产品进行迭代开发,并且针对不同的客户有对应的定制化需求和部署维护工作。也由于这个契机,可以让我在第一份工作里面,就有机会对这个产品的整体功能和每个模块的生命周期有了全面了解的机会,以至于直到今天,我还能清晰记得这个产品的主要功能和业务流程。
这一阶段的收获和体验:
培养了我对每一个新功能、新模块都从整个产品的角度去了解和思考。此后的每一个项目,无论是长期还是短期的项目,我都能在很短时间里面去了解整个项目的需求背景,从而进行快速地测试分析。
由于人员的流失,让我有机会很快地参与到主要的项目中,独立承担项目的测试,从而了解和掌握整体的测试流程;之后团队重新扩张的时候,我也有机会可以给新同事去介绍和讲解业务,并且对他们的工作进行分工和管理,积累了一些初始的管理经验。
团队在人员骤降的情况下,停止了数量庞大的基于 QTP 的自动化测试用例维护;但是在一年多以后,新的主管重启了自动化测试的工程,我也参与了全新的基于 c# 的 code UI test 框架的自动化测试框架建设,第一次体验了自动化测试的魅力。
第一次失败的跳槽经历
在团队中度过三年之后,在外面薪资的吸引之下,2012 年初的我鼓起勇气跳出舒适圈,尝试跳槽。当时对自己的职业生涯并没有考虑得太仔细,所以单纯由于薪资的吸引,跳槽到了广州某外包公司,并在一周培训之后被外派到某商业银行做中间业务平台的测试。
虽然薪资上比上一家公司高了不少,但这份为期一年的工作给我留下的更多是苦闷和难受的回忆:当时团队环境下外包人员低人一等;工作场地管理严苛(迟到一次就要被抓去通报批评;到了下班时间也不能按时走,没事做也要扮忙到七点);整体工作流程推动困难(每次有环境部署的需求,都要打电话求环境组的同事);单纯的点点点工作,没有任何测试技术使用和提升的机会。
于是在一年后,再次选择了跳槽。
跟对人,步入正轨
2013 年夏天,投递简历之后到了另一家公司进行面试,遇到了测试部经理松哥。一次非常愉快的面试经历,整个过程基本上是与和蔼可亲的松哥在轻松地聊天,聊自己的前两份工作经历,聊自己对测试的理解和感想。然后在一个月后顺利入职。
入职的第一天就被松哥安排到了一个公司内部的项目中,带着两个比我入职早,但是刚工作不久的同事开始做这个项目的测试。也许是前一份工作的苦闷,让我在新公司的工作中重新焕发了热情。
公司的业务,除了主要的项目外包业务(基于开源技术的航空管理系统的研发和实施)外,也在多方面发展大大小小不同的外包项目。在这三年里,让我有了新的积累:
前前后后参与了不下 10 个大大小小的项目测试,有面对航空公司的大型传统业务系统和内部服务系统(也就是需要适配各种 IE 浏览器的系统 ),也有当时新兴的互联网 app 项目和 H5 项目;有试过连续几个晚上去甲方的机房里面去参加部署,也试过和团队的开发小伙伴们通宵完成一个发版,回家刚睡着,就被刚上班的甲方经理电话追杀的经历;曾经忍不住和某些趾高气扬甲方人员当场吵起来,听过某些甲方人员当面说:这个问题不解决就投诉你,也试过单枪匹马跑去某个甲方公司收集需求,临走还被甲方经理硬塞了个红包表示感谢。各种不同的体验,也学习到了很多和不同角色、人员的相处之道。
在松哥的组织之下,我也在部门同事的分享中接触到了各种不同的技术,如开源的自动化工具,性能测试工具 JMeter 和 SoapUI,和一些安全测试工具,等等。也由于不同的项目需求,自己也开始尝试寻求不同的工具来帮助解决项目的测试问题,比如用 SoapUI 做性能测试,用 python+selenium 做 UI自动化等等。这也给我之前的工作带来了更多的引导和自信。
新的挑战
2015 年的 8 月,我接受前公司同事的邀请,加入了广州一家游戏公司,参与到了该公司的国际平台部,担任测试主管的职位。这是一个新组建的团队,之前一直没有专门的测试人员;我虽然名义上是测试主管,但除了中间一年是带了两位刚工作的小伙伴之外,其他时间都是一个人在面对着整个平台从后端到前端,从 Android、iOS SDK,到 H5 小游戏平台,从后端微服务,到大数据数据处理分析平台的所有测试。相比于的经历,接近四年的时间里我收获了更多:
从无到有建立起我们的测试流程和规范,包括开发的代码分支管理,需求生命周期管理,版本测试发布流程等等。我自己也从最开始的迷茫慢慢变得清晰,自己对质量管理流程的理解也上升到了新的一个层次。
从无到有建立起我们的自动化测试体系。包括:
- 基于 python+selenium 的 web 管理后台和 h5 小游戏平台的自动化测试框架,将大部分的回归测试工作从手工通过自动化覆盖。
- 基于 python+appium(后面替换成 @codeskyblue 大佬分享的 U2 框架)搭建起针对 Android sdk 的回归测试。这部份用例数量不多,也没有覆盖 iOS 部份,但对我来说说一个新的尝试,特别是基于 U2 和 atx server 实现了内部简易版的远程测试机管理平台,极大地提升了我的 python 代码水平。
- 基于 python+unittest 的接口自动化测试框架,实现了进一步的分层测试。也是对我个人而言是第一次的接口测试体验。
- 使用 python 编写的造数脚本,提升了后台大数据分析工具的测试效率。
- 基于 flask 搭建了一个简易版的内部测试平台。
- 尝试引入 docker 对上述平台和工具进行管理和部署。
- 由于一直对整体的业务结构都非常熟悉,所以在产品的整个开发流程中都可以全程参与,也提出了很多自己对数据结构的设计和提议,也很高兴最后得到了采纳。另一方面在自己开发测试平台和测试框架的过程中,也帮助自己提升了对整体框架设计的理解。
在这个过程中,一方面得益于部门前后几位主管的引导、鼓励和支持,另一方面也是这个阶段我第一次接触到了 testerhome 社区,帮助我解决了上面工具开发中遇到的大部分问题;这一阶段我也可以更频繁地参与到社区中,将自己每个时期的收获和产出 (2016-2019 年之间) 都在社区进行记录和交流,拓宽了我的眼界。