引言
内容已经有了,可是标题想了好久,最终仍是决定用这个。简单清楚明了——总结一场失败的自动化测试案例。前端
文笔欠佳,若有阅读不适,请见谅!java
自动化测试
现在,软件测试行业里,人人都在讲自动化测试,人人都在作自动化测试。若是谁说本身不会自动化测试,都很差意思去面试。如今各大公司招聘信息都是必须会自动化测试,一部分公司招人只招测试开发。甚至有些大头公司都不分测试与开发两个职位。python
因此,绝大部分公司都有人在搞自动化测试,甚至有一部分公司有一套成熟的自动化测试体系。你能够把它当作标准化流水线,相似如今讲的Devops。程序员
这里,我讲的固然是我在公司的一次自动化测试体会。因为保密协议,这里简单介绍:web
背景
公司是一线大厂的子公司,也能够称为合做伙伴。 相似华为旗下的荣耀。公司去年年初,因为业务愈来愈繁多,因此人员也是疯狂扩展,因此迭代至关频繁,标准是一周一个迭代,紧急小迭代,也有过两三天的时候。有人会说怎么作到的,拼人啊,加班啊。面试
测试团队
先说咱们测试团队吧,扩展后测试团队人数大概是40左右,其中职位有自动化测试,测试开发,性能测试,安全测试。惟独没有测试工程师。由于公司不招单纯的功能测试。sql
有人可能会质疑,那业务测试谁来作?数据库
在这里,咱们公司业务测试全职测是自动化测试,而测试开发是专职于测试体系建设中。性能和安全测试有时候会支援业务测试,可是他们也是专职于性能和安全方面的测试,面向全公司全部系统。编程
测试体系发展
起初测试团队是没有对测试技术体系思考,你们作自动化测试都是各自作各自负责的业务系统那一块,用的工具与方面各色各样,编程方面大体分两派java和python。安全
这种分散的自动化测试带来的弊端就是:
一、数据没法可视化;
二、脚本维护难;
三、增长了学习成本;
四、易用性、移植性差;
这种分散的,小做坊形式的很快就不适应快速迭代的需求及市场变化。最核心的一点是,部门领导没法向老板展现数据。通俗的来说,就是没法向领导展现咱们测试团队存在的价值。
嘴巴说,谁都会。可是,领导想看数据,那么平台是惟一秀出测试团队工做中沉淀下来的数据的途径。这样有了数据,团队的KPI就出来了。
你说你每天在测试,每天在作自动化测试,作了多少,效果如何。领导不可能一个个找大家去统计,去查看。无论你脚本写的多优秀,框架设计得多么出神入化。终究没有所谓的正规化平台好。
而后,就这么定了。几位测试开发大神,在领导的安排下,通过多番讨论的设计方案,写了一套后台是Java的自动化测试平台。这里说明一下,只因此是Java,由于公司是Java系统。
测试平台
时至今日,平台已经完善得差很少了,该有的都有,没有的也有了。简单说一下平台的功能:
一、接口测试;
二、UI测试(app和web);
三、性能测试;
四、流量监控;
五、接口覆盖率统计;
六、安全测试;
七、代码质量扫描;
八、生产发布卡点;
....
主流的功能就是这些,其余小功能我就不一一列举了。这套平台已经集成了软件测试中绝大部分的测试技术在里面;能够算得上一套标准的流水线了。
之前会自动化测试会以为高大上,如今平台搭建起来了,而且已经维护了1万左右的测试用例在上面了。是否是更加牛逼了?
答案我不知道平台搭建后是否真正牛逼了,可是它的建设至少对测试团队的影响有以下几点:
一、增长了团队的技术含量(至少领导不会认为咱们只会点点点);
二、提升了团队的做战能力;
三、提升了测试效率(因人而异);
四、下降了成本(待查);
五、提升了产品质量(待查);
六、下降了学习自动化的难度;
...
上面只列了六点,对于咱们测试团队的影响,也算人们口中常说的自动化测试的意义。其实还有不少,就不说了。
自动化测试现状
平台是完善好了,前面说了,平台已经维护了1万左右的接口测试用例,其余数据我暂时没看。显然平台健壮性是毋庸置疑的,易用性也很好,入门简单。
那么问题来了,对于迭代频繁的项目,咱们在何时去编写接口测试用例呢?
这种问题,绝大多数的人都知道,常规的回答不限于这些:
一、接口测试需求评审了(绝大多数是没有);
二、什么开发接口开发好了,开发提供了接口文档之类的,咱们就能够去平台维护接口测试用例了;
三、开发自测经过,代码提交;
...
...
这些回答都很标准,很理想。可是,你有没有想过,现实是很骨感的,就是会出现以下情形:
现状一:
版本变化得让你根本没时间维护的时候,你只有加班抽时间来维护,并且这种状况只有在领导发话了,你们才会去维护上去。有些人因为业务线确实忙,因此没维护,有些是本身写脚本,根本不想维护上去。固然也有人主动的去维护。
针对这个现状,领导又出必杀技,将接口测试用例设计和覆盖率的指标定下来,而且放到KPI考核项里去。
KPI大家都懂,这里就不讲述它的做用了。这个大招一放,你们都自觉的去平台上维护了。
现状二:
现状二就是现状一的延伸版,就是每次版本有新增的接口后,你们为了KPI会主动上去维护。而后有一大部分人也仅仅上去维护此次,后面版本接口有变动,也不会花时间去更新已经维护上去的接口。
其中缘由,有些多是真正的忙,没有时间。有些可能由于懒,不想去维护。总而言之,测试团队中有一部分人是没有去更新接口测试用例的。
现状三:
谈到自动化测试的用途时,你们都会记得其中一个是用于回归测试,减小人力投入到版本回归测试中去,从而把节省出来的时间和人力,用于更多的业务测试或者其余测试中去。
可是,现实倒是,在版本变动中,真正去执行之前维护的接口测试用例来回归测试的人太少了。据我观察和了解,在短时间迭代中,上个迭代维护的用例,这个迭代没人会去跑,哪怕只用一分钟的时间。
出现这种状况,一方面因为自信,太自信于以为以前的接口没有变更,不必去跑,另外一方面,时间过短,又要交付测试,功能测好,直接就进入产品&业务验收环节。就把这一步省略掉。
固然,还有其余不少缘由,这里不细说。结果都是同样,没有去维护历史数据。
现状四:
自从公司招进外包测试后,如今部分项目测试工做分配以下:
测试工程师专门负责设计用例,而后交给外包团队来将这些用例再翻译成测试脚本,这样的作法,效率不低下才怪。
首先外包同志不熟悉业务线,直接转化,仍是得从了解业务开始。
其次功能测试用例直接翻译成自动化测试脚本存在重复性劳动,同时也会出现场景遗漏,场景不可用的状况。
总而言之,这种作法收益大大低于投入。
正确的姿式是:测试工程师本身就将测试脚本交付出来。对于那些全栈工程师而言,最正确的姿式是:开发人员本身就动手将测试脚本写出来。根据我对微软的了解,微软的 Visual Studio 团队,就是这么作的,他们根本就不区分开发和测试。
现状五:
谈自动化测试的时候,咱们常常会讲到它的优势,其中一个就是下降错误率,发现人工没法发现的缺陷。那么,在这里统计的结果,咱们作接口测试真正发现的缺陷是屈指可数,百里挑一的。
有的甚至一个都没有。固然接口测试自己也是有局限性的,他不可能彻底代替手工去发现手工测试的缺陷。
这里只讲它的现状...
现状六:
...
...
综上所述,还有不少现状,我这里不一一列举,能够看出来,出现这种想象,一方面是因为我的缘由,测试的责任和态度。
一方面领导要求全部项目都要作接口自动化测试,历来不评估哪些项目适合作接口自动化测试。
有点盲目跟风,作了自动化测试就闪光辉,而实际带来的价值,倒是0。
还有一方面,也是关键的一点领导对自动化测试管理方面的欠佳,光靠KPI来触发是不行的。
失败的背景
上面已经讲了,目前公司自动化测试存在的广泛问题。
如今从我这个小团队来说,项目要上阿里云,就是系统上阿里云,至于什么缘由,就不说了,涉及保密协议。
系统上阿里云,固然没有那么简单,全部与系统相关的服务、数据库、中间件、流量等等,相对于迭代版本,这是一次比较大的变动过程。
而后,咱们测试在里面承担了什么角色呢?
自动化测试在此次迁移的价值会是怎样呢?
失败的经历
项目上云,固然咱们测试要保证项目上云后,全部功能都能正常使用。可是切换的那一段时间,你有多少时间去验证全部的功能都正常呢?
只有两三个小时,一年积累下来的功能,两三个小时如何验证完呢?
这个时候就是自动化测试该上场了。
这个项目自动化测试交给外包维护了,是在咱们测试平台上维护的,主要是维护WebUI功能测试用例。接口测试用例是咱们几个在维护。
到了那一天凌晨,你们都准备好了,准备上云。而后验证。
最后发现,没有维护一个WebUI测试用例(生产环境)。
临近上云的几个小时前,我问他维护了多少用例,他说测试环境维护了,生产环境没有。
我当时傻眼了,由于这个外包是专职安排弄UI自动化,用于上云验证。云上UI前端框架和云下前端框架是不同,也就是页面元素不同,因此测试环境维护的用例,根本没法在生产环境使用。
而后咱们这边因为时间太赶了,接口测试用例尚未更新到云上环境的域名以及调试好。这个失职也是在于我。
致使,咱们此次上云验证,没有跑过一个自动化相关的用例。
简单来讲,等于此次上云,咱们用于回归测试的自动化测试相关的用例及脚本,没有一个。
可是,咱们投入在自动化测试的时间,差很少跟咱们业务测试用例编写的时间趋于一致。
投入与产出是1比0的,结果是惨不忍睹。
咱们4个测试,靠着经久不衰的手法,一路闪电带火花的点点点,来验证系统全部功能是否在云上正常。
一直验到次日上午人家来上班...
假设,咱们准备充分,接口和UI自动化测试用例都遍历了全部功能,咱们也不至于熬了一个整整通宵,也不会这么辛苦,这么累。
失败总结
通过此次项目上云,发现了平时咱们打着自动化测试的口号:降本增效,提升质量。而到了实际要用时,却发挥不出一点做用。固然,这里有不少缘由,有我的,也有团队管理方面的。
可是,抛开缘由不追究,其惨痛结果,反应一个问题,自动化测试是噱头,没价值?
答案是否认的,自动化测试是有意义的,也有价值。
可是,若是你运用和管理不当,它的价值没有发挥出来,将成为一堆废铁,终将百无一用。
试问有多少人,多少公司作的自动化测试(那些BAT、TMD一线大厂里面的测试团队除外,毕竟技术与管理体系已经很是完善),真正发挥了它的价值呢?
大家有评估自动化测试(包括平台)的收益吗?
如何评估的呢?
真正达到产出高于投入的有多少呢?
学习自动化测试的人愈来愈多,自动化测试在软件测试中已是人人参与的,可是,若是不真正发挥它的做用,大家作的自动化测试,包括测试平台,可能就是:
一、为了体现测试团队的技术(面子);
二、为了团队KPI;
三、自娱自乐;
四、为了面试,拿高薪;
五、安慰本身;
六、为了装13;
七、盲目跟风,无论有没有价值,先要有这个东西存在;
...
...
综上,也有其余动机和目的,可是,在这里,我想说的是,作自动化测试,必定要在作以前思考不限于如下六个问题:
一、这个项目为何要作自动化测试?
二、什么项目适合作?
三、何时作?
四、作哪些核心业务模块?
五、谁来作?
六、如何作?如何发挥它的核心价值?
其实搞清楚1,4,6三个问题就能够了,最关键的是作好第六点,我想你作出来的自动化测试,确定在项目中获得良好的收益。
最后:
欢迎关注公众号:程序员一凡,领取一份Python自动化测试工程师核心知识点总结!
这些资料的内容都是面试时面试官必问的知识点,篇章包括了不少知识点,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。