汇智妹一直央求宝哥出版一本《Selenium+Python自动化测试》的书。经宝哥思来想去,最终还是决定免费公开出来,希望给大家带来一些帮助。
今天首先介绍下自动化测试的理论知识。

自动化测试的未来

大概在2007年的时候,开始全球掀起实施敏捷开发模式的热潮,敏捷模式流行的趋势随之引起测试领域发生了重大的变化。由于敏捷开发强调所谓的“小步快跑”方式,其迫使测试人员需要在更短的时间内完成整个测试过程,而以前纯手工测试的方式应付这种“短平快”的开发节奏变得越来越吃力,于是缩短测试周期提升测试效率则变成了能否很好支撑开发的关键。而提升测试速度和效率,自动化测试就变得比以往任何时候都显得更加重要。测试自动化成为必然的趋势,目前软件开发所流行的敏捷、DevOps、持续交付、持续部署等等,通通都是以自动化为根基的(不仅仅是测试的自动化),没有自动化是做不到的,总结Google、Indeed和Github的趋势研究 和 世界质量报告、智能与信息报告等分析的结果,未来自动化测试将有呈现9大趋势:

自动化测试基础

1.移动测试:由于移动设备数量的增加以及移动端研发技术的变化,移动应用软件对软件测试行业将产生重要的影响,主要包括有功能、性能、兼容性、安全性和易用性等方面的测试。基于移动端的自动化测试迟早会超越网站自动化测试。正是由于开源框架、移动DevOps和APP市场的不断增长,这为移动自动化测试开辟了一个很广阔的前景。
2.大数据测试:随着大数据行业的兴起,如何管理众多设备、应用和网络成为巨大的挑战,没有好的质量管理最终导致的错误,必将付出惨重代价,行业的兴起,技术的提高,对于大数据测试的人员需求必然增长。
3.接口测试:企业对微服务的投资增加,因为微服务可以在不改变其他应用程序和流程情况下进行测试,它更容易被测试和部署一个独立的功能,这使得应用软件和产品可以加快上线速度。另一方面,为了对应用程序进行全面测试,测试应用程序与其他应用程序之间的依赖关系的接口测试,也是会需求量放大。

4. Web 服务和SOA的测试自动化:Web服务和SOA体系结构的测试作为对应用程序的端到端进行性能测试也将同等重要。现在复杂应用系统的集成,要求测试系统之间消息是否能正确传输和响应,因此,将有越来越多的企业投资于SOA和Web服务的自动化测试。
5.基于TDD和BDD 的左移测试:在开发生命周期的早期开始进行测试工作,帮助软件开发在整个生命周期出现的缺陷更少。企业采用TDD和BDD方法开发应用程序,因为可以及时无错误的满足客户的要求。采用TDD和BDD的方法,开发团队可以得到与需求一样的基于开发的想法,而不会有对需求的误解而带来的麻烦。
6 持续集成的自动化:持续集成的自动化可以让开发人员将和测试人员进行持续的同步工作,帮助他们互相之间要不断的更新和反馈消息,以了解软件质量的实时状况和快速的修复缺陷。
7. 物联网和硬件测试:物联网(Internet of Things,IOT)时代越来越近,专家预测,大约有500亿个对象连接到网络上,他们将通过某种连接和传感器连接,构成了物物相息的环境。这自然会要求针对物联网众多对象进行测试,特别是要验证持续产生的、来来回回传输的数据。硬件测试也将成为物联网测试的重要趋势。
8. 安全性:用户使用移动互联网和物联网的频率大大增加,近几年安全性问题将越来越受到人们的关注,系统的安全性非常重要,它要确保没有数据和信息被黑客攻击、窃取和滥用。因此自动化测试领域中安全性测试占有重要地位。
9. Selenium自动化: Selenium在自动化测试工具中的使用率正在飞速增长。很多商业工具提供了对Selenium的技术支持,以实现web应用的自动化测试。这些工具通过整合Selenium Web Driver与后台架构,与Selenium打包在一起而发挥更好的作用,这种融合不仅可以帮助测试客户端的应用程序,而且测试那些通过API进行交互的Web应用。

什么是自动化测试

所谓“自动化测试”,一般是指在测试执行过程中,通过工具自动化的执行本由人工来执行完成的测试过程,重点强调是解决“测试执行过程”的效率;它是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动化测试的概念。
“测试自动化”,是指在测试领域中的任何方面都可以通过各种自动化的方式和手段来加快测试的效率,保证测试的质量,缩短软件交付的周期。所以它强调的阶段是整个测试的过程而不仅仅是执行过程。如测试数据准备的自动化、测试环境搭建的自动化都,测试结果分析的自动化等等,所以测试自动化范围更广。当前DevOps (DevOps(英文Development和Operations的组合)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密的合作越来越受到业界重视,在此情况下TestOps孕育而生,TestOps工程师的出现就是具备测试自动化思维的工程师,毫无疑问未来将是Dev + Test + Ops将成为主流模式。

测试自动化的目的

测试自动化的目的:最核心的目的是保证软件的质量。
第一个目的:提高软件功能的测试覆盖率。在公司做做测试时,为了保证软件无缺陷,我们需要在软件研发,版本升级,缺陷修复等过程需要进行回归测试,回归测试的工作量巨大,有限的时间很难保证完全测试完毕,所以如果通过自动化,则可以一定程度上解决问题,从而提升整个软件质量。
第二个目的:提高测试速度。主要表现在两方面:一是执行动作的连续性提高,由于把测试过程脚本话,那么执行过程就可以连续执行,即使一个熟练的测试工程师执行一次用例的时间也远远低于测试脚本的执行速度,特别是执行测试用例的数量是巨大的,这种时间的差异会越来越明显。另外一个是测试的不间断执行,自动化测试软件可以在机器上连续24小时不间断的运行(理论上只要脚本不存在内部错误,软件本身和硬件设备不出现异常),这一点是人力所无法完成的,以上两点都可以提高测试的执行周期,加快了软件版本的迭代。

第三个目的:完成人力无法胜任的测试。如性能测试,现代大型互联网系统支撑数以亿计的用户,同时并发的数量也是巨大的,2015年双十一期间,淘宝每秒钟订单创建14万笔,支付宝支付达到了每秒8.59万笔。以上场景如果在测试阶段,要求进行测试,就需要模拟14万用户并发创建订单的用户场景,难度是相当高。首先要实施14万用户在“同一时间“操作的真人版测试付出的成本就是巨大的,按照每个人1小时给50元费用,一小时的人力成本就是700万,迭代测试5次就是3500万,何况如何组织14万人能够同一时间发出动作也是巨大的挑战。所以性能测试用工具来解决是不错的方案之一。

适合测试自动化的项目

以前某咨询公司的调查分析,自动化测试脚本只有执行超过5次以上,ROI(投资回报率)才是合理的。按照这个结论,系统多年不需要升级的,没有必要自动化;系统UI变化频率过高,造成脚本维护成本非常高,每次版本功能需要变化导致ui界面变化,都需要投入资源重新开发脚本,这种投入成本过高的不值得做自动化测试。按照此分析结果很多项目都不能做自动化测试,而用“测试自动化”的思维来思考自动化测试的实施,那么就可以在测试数据准备上做自动化,在部署测试环境上自动化,看到软件系统UI变化过快,就去完成接口(API)级别的自动化测试。所以一名测试工程师要有“自动化”的意识,把“自动化”植入思维中。只要日常工作中任何能帮你减少重复劳动、提升测试工作效率的方面都可以尝试用“自动化”去帮忙解决,而不是紧紧狭义的理解“测试自动化”就是“UI的测试自动化”。测试人员随时都要用测试自动化的思维来看待项目,那么任何项目都可以做自动化。