应该学习那种软件测试技术和那些测试工具?目前比较通用的叫法及划分,主要是以下几种类型: 功能测试,性能测试,自动化测试,安全测试,接口测试,单元测试,额外专项测试(性能/安全测试本身也属于专项测试,只是经常会单独拿出来说)。可能不同的细分领域或公司有不同的叫法,但基本都涵盖在这里面。

软件测试技术

功能测试是最基本的,一般普通的测试人员都是从功能测试入门,一句话来讲就是对研发出来的软件进行功能点的验证(包括正常/异常的情况),判断它是否符合产品的预期,这个最重要的是要求对待测项目有足够的了解。

当然,这只是一个概括的说法,实际工作中根据公司流程规范的不同,操作起来会有较大的差异(有的公司流程完善,要求各阶段的测试交付件;有的公司没有流程,测试人员也不会写用例,直接测。当然各个公司有各自的做法,无需评论优略,适合就好)。

里面会涉及到软件测试的整个生命周期:需求了解--测试计划制定--测试设计--用例编写--执行测试(环境搭建)--问题跟踪--回归测试。

其中对于测试设计,里面有许多方法论,比如:等价类划分,因果图,边界值等等。这些是测试设计的理论知识,市面上有专门的书籍介绍,或者网上搜索一下也挺多,可以看一下。

除了测试设计理论,还应该掌握一些linux系统的基本操作,这个可能会在执行测试的时候进行环境搭建;另外像一些常用的请求工具(例如postman),抓包工具(例如fiddler)等都可以适当的了解一下。

工具技术是说不完的,最好是了解的越多越好,这个就是个经验问题。有很多东西可能一辈子都用不上,但是当要使用的时候,能马上想起来,可以使用这个技术或工具来帮忙达到目的。

性能测试,故名思意就是验证软件的性能是否达标预期。一般是基本功能测试完成之后才进行的,当然不是每个项目都必须要做,根据项目真实情况来决定。

目前网上提到性能测试,就直接是loadRunner,Jmeter等工具的介绍和使用,容易给人造成一种错觉,以为性能测试就是工具的使用,这是比较片面的观点。测试是通过各种技术手段,进行的一项有计划有目的的活动,并不是某个工具的使用。

前面列举的这2个性能测试工具,他们的名声很大,通过使用他们,能快速的帮助进行性能测试,因此才形成了这样的情况。

性能测试一般涉及到几个方面:施压工具,测试脚本,数据采集分析,问题定位。

施压工具可以选用上面提到的2个工具;在某些特殊的项目,可能无法找到合适的施压工具,这个时候可能就需要测试人员(或项目组出方案),自己写对应的施压代码。

测试脚本用上面的2个工具可以录制,但是录制的东西不够灵活,大多数情况下还是需要测试人员自己写代码的。

数据采集,主要是在性能测试过程中收集服务器,应用响应时间等相关的数据,便于对整个压测过程进行评估分析,判断是否有问题。大一些的公司可能一般都有类似的监控系统,可以直接查看。没有的就可能需要测试人员去使用一些第三方软件,安装到服务器。

从上面的介绍可以看出,做性能测试比单纯的功能测试涉及到的东西要复杂很多,他更考验一个测试人员的综合能力。不仅要分析待测场景(测试设计),还要自己准备测试脚本(工具使用,甚至具备研发能力),搭建环境,问题分析。

软件测试技术

自动化测试,可以简单的理解为将人工手动测试的工作,通过工具或代码的方式转化为计算机自动运行的用例,帮助测试人员进行回归测试,从而提升测试效率。自动化测试的价值更多在于回归测试和系统监控。

自动化测试可以运用在不同的层次,例如基于UI的自动化,基于接口的自动化,再底层可以涵盖单元测试。

自动化工具非常多,常见的webdriver,selenium,qtp等等,可以根据自己的需求适当的了解。这些框架仅仅只是工具而已,它不代表自动化测试。

自动化测试要求可高可低,简单的运用工具做做参数化就行,基本不涉及代码;复杂的项目中,往往测试人员都会自己写一套自动化测试框架,更适合自己的项目。

接口测试一般也是运用自动化测试工具,或者自己写代码的方式来测试,不再描述。

单元测试,普遍都是开发来完成,当然也有公司存在专职的白盒测试人员,这个要求就比较高,完全是写代码来测试。

另外,近几年许多公司都设置了测试开发的岗位,他不仅需要了解基本的测试技能,还得有一定的开发能力,除了完成日常的测试工作外,还需要关注测试工具等偏开发的内容,上面的性能测试和自动化测试中也提到了,复杂项目的情况也需要测试人员进行一些工具开发,以满足测试需求,这种测试人员就和开发测试很类似。

测试职位入门相对容易,但要做的好,还是需要下很多功夫的。对于专项测试,一定不要拘泥于某个工具的使用。

说一点现状,国内测试人员水平层次不齐,从业人员可能会很多,但优秀的测试人员很少,感觉水军比较多。

对于流程方面而言,很多公司都不具备较完善的流程,测试人员夹在其中,会感觉很难受,努力适应并尽力规范搞定它。