首先要感谢那些嘲讽我代码写的烂的人,五年开发经验嘲笑刚出校门踏入社会的我,让我放弃了开发工作,走向测试的康庄大道。此外,曾经的开发经验对我测试工作的帮助是无与伦比的。数据库,编程语言,liunx,环境部署维护,程序打包,参与代码走查,专项测试,性能分析,抓包工具的使用等一系列让很多测试人员头疼的事情并没有发生在我的身上。一学就会,一点就通,举一反三。
我为什么要选择测试工作?
也许我成为不了一个好的开发,但是我会成为一个好的测试。因此我放弃了成为一个优秀开发者的机会,转身投入到测试工作中。
一周成为一个初级测试工程师。
我转行了,从开发转到了测试,为了应聘上测试工作,我用一周的时间把大学里的《软件工程过程》和《软件质量管理》两本书看了再看,翻了再翻。结合我之前的开发经验,我对软件产品的认知到达了一个新的高度。我也终于明白了以前工作后的学长们说的,“以前我着重与技术之类的书籍,等我工作一段时间后,我才发现我在大学中没有好好学习《软件工程过程》是多么无知,多么愚蠢。”
想要成为一个初级测试工程师,边界值,等价类,场景法,因果图,流程图等基础的用例设计方法是必不可少的,结合他们来设计测试用例,尽最大的可能确保测试不会遗漏场景。数据库能够掌握基本的增删改查,liunx系统的常用命令等也是必不可少的。
初级测试工程师掌握的技能:
- 测试用例的设计
- 数据库
- liunx系统的常用命令
- 抓包工具的使用
- 沟通能力。
无论是开发还是测试,起初工作时如果能够进一个工作流程完善,技术完备的公司对你的职业发展是百利而无一害的。首先,你能够学习到软件从需求到运维的一系列的流程,什么时间需要做什么事情,虽然有些步骤可能觉得有些繁琐,但是不能否认它产生的效益和起到的良好的规范效应。其次,无论哪一种软件开发流程都能够帮助你更好的理解软件的周期,如果从一开始就能够了解并接触到整个软件从无到有的过程,对今后的职业发展不言而喻。
半年成为一个中级测试工程师。
当我入职之后,我开始了点点点的工作,整体就是写用例执行用例。等我跟整个团队熟悉之后,我利用周末休息的时间,把整个项目之前的所有需求和用例看了一遍。由于是小公司,文档很不完善,遇到看不明白的需求文档我都会记下来,等到公司之后询问产品经理和对应的开发人员。就这样我大约利用了一个多月的时间看完了项目已有的所有文档。之后我又用了一周的时间熟悉数据库中的表,搞清楚他们的表结构,关联关系。跟开发人员了解测试环境服务的部署路径和启动顺序,主动承担了测试环境的部署工作(测试环境的部署原本就应该是由测试人员维护,由于同事的态度问题,一直由开发人员维护,为此我与开发人员搞好关系,将测试环境的部署掌握到自己手中)。
由于我又编程基础,测试团队中有一个大佬再搞自动化并维护,近水楼台何乐而不为。于是我大学的时候自学过python,虽然忘得差不多了,但是捡起来还是很快的,工作之余,我就开始在B站上学习自动化测试,有不明白了先请教搞自动化测试的同学,还是不明白的再请教大佬。慢慢的大佬认可了我的能力,开始带我维护项目的自动化代码,同时教了我很多视频和书本上学不到的东西。不就大佬辞职之后,老板让我接手并维护自动化项目。
原来的自动化项目只有web端,后来我又用appium实现了app端的UI自动化。自此我与自动化测试结下了不解之缘。我可以毫不要脸的说,UI这一块所有的问题我基本上都遇到过了。
中级测试工程师需要会哪些技能:(除了初级的技能之外还需要掌握)
- 一定的专项技能:例如:app的专项测试,性能测试的分析,自动化技术等
除了需要掌握的技术之外,还要有其他的能力:
- 能够带领新同事尽快的融入到工作中来。
- 了解产品,风险的预见性和如何规避。
- 文档能力。
- 能够带领小的团队负责项目的一部分内容或者整个项目。
像高级测试工程师挺近
当我的能力已经完全胜任了中级测试工程师的时候,我开始学习一些测试理论,参加过几次思特沃克的线下沙龙,参加过他们的线上技术分享,当然并不是参加过几次沙龙,技术分享就可以了,而是要根据他们分享的内容来学习一些自己不会的内容。从我开始实习到现在已经三年多了,前一年我一直再学习一些我不会的技能,后两年我基本上都在研究测试的理论和思想,从测试左移到测试右移,从devops到testops,从测试策略到测试风险的规避,学的越多就会发现自己不会的越多。只能不断的充实自己。
高级测试工程师具备的技能:
- 掌握一门或者几门编程语言,例如python,java,shell等。
- 能够根据实际情况制定合适的测试策略。
- 能够协调团队人员,保证高质高量的完成测试任务。
- 利用一切手段来提高测试的效率。
现在我所在的团队,我们在开始追寻一种低成本的敏捷,使用yapi平台来进行API自动化,使用rebotframework来进行app的UI自动化,使用API接口自动化和UI的契约测试来回归整个项目。既节约了成本,又节约了时间提高了效率。
同时测试的左移和右移同步进行,产品的需求必须由测试人员一起评审通过后才能确定,同时要制定好验收标准 。否则打回。当产品上线后,每天取生产环境的日报进行分析,每个批次取生产环境的awr日报进行分析。效率大幅度提高。
前车之鉴:
前进的道路是曲折的,学习的路上有很多困难,以下是我的前车之鉴。
- 我有一个习惯,学习新知识的时候先要买一本相关的书看一遍,哪里不明白的圈圈点点,但不做深究直接跨过,等看完之后再去网上找视频找文档学习。相对于文档我更喜欢视频类的资料,因为讲解视频中会有讲解人员的个人经验。视频学习推荐B站和慕课网。慕课网的课程质量都很高而且没有人整体催促你学习,B站的课程很多很杂,需要自己甄别,好处是免费的,如果外语很棒的话,可以找一些老外的视频观看,毕竟编程语言是老外搞得。
- 学习新知识的时候,要讲究够用原则。不要过度挖掘,非要学的特别深奥,这样是不可取的。
- 万变不离其宗,一类工具的原理基本上都是一样的,使用方式也大同小异,学习完一款工具后在横向对比学习,你就会学会这许多的这一类工具,结合实际情况来选择一款合适的工具来开展工作。
- 初始要选择一样技能学习到精通,不要广撒网,百门通不如一门精,当你精通一门技术之后再着手学习其他技能。例如:我根据的实际情况,我选择的是自动化,首先学习的是工具自动化,后来在学习代码自动化。横向对比,纵向对比总结优缺点。无论是数据驱动还是关键字驱动,精准测试还是单纯的契约,都吃透玩精。
- python简单易学,如果要向学习一门编程语言可以从python入手,菜鸟教程就是一个不错的网站。
- shell是我们提高效率的有效工具。
- 我看过的觉得比较不错的书《全程软件测试》《软件测试技术指南》《测试架构师修炼之道》。
- 精通一门测试技能之后要开始注重测试的广度,例如app的专项测试,兼容性测试,安全测试,性能测试。不一定要精通,但是至少能够使用一款工具来进行相关的测试,将产出报告交付给开发人员进行分析。
- 如果你的产品经理不太专业,那么你要多多考虑用户的隐形需求。
个人对于非计算机相关专业想要转行做测试的一点建议:
- 由于软件测试的门槛相对于开发来说较低,非计算机专业可以通过培训或者自学达到测试工程师的从业标准,如果你已经超过30岁了,那么我不太建议你转行。但是对于大学刚毕业的同学,测试工程师是一个不错的选择,毕竟现在测试工程师还是非常紧缺的,大多数测试从业者都是从运维,实施转型过去做测试的,测试思维比较缺乏,年轻还是很有竞争力的。
- 如果学习比较吃力但是经济基础比较好,参加一个培训还是不错的选择。不想花钱的可以去B站学习,B站上的视频都是免费的。建议学习的时候开1.5倍速率,他们讲的都比较墨迹。
- 《软件工程与过程》,《软件测试技术指南》比较不错,初学者可以看一下,等工作经验丰富后可以看朱少民的《全程软件测试》,这一本书我已经看过不下5遍了,每次看都有新的收货。
- 工具不要贪多,先学一个就好,postman,charles。
- 测试用例的设计非常重要,一定要熟练地使用掌握测试用例的设计方法。
- 不要只考虑正向测试用例,逆向测试也非常重要。
现在我所掌握的技术:
- 各类工具使用:postman,charles,jmeter,appscan等。
- 掌握编程语言:python,java,shell。
- 精通web和app UI,API自动化技术,包括工具自动化和代码自动化。
- 掌握测试环境的搭建和维护,并利用shell脚本减少维护的时间。
- 精通测试流程,测试理论,测试策略和测试方法,测试流程的优化。
- 掌握CI/CD,精通测试框架rebotframework,selenium,appium。
- 精通测试左移,测试右移的方法。