最近正是一年一度的找工作高峰期,而我作为公司的面试人员,也见了不少应聘者。总体感觉,大家对测试工程师认识不够,不太明白这个工作是做什么的,发展方向以及发展空间什么的。所以今天我们就抽个空,闲聊一下测试工程师。
一,测试工程师的历史
我算是接触互联网测试工作比较早的一批人了,在 2010 年研二实习的时候就开始在一家加拿大的企业做测试开发工程师了。2012 年毕业的时候,貌似互联网行业开始有专职的测试人员,而且不少中小型公司还没有专职的测试人员,程序的质量由开发人员保证,产品进行简单的验收。
就算是公司有专职的测试人员,地位还是比较低的,貌似各种人都能来指挥测试人员的。产品来压测试时间,开发也来压测试时间,总感觉到测试人员什么都不会,而且没有什么好测试的。可是一旦出了问题,都会怪测试工程师没有测试到。
随着用户对产品的质量要求越来越高,公司也就注重测试工作了,各个公司开始组建自己的测试团队,对测试人员要求也开始变得越来越高。测试人员在不少公司的地位有所提高,能把控项目进度,提出不同的意见。慢慢的就和国外的企业接轨了,我实习的时候加拿大的公司的测试地位非常高,测试说测试通不过,谁也不能上线了。
二,测试工程师的来源
由于测试一般是根据产品的需求,从用户角度来验证开发做出来的程序或是产品是否符合需求,要求门槛比较低。也由于要借鉴不同行业的人来验证产品,所以功能测试人员来自己各行各业,也没有高学历的要求。一般应届毕业生是新加入测试行业的主力军,他们年轻有活力,还是比较合适的。
后来大家看到互联网的测试工资待遇还是不错的,而且门槛比较低,所以很多考虑着转行来做测试;或是其他工种,如泥瓦工,厨师,销售等等都通过上几个月的培训班,来加入到测试工程师这个行业。此处不是说其他的工种不能做测试工程师,只是在说明各个行业目前都有转测试的趋势,竞争压力还是挺大的。
三,测试工程师的分类
网上或是书上我们会看到很多类似于黑盒测试,白盒测试,灰盒测试等等吧,实际上这些儿只是书面上的分类,真正的公司中完全不是这么回事?
在互联网公司中,测试工程师的分类如下:
(1)功能测试工程师
(2)性能测试工程师
(3)安全测试工程师
(4)自动化测试工程师
(5)测试开发工程师
(6)高级测试开发工程师
(7)测试专家
当然,如果按层次来分的话,应该是如下:
第一层:(1)功能测试,按需求检测开发的产品是否符合需求。
第二层:(2)(3)(4),这层的测试人员需要熟悉使用一些儿工具,开源的框架,借助于简单的脚本来完成对被测对象做性能,安全和回归测试工作。
第三层:(5)(6),这层测试工程师需要通过编码,或是对开源的框架,工具进行二次开发,开发测试工具,测试平台等来解决前两层测试人员工作中遇到的问题,提高工作效率。
第四层:(7)测试专家,就是能够发现测试领域问题并解决某个领域的问题的人,同时还需要具有这个领域的系统化的知识体系。这个比较难达到这个级别,需要的掌握的东西还是比较多的。
行情分析:
(一)目前第一层测试人员最多,从 12 年加入到测试行业,到现在为止已经具有相当一部分人了。而且先前加入的人员,已经工作了三四年了,已经达到了瓶颈,业务比较熟悉,技术上没有提升。同时,不断有应届生或是年轻的小伙伴加入,对老人冲击很大,而想换工作的时候,又没有优势,非常麻烦。
(二)第二层的测试人员,貌似很高大上,借助于一些儿常用的工具,开源的框架,来录制脚本,编写自动化测试用例,然后接于到 jenkins 中实现持续化集成。好牛的感觉哟,其实不是这么回事,不管我们是使用工具还是开源框架,我们都是在使用工具的。一旦工具出了问题,或是消失了,收费了等不可控制的原因吧,我们就失去了优势。而且入手还算比较快的,通常牛人带你,或是参加一个专项的培训班,一两周就能入手。此类人正在慢慢地变多,而且也渐渐地失去了优势。
(三)第三层人现在的需求量比较大,但是相应的人员比较少。因为这类人需要有一定的编码能力,而普通的测试人员具有编码能力的不太多,计算机专业的人员有了编码能力就去做开发了。结果留下了这个真空地带,这个地带的人待遇相当不错,人员少,建议大家往这个方向发展。
(四)第四层人就比较凤毛麟角了,也是我们所有的测试人员努力的方面,我们就不过多介绍了。
四,目前的测试技术介绍
目前自动化测试比较热,我们就先介绍自动化测试,然后再去简单地介绍一下其他的测试。
自动化测试:
(1)WEB UI 自动化测试:主流的开源框架是 Webdriver2.0,先前还是 selenium 1.0,Htmlunit,经过社会上的实践,现在就只剩下 Webdriver2.0。而且这个开源的框架支持主流的语言,如 python,java,php 等,借助于 Selenium IDE,Firebug 等工具,完成对 Web UI 的自动化测试。
(2)API 或是服务的自动化测试:接口自动化测试主流技术是 python 的 urllib2 和 requests 模块,phpunit 也可以用来做接口自动化测试,java 在支持接口自动化测试方法有点儿弱,需要做一下二次封装。由于服务出于安全考虑,各大公司都会自己开发相应的服务框架,所以服务的自动化测试则是公司自己开发的框架比较多。如 58 赶集的 SCF 服务框架下开发的服务,则需要 ATF 框架来进行测试,所以就不能列举出服务的自动化测试技术了。
(3)移动自动化测试:移动自动化测试指的是 APP UI 自动化测试,后端已经由上面的接口和服务自动化来保证了。而 APP UI 自动化测试主流的框架是 Robotium 和 Appium,因为 Robotium 只支持 java 语言,并且只能对 Android 系统进行测试,所以没有 Appium 应用的广。Appium 支持 IOS 和 Android 系统,支持 java 和 python 语言,是主流的框架。
性能测试:
性能测试我不太了解,不过目前主流的工具是 LoadRunner 和 Jmeter。利用这些儿工具来根据需求,录制脚本,进行压力测试。还有需要对 Jmeter 进行二次开发,以完成对自己业务的完美支持。当然,还有其他很多的性能,如:http://www.cnblogs.com/EthanCai/archive/2014/05/11/3721656.html
以后对移动端的性能要求也比较高了,新出的 App 需要支持各种型号的机器。高端的机器需要支持,低端的机器也同样需要支持。以后移动端的性能,应该算是性能测试的新方向。
安全测试:
需要专业技术的东西,应用场景不是特别广泛,表示不了解,需要的同学可以去网上做专项调研。
测试开发:
测试开发是介于测试和开发之间的工种,测试开发是针对测试的开发,也就是说测试人员是测试开发的产品,他们有任何工作中的需求。测试开发人员需要积极响应,通过开发相应的工具,平台来解决他们遇到的问题。
当然测试开发要求也比较高,上述的开源框架都需要深入了解,java,python,shell,ruby 等语言的使用已经不是问题,CSS,jS,HTML 等前端的东西也要熟练使用,接口,服务的开发也是常事。在此阶段各种技术应该就不是问题了,你需要的就是解决问题的能力。
好了,就闲扯到这些儿吧,这是我在工作中得到的一些儿经验吧!现在功能测试已经饱和,自动化测试人员日渐增多,测试开发需求量变大。一个好的测试人员,要有明确的发展方向,有计划地发展自己,不能跟着需要求走,走高消耗的路线!