如果你不想转开发,转管理,转产品,或自己创业买煎饼果子的话。那么说明你是对测试是真爱。测试需要掌握的测试技术太宽泛了,所以,我们必须要选择一个方向。五年过去了,我想再试着写写对这几个方向的认识。  
  自动化测试
  自动化测试有广义和狭义之分,广义上一切使用工具或代码来代替手工测试都可以认为是自动化测试;不过,在测试圈中,我们一般狭义的来理解自动化测试,基于UI层的自动化测试技术。
  如果想做好自动化测试,我觉得测试人员应该达到一般开发人员的水平。如果是名普通的Web开发人员,想做好本职工作需要掌握一门编程语言 + Web框架 + 数据库;如果一名普通Web自动化测试人员,想做好本职工作需要掌握一门编程语言 + 单元测试框架 + selenium(注 :Selenium已经成为了做Web自动化的不二之选了)。Web开发人员想进一步提升,可能需要学习代码重构,设计模式,SQL设计与优化。Web自动化测试人员想进一步提升,也需要学习代码重构,设计模式,基于Selenium的二次封装等。
  所以,在我看来一名合格的Web自动化测试基本上等同一名Web开发人员的水平。只不过,后者写的是功能代码,前者写的自动化测试代码。
  除此之外,还有接口自动化、移动自动化等,基本上也等同相关开发人员的水平。
  性能测试
  性能测试,相信每个测试人员都或多或少的接触过性能测试。表面上看,它的入门非常简单,主流的LoadRunner和Jmeter都提供了录制脚本的功能,录制--> 设置虚拟用户数 --> 运行,然后一个性能测试完成了。笔者的首份测试工作的第二任务也完成一个性能需求;当时磕磕绊绊的花了三四天时间搞定,性能测试报告也做的有模有样。
  但如果想做好性能测试,我觉得测试人员应该达到一般架构师的水平,至少比一般的开发人员更了解系统的整体架构。
  当然,这个架构也分两说,对于一般的项目,市场上都有成熟的方案,比如LAMP,再加上Nginx和redis,也有很多成熟Web框架,所以,开发人员只需要根据业务需求把功能实现了好,除非是特别新的开发新手,犯一些低级的错误导致性能问题,一般的性能是验证当前系统的能力,增加服务器也是便捷的手段。
  另一类是对系统的性能有极高的要求,比如证券交易系统,银行系统,网上购票系统这些,这些一般用的架构和方案不是我们常见的了。那么,对性能测试人员的要求也非常高。听一朋友说,性能测试环境与线上正式环境是一模一样的配置,单这一点,一般的小公司也玩不起。
  所以,想成为一个牛x的性能测试人员,朝着的架构师的方向努力吧!好能到亿级用户、百万并发的项目和团队中磨练。
  安全测试
  关于安全测试,我知道很少,只能简单的谈谈。安全测试是主流中的非主流,“主流”指的是它是测试技术的一个主流方向,“非主流”是指在我看来,对这个技术的研究和学习没有什么固定的章法,想要有所成需要一些天资和悟性。
  曾几何时,我接触到第一位安全测试工程师,他教我们用AppScan工具扫描,晚上下班的时候开着扫描,第二天把扫描出的问题给开发人员分析。我以为安全测试不过如此嘛!
  近这家公司前后接触到两位安全测试工程师,人家基本不用工具的好么!前者给我们演示用SQL注入去拿到一个网站的后台管理员密码,还是觉得很酷的,对了,他的Python语言也用的66的。后者告诉我主要的安全手段是代码审查;你要对项目所使用的编程语言和框架里面的某些方法/函数非常熟悉,知道某些方法/函数在怎样使用时会存在安全隐患,单这一点我也觉得很难,这个方法我会用,我怎么知道在什么情况下引发漏洞?除非我遇到过。
  (题外话,我跟这两位安全工程师关系都挺好,前者一直是饭友,常常中午一起吃饭;后者旅游时常住一个房间,两人能探讨人生到很晚,可惜未得他们身上学到半点皮毛,遗憾!)
  白盒测试
  白盒测试给测试人员去做,有利有弊,整体来说,我不太赞同由测试人员完成。
  白盒测试的主要工具是单元测试框架了,这个真没啥难的,如果你一点编程基础,我可以一个小时把你教会。
  测试人员做白盒的优势是具备测试思维,在设计测试用例时考虑更加全面;但难点也很明显,和开发一样熟悉被测代码,这一点有难度,我在做接口测试的时候,曾花好几个小时去理解开发写的一个接口的逻辑,明显觉得自己智商有点不够用。而且,你可能需要同时熟悉2~3位开发人员的代码。
  开发人员去写单元测试,抛除“盲目自信”“没时间”“懒”等因素之外,优势非常明显,没有谁比自己更熟悉自己写的代码了,他们只需要掌握单元测试框架的用法和一些常用的测试方法,可以很快的把单元测试写完并全部运行通过,而且发现bug之后,修改起来也非常快速。
  所以,我觉得我们更应该教开发人员写单元测试,而不是帮他们去写。