趁着昨晚空闲和今早的时间,编辑这一篇帖子,写下当初我自学软件测试走的弯路,希望大家引以为戒,不要多走前人走过的弯路,浪费时间。先简单聊一下就业,我8年前毕业于西电,关于毕业选择吧,第一份工作真的很重要,如果可能大厂是第一选择这是没错的,即使进不了大厂也尽量选择一些有知名度的大企业。在后来的面试过程中,真切感受到学历和就业经历带来的加分。
另外一点要考虑的就是自己的职业规划,很能理解刚刚毕业的同学,甚至是还未毕业的同学,很难有个长远的规划,因为认知有限。这里建议可以先从主流做起,后面有经验再转,另外也可以找大牛多交流,你也许觉得大牛高高在上,很难交流,但实际并不是这样的。大牛们想做的事情有很多,所以他们最宝贵的就是时间。
到今年年底结束,我做软件测试已经八年(3年功能,5年自动化)的时间了,现在月薪37k已经算知足了,但是距离我年薪百万的目标还有很长的路要走,而以后靠的不能仅仅是技术,更是一些管理和带人方面的知识和头脑。因为曾经自己自学测试的时候走了不少的弯路,今天想做下总结。对有转行想法的朋友、刚刚毕业的同学分享一下经验,能够让你对这个行业有个大致的了解和对以后的发展有所规划,不会像是个无头苍蝇一样毫无头绪,东打一枪,西放一炮,最后说这个行业不适合自己!
一、近10年的老测试先告诉你软测是做什么的?
目前我们能接触到的金融产品、游戏、社交、汽车、大数据、学校教育、本地化产品等等都离不开软件测试,因为这些产品由公司创造最终流向用户使用的。
软件测试是什么呢?
大白话:对公司保证产品正确性和安全性,对用户保证你用起来爽~~~
- 聊聊软件测试行业前景,给你来点小动力~
随着互联网的高速发展,手机和5G时代的来临,各种各样的软件应用占据了人们生活的大部分,所以,用户对软件质量的要求会越来越高。软件测试工程师在一个技术团队中扮演着不可或缺的角色,基本上每一个成型的互联网公司都是需要软件测试工程师的。不言而喻,软件测试绝对会是一个发展良好的职业。
- 行业需求
据中华英才网统计,目前软件测试人才的缺口在30万人以上,并以每年20%的速度递增,一线城市初级软件测试工程师平均薪资已达1万+,国内BATJ等一线大厂都在以高薪岗加紧争夺软件测试人才。 而软件测试的优点是相较于程序员入行门槛低,工资比一般行业高,所以大量的非计算机相关专业的人也都转行来做。
- 薪酬情况
软件测试的薪酬情况也能体现出其未来的发展预测,通过招聘网搜索,初级工程师6k-10,中级工程师8-15k,高级工程师12-40k。学长通过转行两年积累已经可以达到中级工程师的水准了。
我们先看看市场上招聘测试工程师都需要哪些技术:
一般企业对于桌面Web和移动app都是有需求的,对于测试计划, 测试方案, 测试用例, 缺陷, 测试报告等基础技能有较高要求。为了满足未来自动化测试需求, 企业对于测试人员的编码能力也有一定期望。
二、开始正题:零基础如何学习软件测试?
- 认知准备
在开始学习之前,首先要明确的是对于行业和学习的认知:
1、进入测试行业一定要学习一门语言,认为做测试不用写代码或者对于写代码比较排斥的,可以绕道了;
2、技术是你立足的根本,但是不要认为技术做到最强,就可以得到100%的尊重;
3、在不断学习的同时也要积极地参与行业内的交流,比如沙龙、讲座等,朋友内推比海投简历靠谱的多;
4、学历很重要,项目经验很致命,英语是加分项;
5、学习是长反馈、反人性的,不要期待短期速成,不要相信35岁失业的鬼话;
6、沟通能力是和技术同样重要的,放在任何行业都是如此;
学好软件测试学习步骤很重要,大部分新手对软件测试的成长路径并不了解,所以我们必须先了解目前市场都是需要学习什么技术,你所学的知识要有用武之地才行,紧贴时代的前沿。我们首先要了解自己应该学习哪些内容。
下面给大家一个技术学习成长路线,大家可以根据此参考,开始学习:
下面针对这条路线中比较关键的几点拎出来和大家说一下:
1)软件测试基础知识
这一阶段,我们需要了解软件测试的概念,掌握软件测试是干什么的,熟悉软件测试的基础理论和测试方法,了解测试的生命周期,测试流程,测试用例的编写方法,在项目中的日常工作主要做什么等等。需要掌握以下两点:
软件测试相关文档的学习和BUG提交规范的学习
1、了解测试计划、测试方案、测试策略、需求文档、需求评审、测试用例设计方法等
2、了解bug的定义、分类、bug的生命周期,bug提交规范,bug管理工具和项目管理工具的基本使用(禅道,jira,tapd,readmind,testlink等)。
需要学习哪些测试工具
1、xmind/mindmanage思维导图、svn/git源代码和文档管理工具、抓包工具(fiddler、charles:掌握基本抓包用法,弱网请求、接口请求拦截、响应结果篡改)
2、学习linux基本操作,掌握常用命令,学会环境部署的大致操作
3、学习数据库的基本知识,掌握增删改查的常见操作
4、了解一些简单的html、css、javascript相关的内容,有个概念就行
5、结合以上工具,再运用到项目中,回过头来重新再去测试一遍(不要觉得枯燥,测试经常干一些反复琐碎的事情,需要耐心和细心)
2)编程基础
这一阶段建议大家选择Python 或者Java入门,首推Python,学完再学Java,语言的很多思想和语法都是相通的,学完第一门,第二门就很容易上手了。
3)手动转自动
在我们学习了一个语言后,我们需要不断熟悉精通这门语言,可以结合Selenium学习Web自动化测试,通过脚本,会快速提高语言基础知识的理解和运用。
4)自动化脚本开发
这个阶段我们需要会自己写出测试用例了,如果Selenium自动化脚本开发,你起码要完成100个自动化测试用例,才能做到熟练运用。
5)了解和接触框架
这里的框架指的是测试的框架,这一阶段我们需要继续深入研究Selenium和一些自动化测试框架的知识,其中包括,单元测试框架,Java中Junit或者testNG,Python中unittest
6)设计简单测试框架
一个测试框架大概包括测试对象,测试组件,基础类和函数,工具类,测试数据,异常处理,测试日志,断言和测试报告等这些模块。
在设计测试框架的时候,我们要尽可能的将这些模块有机的结合起来,将脚本能够有效的组织、连贯应用起来,提高测试脚本的可维护性和可读性。
7)常见设计框架
由于应用系统技术五花八门,几乎没有测试框架能应用在多个项目上并体现出应有的价值,所以一般情况都需要根据项目自身情况来定制化我们的测试框架,常用的有数据驱动,关键字驱动和两种方式的混合。
8)Linux和数据库
当自动化测试到一定深度,就需要用代码连接数据库去测试,所以常见的linux和shell脚本是有必要学习的。
9)版本控制和持续集成
持续集成指的是,频繁地(一天多次)将代码集成到主干。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。
根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。同时,集成可以帮助我们每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。
10)Web前端(可选)
我们可以学一些前端的知识,来帮助我们之后更好的完成工作。
11)写一些小程序
通过一些小程序来帮助我们更快的确定自己的技术能力在哪个层面。
这个学习路线的后面几个层面对于初学者而言是有些困难的,但是如果你了解一定的开发和有扎实的代码基础,在未来,成为一名测试开发会更容易些,当然,如果完全按照路线图所学会,你的能力一定在许多测试员之上,这一点是毋庸置疑的。
三、项目的重要性
很多初学者看完一些视频,学过一段时间就说自己“会了”。这里我需要给大家纠正一个问题,希望每个学习软件测试的知友都能明确学习的中心是什么。 其实在我看来,学习测试从来都不存在会不会这样的说法。学习测试不同于初中学的数学、物理、化学,记住一些公式,做同样一种类型的习题,就证明类似的题型你会做了。 测试只讲技术能力是什么水平、什么级别的,最能证明技术水平处在什么阶段的,就是在做项目的过程中,研发好的互联网产品,写代码的质量怎么样,排错能力怎么样,找BUG的能力怎么样,构思功能模块整体布局的能力怎么样等等。 做作为初学者想要达到入门的水平,就是自己具备了一些简单项目的编码能力,初学者最重要的一点就是培养自己的测试思维,每一个程序都是不一样的,你不可能都背下来,也不是靠死记硬背的,你只有能去独立编写一些东西的时候,才有就业的就会。
所以做项目的能力才能去衡量一个学习的水平处在什么阶段,而往往那些嘴上说“会了”的人,往往没写过多少代码,也一个项目做不了出来,这就是纸上谈兵,完全曲解了学习测试到底在学什么,也不知道应该往哪里去。
一个初学者在学习的整体过程中,必须要有两个能拿得出手,能写在简历上的项目作为找工作的资本,并且要对于这两个项目的前前后后相当了解,才可能最后面试成功,一个初学者在学习完所有内容后,如若还达不到可以做简单项目的水平,那么他整个学习过程还是白费,没有达到最终的学习目的,就是学习质量不过关。所以项目的重要性希望大家都明确,因为有太多初学者不知道最后学习的目的是什么,最后白白的浪费时间。
任何技能的学习都是建立在实践上面的,IT行业就特别强调项目经验。不练习,就像是花了半天时间去学习开枪的理论,结果根本没有机会摸枪,你觉得你打得准吗?想要学好软件测试,对技术有更深的理解,就一定要多去实操,没有熟练度的加成,你学的再多也只是纸上谈兵,一旦面对了真正的问题,你就会无从下手。
四、自身的学习心态
虽然学软件测试的人非常多,但是学习测试也不是一个简单的事情,换句话说它还是挺困难的,毕竟能出去找到工作,多则上万的工种。这些知识都不是随随便便就是任何一个人都能学会的。关于这个学习心态,希望提示大家要把重心放到“学习”这件事上,因为我发现有很多初学者都是像“完成任务”一样去学习,所谓完成任务就是“我把这些视频看完就能找到工作吗”“我把这些都学完就能找到工作吗”学完并不等于“学会”,这是两种不同的概念。
“你到底理没理解?”
“你到底能不能应用起来?”
“你到底用没用心?”
你自己应该是最清楚的,我发现那些把学习当做完成任务一样去对待的,这样的人没有一个是有耐心的,自己在心里欺骗自己“把这些视频看完我就能找到工作”,到了最后自己就逐渐明白,完全是自欺欺人,最后放弃说自己不适合学这个。其实揭开这些人的面具真相就一个:他们没有耐心学习,也不喜欢学习,这是以前经历造成的,是多年的习惯导致的。
所以正确的学习心态一定是把关注点放到学习这件事本身,你要学会这些知识,这些内容,这些技术,这是需要一天一天逐渐积累起来的,并不是短时间就可以达到什么结果。
PS:如果你对于学习没什么耐心,没什么兴趣,我劝你不要来学习软件测试。学习软件测试能保持坚定学习念头的人,技术行业是需要不断学习和充电的。或者说已经到了信息时代,不爱学习的人,很难有耐心去学习知识的人,在信息时代是混不下去的,任何行业都是如此,不学习不进步不紧贴时代的人就一定会被淘汰。
五、自学软件测试必须注意的问题
1、找不到合适而且优质的学习资源,学习难以下手;或者随意找了一些教程就开始学习,很容易学着学着就放弃了。
2、遇到问题喜欢死磕,不知道怎么寻找解决的方法,甚至连问题都描述不清楚,别人也无从帮你结局,导致经常被小问题卡住,学习效率低下。
3、理论知识懂了很多,但学了很久之后,却发现不知道该怎么把理论上的知识应用到项目中去,缺乏解决问题的能力。
4、看到视频上的案例演示,觉得好像很简单,但是自己去操作的时候依然很困难,没有一个整体的思维。
六、给自学软件测试的初学者一些学习建议
1.软件测试入门容易,但是这不是你认为它好学的理由,你怎样轻视它,它就怎样轻视你;
2.门槛低意味着容易入门,但同时也意味着要爬升的道路比较长;
3.看书解决不了问题,只是参考,书籍更新速度慢,信息传达单一,但是经典的终归还是经典;
4.不轻易推荐自学,这个还是要看人,自学非常容易钻进牛角尖,见过太多的“从自学到放弃”。
以上内容均由本人手写而成,完全站在初学者的角度来说,就是希望能用通俗易懂的语言让大家清晰的明白学习软件测试全面的学习内容,以及应该达到什么程度才能拿到一份软件测试工作的offer,希望可以给大家带来实际性帮助。
两个实打实的软件测试真实项目
一个web测试实战
一个接口测试实战
已经在阿里云服务器上搭建好了,只学习了测试理论没有实战项目练手的,为了解决大家这样的问题,我搭建在自己的阿里云服务器上,其实就和你们企业自己部署在你们自己服务器上完全一样,没有任何不同的地方。也就是说所有数据库相关的,所有环境依赖的内容你都可以去使用和去测试了。
需要这些实战项目,先点收藏这篇文章,查看楼底卡片找我,包括企业是如何在阿里云服务器上搭建测试环境也可以和我学习。