书名:全程软件自动化测试:开源实战
ISBN:978-7-115-67793-8
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 刘 冉
责任编辑 刘雅思
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
本书系统阐述自动化测试在软件开发生命周期中的理论体系与工程实践。
本书从自动化测试方法论入手,全面覆盖软件全生命周期中的应用场景,包括测试左移、持续集成、测试右移、敏捷开发和DevOps等;深入探讨自动化测试的框架选型、测试用例管理、测试策略等核心理论与方法;详细解析TDD、ATDD和活文档等自动化测试实践;对比分析单元测试、API自动化测试、UI自动化测试、性能测试和自动化安全测试等不同测试类型,并介绍在不同平台下的数十种主流开源自动化测试框架和工具。此外,本书前瞻性地探讨自动化测试在Serverless架构下的应用,以及大语言模型辅助自动化测试的理论与实践。
为增强学习效果,本书附赠近10小时的配套教学视频,使本书兼具理论深度与实践指导价值。
本书可作为软件测试工程师、质量分析师、软件开发人员和项目管理人员的参考书,也可作为高等院校计算机及相关专业师生的教学用书。
欣闻挚友刘冉先生的新作《全程软件自动化测试:开源实战》付梓在即,我展读本书样章,思绪万千,不禁回想起16年前,我提笔为自己的《轻轻松松自动化测试》撰写前言的那个下午,同样的炎热。时光荏苒,软件测试的江湖已是换了人间,但有些内核的东西,似乎从未改变,反而历久弥新。
16年前,我将Selenium、JMeter等7款方兴未艾的开源测试工具比作“天山七剑”,寄望它们能帮助国内广大测试从业者推开自动化测试这扇机遇与挑战并存的大门。回望今日,这些工具依然在自动化测试领域流行,这不仅印证了我当年的判断,更深刻地说明了开源精神与技术的强大生命力。刘冉先生的新书继承并光大了对开源工具的这份推崇,让我深感志同道合,这是一种思想的传承,更是对开源精神的致敬。
如果说《轻轻松松自动化测试》是我在“术”的层面为行业提供的一套入门兵器谱,那么我倾注更多心血的《全程软件测试》,则是我在“道”的层面试图构建的一套测试理论与实践框架。我首次提出了“全程”这一概念,核心思想是:测试不应是软件开发流程末端的一个孤立阶段,而应是贯穿于需求、设计、编码、部署、运维整个生命周期的系统性活动。
这个理念在当时或许有些超前,但随着敏捷、DevOps浪潮的席卷,“测试左移”“测试右移”等行业热词的涌现,业界实践逐渐与“全程测试”的思想不谋而合。让人欣慰的是,我的“全程”理念,不仅经受住了时间的考验,更在国内业界获得了广泛的认可,影响了一批又一批测试工程师的成长。
刘冉先生是一位技术功力深厚的同行者。他将新书命名为《全程软件自动化测试:开源实战》,这绝非偶然的巧合,而是对全程软件测试思想的深刻共鸣与实践升华。他敏锐地洞察到,自动化测试发展多年,虽已成为行业标配,却依旧面临诸多痛点:投资收益率(rate of return on investment,ROI)计算困难、维护成本居高不下、自动化用例脆弱易失效、工具与框架选型困难、团队技能参差不齐……许多团队的自动化实践,最终都陷入了“为了自动化而自动化”的泥潭。
刘冉先生的这部著作,正是对症下药的良方。它最大的特点,就是将“全程”的战略思维与“自动化”的战术执行紧密地编织在一起,直面行业的真实痛点。书中没有孤立地讲解某个工具如何使用,而是系统地回答了“在软件生命周期的哪个阶段、针对什么问题、选择哪种自动化策略与工具”这一核心问题。通过倡导“测试金字塔”分层思想,将自动化资源更科学地投入单元测试、API测试和UI测试中,有效解决了自动化成本与收益的平衡难题。书中对主流开源框架的横向对比与深度剖析,为从业者在纷繁复杂的工具生态中指明了方向,提供了极具实践价值的选型参考。可以说,这本书真正将“全程”理念落到了实处,为如何构建一个健康、可持续、高回报的自动化测试体系提供了清晰的路线图和行动指南。
尤为可贵的是,刘冉先生与我在对未来的展望上心有灵犀。他在书中开辟专门章节,前瞻性地探讨了大语言模型(large language model,LLM)赋能软件测试的巨大潜力。这正是我近年来的思考与探索方向。
我们正站在一个由人工智能定义的时代的入口。人工智能,特别是大语言模型的崛起,正以前所未有的力量重塑软件工程领域。传统的自动化测试在解决确定性任务方面功不可没,但在测试分析、测试用例设计、测试数据生成、缺陷定位分析等更需要“智慧”的层面,仍显力不从心。而大语言模型的出现,为我们弥补这一鸿沟提供了无限可能。未来的测试,将是“人智”与“机智”的高度协同,测试工程师将从烦琐的执行中解放出来,聚焦于更具创造性的质量保障策略。这正是我在我的新书《软件工程 3.0:大模型驱动的研发新范式》中所描绘的核心图景。刘冉先生的著作中对大语言模型的探讨,吹响了软件测试迈向“智能化”时代的号角。
技术的演进与思想的迭代是一个螺旋上升的过程。从拥抱开源工具,到构建全程质量理念,再到如今共同迈向驾驭人工智能的新征程,这条探索之路上有刘冉先生这样的挚友与同仁并肩前行,实乃幸事。
我相信,《全程软件自动化测试:开源实战》一书,必将成为新一代测试工程师书架上的必备读物。它不仅是一本优秀的开源工具实战指南,更是一部恰逢其时、能够引领行业突破自动化测试瓶颈的力作。
朱少民
CCF杰出会员
AiDD研发数字峰会和QECon全球软件质量&效能大会发起人
作为与刘冉共事多年的老友,能够为这本凝聚了他二十余年测试实践智慧的著作作序,我深感荣幸。在Thoughtworks共事期间,我亲眼见证了刘冉如何将敏捷理念与测试实践融合。他不仅是自动化测试领域的思考者,更是将理论转化为卓越实践的先行者,其对实践创新和自动化测试的执着追求令人钦佩。
当前,软件行业正经历前所未有的变革。随着系统复杂度的指数级增长,传统的质量保障方式已难以应对快速交付的挑战。本书系统地构建了自动化测试的全景知识体系,从测试左移到测试右移,从持续集成到敏捷测试,不仅涵盖了测试策略与框架选型的核心要点,更深入探讨了工程实践的关键细节。无论是对于测试工程师、质量专家,还是开发人员或项目经理,这本书都将成为不可或缺的实践指南。
特别值得关注的是,本书以前瞻性的视角探讨了人工智能在测试领域的革命性应用。大语言模型正在重塑测试需求分析、用例设计、代码生成等关键环节,就像为测试人员打造了一套“智能战衣”。书中也客观分析了大语言模型在数据质量、资源消耗等方面的局限。通过理性分析,帮助我们思考如何驾驭大语言模型,使其成为提升测试效能的强大助力。
本书最可贵之处在于实现了“术”与“道”的完美统一。它不仅传授了自动化测试的工具和技术(“术”),更阐释了质量保障的核心理念和方法论(“道”)。这种理论与实践的结合,为读者构建了一套完整的认知体系。
我相信,这本书将成为推动行业进步的重要力量。它不仅能帮助读者提升专业技能,更能启发我们对质量保障本质的思考。让我们跟随刘冉的指引,穿上人工智能赋能的“智能战衣”,共同开创软件质量的智能新纪元!
肖然
Thoughtworks全球数字化专家
中关村智联联盟秘书长
在我2007年入职瑞士的Esmertec公司时,我被公司自主开发的持续集成流水线和其上持续执行的拥有1万多个自动化测试用例的测试平台TCK所震撼,开发软件居然需要写这么多自动化测试用例,并且可以全天候24小时持续执行如此大量的测试用例。2013年我进入Thoughtworks公司以后,开始接触敏捷测试、持续交付和质量体系等各类先进的方法论和实践,并且开始持续服务于各类企业。我发现自动化测试一直是企业的薄弱环节,其中原因很多,有管理的原因,也有技术的原因。然后我就开始通过写文章和对外公开演讲来梳理我所学到和通过实践获得的各类关于自动化测试的知识,希望帮助更多的企业解决自动化测试的问题。我将过去 20 多年工作中对自动化测试的所学、所思、所悟都写入了本书,希望能帮助更多的人和企业。
在很多企业中,自动化测试被认为技术门槛和成本都较高,这导致许多测试用例仍然需要手动测试,因此出现了大量的手动测试人员,降低了软件开发的效率。然而,随着开源自动化测试框架、工具和基础设施的大量出现和普及,自动化测试的实施成本逐渐降低,自动化测试的技术也越来越成熟,实施越来越容易。本书的目标之一是帮助读者了解并学习自动化测试的各种方法论和实践经验。
在众多的开源自动化测试工具和框架中,找到适合自己项目的自动化测试工具和框架是一项非常困难的任务。首先,你需要了解备选自动化测试工具和框架的各种特性,对同类或相似的自动化测试工具和框架进行横向比较。然后,你需要根据自己团队的技术能力和资源情况选择一款适合自己项目的开源自动化测试工具和框架。本书对比介绍数十种主流的自动化测试工具和框架,希望能够帮助读者做出合适的选择。
许多项目的自动化测试实施困难或效果不佳,往往是由于没有综合考虑各种因素,选择了错误的自动化测试类型,并设定了远高于现实情况的预期。这使得自动化测试的效果看起来“事倍功半”,导致没有充足的理由推动管理者选择投入自动化测试,最终导致自动化测试无法成功实施。本书针对自动化测试过程中的各个难点进行阐述,帮助读者解决自动化测试的实施难题。
现在很多人越来越注重“道”和“术”,却忽略了“器”的重要性。例如,对于自动化测试,很多人没有了解和熟练掌握自动化测试框架和语言,就贸然选择一个自动化测试框架来实施自动化测试,当遇到框架的局限时,就开始抱怨自动化测试难,导致自动化测试无法继续实施。对此,我们应该对自动化测试有正确的认知:“道为器之本,器为道之末。据器而道存,离器而道毁。”只有正确认识到自动化测试的重要性,才能真正提高软件开发的效能。
本书前3章系统阐述软件开发生命周期中的自动化测试方法论;第4章至第8章深入剖析单元测试、API自动化测试、UI自动化测试、性能测试和自动化安全测试领域的各类开源自动化测试工具和框架,并提供专业的对比分析;第9章探讨特殊场景下的自动化测试技术,包括猴子测试、变异测试、精准测试,以及微服务、大数据、数据库等系统的开源自动化测试工具和框架;第10章和第11章聚焦前沿技术,分别介绍Serverless架构和大语言模型在自动化测试领域的方法论和实践知识;第12章展望自动化测试的未来。
为便于读者实践,我特别录制了配套视频课程,讲解书中核心方法论,并针对每类测试选取代表性框架进行实操演示。读者可扫描相应章节二维码观看视频。对于书中所使用的开发环境的准备,读者可扫描以下二维码观看。本书将持续更新视频资源,读者也可在此页面持续关注。

扫码看视频- 环境准备
读者可在GitHub网站中搜索RanManSoft,在用户GhostCoder的主页获取本书配套源代码。
限于个人水平,书中难免存在疏漏之处,恳请广大读者不吝指正,以便后续修订完善。衷心希望本书能帮助读者为团队甄选合适的测试工具,构建高效的自动化测试体系,切实提升项目质量与效能。
衷心感谢我在Thoughtworks公司的领导和前同事们,特别是肖然、张凯峰、熊节、马腾、林冰玉、余晓南、覃宇和马强等。他们不仅传授给我宝贵的软件测试与质量管理知识和经验,更鼓励我通过写作和演讲来总结实践经验,为本书的诞生奠定了重要基础。
特别感谢测试领域的专家朱少民、茹炳晟、陈磊和吴骏龙等。与他们的合作著书经历让我积累了丰富的写作经验,增强了独立创作的信心。朱少民老师的图书《全程软件测试》也给了我很大的启发和帮助。
由衷感谢人民邮电出版社编辑刘雅思女士,正是她专业、细致的审校和建议,才使本书得以顺利出版。
特别感谢我的妻子,她悉心照料我们可爱的儿女,为我创造了宝贵的写作时间,让我深刻体会到“家和万事兴”的真谛。
本书由异步社区(https://www.epubit.com)出品,社区为您提供相关资源和后续服务。
本书提供如下资源:
● 配套源代码;
● 开源工具和框架列表。
要获得以上配套资源,您可以扫描右侧二维码,根据指引领取。
您也可以在异步社区的本书页面中点击
,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。
当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,点击“发表勘误”,输入勘误信息,点击“提交勘误”按钮即可(见下图)。本书的作者和编辑会对您提交的勘误进行审核,在确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

本书责任编辑的联系邮箱是liuyasi@ptpress.com.cn。
如果您对本书有任何疑问或建议,请您给我们发邮件,并请在邮件的标题中注明本书书名,以便我们更高效地做出反馈。
如果您有兴趣出版图书、录制教学视频,或者参与图书的技术审校等工作,可以给我们发邮件。
如果您来自学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以给我们发邮件。
如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接通过邮件发给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。
“异步社区”(https://www.epubit.com)是由人民邮电出版社创办的IT专业图书社区。异步社区于2015年8月上线运营,致力于优质学习内容的出版和分享,为读者提供优质学习内容,为作译者提供优质出版服务,实现作者与读者的在线交流互动,实现传统出版与数字出版的融合发展。
“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书品牌,依托于人民邮电出版社计算机图书出版的积累和专业编辑团队,相关图书在封面上印有异步图书的Logo。异步图书的出版领域包括软件开发、大数据、人工智能、测试、前端、网络技术等。
在开始深入探讨自动化测试的具体内容之前,需要明确一个基本问题:到底什么是软件自动化测试?很多人对自动化测试的理解可能还停留在“用工具录制测试脚本”这样的简单层面。实际上,自动化测试已经发展成系统化的工程实践。本章将从基本概念出发,帮助读者建立对自动化测试的全面认识。
“什么是软件自动化测试?”也许很多人的回答是:“使用自动化测试工具或者编写自动化测试脚本来自动测试软件。”还有一些权威网站,比如维基百科(Wikipedia),是这样定义的:
“在软件测试中,自动化测试指的是使用独立于待测软件的其他软件来自动执行测试、比较实际结果与预期并生成测试报告这一过程。在测试流程已经确定后,自动化测试可以自动执行一些重复但必要的测试工作,也可以完成手动测试几乎不可能完成的测试。对持续交付和持续集成的开发方式而言,测试自动化是至关重要的。”
这些回答都是正确的,涉及软件自动化测试的基本关键点。然而,软件自动化测试远不只是使用测试工具或者编写一些测试代码这么简单,就像软件开发本身也不仅是编写代码那么简单。
本书将软件自动化测试分为狭义的自动化测试和广义的自动化测试两种。
● 狭义的自动化测试主要指通过使用测试工具和编写测试代码来自动执行测试用例,以测试被测系统。
● 广义的自动化测试可被视为一个独立的软件项目,需要经历软件开发生命周期的各个阶段,包括项目规划、需求分析、架构设计、编码实现、系统测试等。即使只使用测试工具而不需要编写测试代码,这些阶段也是必不可少的。在一些小型项目中,这些阶段可能较为简短,工作量也较小,即使完成了也不会让自动化测试开发人员产生太强烈的感知。然而,在许多大型项目中,由于自动化测试的规模很大,复杂度也很高,所以项目规划、需求分析、架构设计、编码实现等阶段有显著的区别。
要进行广义的自动化测试,首先需要对软件项目的各个阶段进行全面的分析。通过这些分析,可以有效制订自动化测试的策略和计划,以获得合理的投资收益率(rate of return on investment,ROI),确保自动化测试得到有效实施并达到预期的结果。
根据自动化测试策略和计划,我们需要设计一个适合项目的自动化测试架构,并进行相关的调研和预演工作。在进行架构设计时,可以选择成熟的自动化测试工具,如Selenium IDE、Postman和JMeter等,也可以选择需要二次开发的自动化测试框架,如Cucumber、JUnit、Mocha、Gatling、Selenium WebDriver、REST Assured、Cypress和Playwright等。如果现有的自动化测试工具和框架不能满足项目需求,那么需要重新开发适合自己项目的自动化测试工具和框架。尽管重新开发的情况可能不常见,但在某些项目上确实会发生。自动化测试工具和框架众多,我们需要了解并熟悉各种自动化测试工具和框架的特点,以便选择适合项目的自动化测试工具和框架。
制订自动化测试策略和计划后,需要进行项目的开发和测试。其中,开发的主要内容包括使用自动化测试工具实现测试用例的自动化,或者通过编写代码实现测试用例的自动化。在开发过程中,需要对自动化测试本身进行测试,类似于开发人员编写完代码后进行的自测。出于对成本的考虑,一般不会有额外的人员对自动化测试进行二次测试,因此自动化测试开发人员需要确保自动化测试的准确性和有效性。如果自动化测试代码存在问题,但在自测期间没有发现,那么这些问题在后续环节将很难被发现,从而导致自动化测试失效,最终无法发现被测项目中的漏洞。为了解决这个问题,业界引入了变异测试(mutation test)的概念,用于检测自动化测试的有效性。
在自动化测试代码开发和测试完成后,需要对其进行上线和运维。上线的过程包括将自动化测试部署到测试环境,并运行自动化测试来对被测系统进行测试。而运维需要监控正在运行的自动化测试,对测试结果和日志进行分析,尤其是在大规模的自动化测试中。
无论是狭义的自动化测试还是广义的自动化测试,它们的核心都是基于软件开发的软件测试需求。因此,要想做好自动化测试,需要从软件开发的角度来看待它。
随着软件规模的扩大和涉及领域的增加,软件测试变得越来越复杂,工作量也越来越大,如人工完成大量的低级接口的回归测试就非常耗时且困难,或者在寻找某些类型的缺陷时效率低等。自动化测试可以有效改善软件测试工作效率低的问题,自动化测试还具有以下优点。
● 提高测试效率:自动化测试可以在很短的时间内执行大量测试用例,比手动测试快得多;自动化测试可以同时在多个环境或平台上并行执行测试,从而进一步提高测试效率;自动化测试缩短了开发和测试周期,可以帮助团队更快地交付高质量的软件。
● 提高测试准确性:自动化测试消除了手动测试中常见的人为错误,提高了测试结果的准确性和一致性;测试代码可以精确复现测试场景,确保每次测试执行的一致性。
● 节省测试成本:自动化测试减少了手动执行重复测试的劳动,节省了测试人员的时间和成本;尽管初始投资较高,但长期来看,应用自动化测试可以大大降低维护和测试成本。
● 增强测试的可视化效果:自动化测试工具通常会生成详细的测试报告和日志,帮助测试人员快速定位和分析问题,还可以实时监控测试执行情况,帮助测试人员及时发现和处理异常。
● 提高测试灵活性:在每次代码变更后,可以快速执行回归测试,确保新代码的稳定性;还可以结合自动化部署工具,实现从测试到发布的全自动化流程。
● 提高测试覆盖率:自动化测试可以覆盖更多的代码路径、功能和场景,包括边缘情况和极端输入;自动化测试可以完成一些人工难以完成的任务,如并发性能测试和模糊测试;还可以轻松运行全面的回归测试,确保新代码不会引入新的缺陷。
虽然现代的软件自动化测试已经发展到一个相当成熟的阶段,但仍然存在一些问题,其中最关键的是缺乏专职的测试人员来测试自动化测试代码,也没有另一套自动化测试代码来对开发出来的自动化测试代码进行测试。因此,自动化测试开发人员需要具备足够的技术能力和经验,通过自测来确保自动化测试代码的质量。
通俗地理解,“测试自动化”与“自动化测试”的意思是相同的,这里并不想咬文嚼字,但是为了说明两种自动化测试策略,暂时用这两个名称来区分它们,就像敏捷开发中的“做正确的事情”和“正确地做事情”一样。
测试自动化策略主要是指团队已经拥有了各种类型的手动测试,例如手动验收测试、手动端到端测试、手动探索式测试、手动压力测试、手动安全测试等。自动化执行这些已有的测试,能够有效地减少手动测试的时间成本和人力成本。这种情况下的目标是快速地将手动测试自动化运行起来,为了测试而将测试自动化[1]。因此,一般的解决方案都是选择一些易于使用的自动化测试工具,并对此工具进行简单配置,然后手动操作此工具来进行测试工作,也可以针对此工具编写少量代码来扩展此工具的测试功能如Selenium IDE、Postman、JMeter等工具,这样的解决方案可以称为测试工具化(testing as tool)。
[1] 使用工具进行调试不属于测试自动化的范畴。
自动化测试策略主要是指团队已经充分认识到自动化测试的优势,并且拥有足够的意愿以及技术能力,能够投入足够的时间成本和人力成本,从整体上思考整个系统的测试策略和测试架构,以实现更为有效的测试。在这种情况下,应该尽可能地选取功能强大且支持二次开发的自动化测试工具,或者团队自行开发合适的自动化测试工具,主要通过编写代码的方式来构建自动化测试体系。例如,使用Selenium WebDriver、Appium、Gatling和REST Assured等自动化测试框架编写自动化测试代码,可以称为测试代码化(testing as code)。
以上两种自动化测试策略在现实中往往是混合使用的。虽然本书将测试自动化和自动化测试作为两种极端策略进行对比,但二者并不存在绝对的优劣,只有适用与否的问题。在实际项目中,不同的团队会以不同的比例使用这两种策略,通常技术能力较差的公司会更多地依赖测试自动化,而技术能力较强的公司则更多地使用自动化测试。
对于初创团队,由于时间成本和人力成本的限制,可能开始时只能使用测试自动化。随着系统复杂度的增加和团队规模的扩大,他们会逐渐思考如何根据自身系统特点开发自动化测试系统,逐步实现各个层级的自动化测试。但他们仍会主要采用工具和自主开发混合的方式。
对于大型的传统软件开发团队,他们的产品已经非常成熟,拥有大量手动或者工具辅助的自动化测试。但是,系统规模增加导致人力成本和时间成本的增加,他们不得不先将一部分相对容易自动化的测试用例先进行自动化,然后根据子系统的重要性和测试层次的优先级,将优先级高的重要子系统的测试向全代码级别的自动化测试推进。
对于大型新型互联网系统的团队,由于团队中人员技术能力和测试架构意识都非常强,他们在考虑自动化测试时会首先选择合适的自动化测试框架来编写自动化测试代码,如果没有合适的则自己开发。对于一些不是很重要的系统或测试类型,他们可以使用测试工具辅助手动进行测试。
当我们意识到并理解自动化测试策略的两种极端分类后,需要根据项目的实际情况来定义自动化测试策略。可以以使用工具为主、自主开发为辅,或以自主开发为主、使用工具为辅,也可以全部使用工具,或全部自主开发。笔者总结了自动化测试策略四象限,如图 1-1 所示。无论选择哪种策略,都要以降低成本以及使测试可复用、易维护、效率高为目标,尽量避免只是为了将测试简单自动化的情况。

图1-1 自动化测试策略四象限
全程软件测试已经成为一个成熟且比较普及的概念。但是由于自动化测试技术本身具有一定局限性且普及率较低,全程软件自动化测试对许多团队来说可能还是一个未知或者可望而不可即的实践。随着自动化测试技术的发展,全程软件自动化测试越来越容易实现。例如,Cucumber、Concordion等基于自然语言的自动化测试框架的出现,使得需求分析阶段能够产生自动化测试可以直接使用的测试用例;Cypress、Playwright等高速、稳定易用的Web UI自动化测试工具的出现,使得基于Web UI的大规模功能测试加入日常持续集成流水线成为可能;Docker、Prometheus和Google Analytics等基础设施技术的成熟,使得在产品环境中实施并监控自动化测试更加容易和安全。随着敏捷开发和DevOps的普及,全程软件自动化测试的思想越来越容易被接受,实施成本也会越来越低,全程软件自动化测试有望真正实现。并且通过以下几个实践,可以进一步提高全程软件自动化测试的完成度。
测试左移是预防缺陷最有效的方法之一,其核心理念是尽早发现缺陷并降低修复成本。修复一个缺陷的时间成本和人力成本会随着发现时间的延迟而增加,测试左移通过将测试工作提前到软件开发生命周期的早期阶段,如需求分析阶段,可以利用测试分析的各种方法来帮助业务人员发现不合理的业务需求,尽可能地避免将这些问题遗留给开发人员。同时,测试人员也可以帮助开发人员理解业务需求,帮助开发人员发现其在业务理解上的盲点,从而减少开发人员的错误理解,最终减少缺陷的产生。
持续集成(continuous integration,CI)是敏捷开发中非常重要的实践之一,其核心理念是开发人员频繁地将工作产出(如代码)集成在一起,并通过各种方法(如编译、测试等)验证它们集成后是否存在问题。这种实践可以尽早地发现软件中的问题,但发现问题的时间点和数量在很大程度上取决于其中自动化测试执行的速度和覆盖率。因此,自动化测试在持续集成实践中起着至关重要的作用。
随着软件的技术架构、基础设施和业务的复杂度持续、高速增长,软件在产品环境中出现问题的情况越来越多。测试右移可以快速发现产品环境中的问题,从而减少线上的损失;针对产品环境中发现的问题,也可以增加特定的测试用例并将其加入自动化测试中,从而提高自动化测试的覆盖率和有效性。
敏捷开发和DevOps是现代软件开发、交付和运维中非常流行和重要的两个思想。经过多年的发展,它们都涵盖大量的方法及实践。在它们共同的实践中,自动化测试占据了非常重要的位置。可以说,如果没有自动化测试,敏捷开发就不能实现敏捷,DevOps几乎无法做到其希望的快捷、频繁和可靠的软件交付。
要想真正实现全程软件自动化测试,在软件测试中,需要通过测试左移进行自动化测试策略的分析和设计等,在开发过程中实施持续集成,在系统上线后通过测试右移在产品环境中进行自动化测试,同时结合敏捷开发、DevOps的方法和实践。
软件自动化测试一直备受诟病,被认为成本高、难以实施。这项工作确实需要一定的成本,且需要开发人员和测试人员具备专业的自动化测试开发技能,包括代码编写技能、软件设计技能、熟悉测试工具和框架等。然而,随着软件规模和复杂度的增加,以及交付周期的缩短,团队必须实施自动化测试来应对这些挑战,以确保软件的质量并按期交付。
现代自动化测试技术的蓬勃发展,使得在软件开发生命周期中的各个阶段都可以使用自动化测试技术进行一定程度的自动化测试。随着技术的不断发展和普及,各个阶段的自动化测试程度会越来越高,最终实现全程软件自动化测试。