前言
对于任何一支软件工程团队来说,软件测试都是必须认真对待的环节。自动化测试由于能够减少重复人工劳动、提高测试执行效率、加快软件发布速度,成为软件工程团队努力追求的目标。
Python是一种强大而简洁的编程语言。因为功能强大、适用面广,它在众多领域得到了广泛的应用;因为语法简洁、容易上手,它受到了许多人的青睐,其中就包括软件测试工程师。
在实际工作中,有很多测试工程师会做简单的Web UI测试,会用Python写脚本把一些重复的操作自动化,会用PyTest测试框架的基本功能来写测试用例,这些都在一定程度上减少了手工重复劳动,这是值得肯定的。但是作为工程师,我们追求的是更高效,而不是更熟练,我们需要不断学习和思考如何更好地实施自动化测试。本书用Python3作为演示语言,讲解如何实施系统、高效、可靠、易于理解和管理的软件自动化测试。
本书的内容分为三个大的板块。
第一个板块,从最基础的部分讲起,让基础薄弱的工程师对测试和编程语言有基本的认识,可以用Python把一些常见的编程需求实现出来。在此基础上,我们开始了解PyTest测试框架的基础用法,以及如何用Selenium来做简单的Web UI自动化测试。通过这个板块的学习,测试工程师有能力把一些简单的测试工作用代码来实现,减少手工重复劳动的比重,做到一定程度的测试自动化,这是对自动化测试工程师的入门要求。
第二个板块,夯实Python语言基础,讲解更深入的PyTest和Selenium特性,演示如何应用这些知识来改进测试用例的编写,改善测试框架,让测试自动化更加高效。通过对这个板块的学习,测试工程师对编程语言和测试工具会有更深入的了解,从而更高效地进行测试自动化的工作,开始有能力针对产品特性来设计自动化测试框架,这是工程团队对中级测试工程师的一般要求。
第三个板块,介绍Python的高级特性、面向对象的思想、自动化测试工具和框架的高级特性、设计思路、存在的问题和限制及其改进思路、工程团队的高质量协作、实际项目中的最佳实践等更深入的内容。这部分包含了实战中提炼出来的大量经验和总结。通过对这个板块的学习,测试工程师可以向高级工程师和架构师方向迈出坚实的一步。具备这样的技术能力和思维方式后,测试工程师可以在整个软件工程团队中起到非常积极的作用,而不只限于测试团队。
每个板块的末尾都有一个实战章节,所有的实战章节都围绕同一个测试场景展开,前后衔接呼应,有很强的延续性。每个实战章节都是针对相应的技术水平而设计的,读者可以非常直观地看到代码和设计如何随着技术水平的提升而改进。
本书尽量用生活化的场景来描述编程场景,避免正确但是晦涩的表达,避免直接抛出结论,而是用实战项目来演示软件开发和测试的思路,用简单可行的思路引导读者去一步步尝试和验证,最终得到可以理解的结果。
编程语言和工具在不断快速演进,学习解决问题的思路远比直接学习结论重要。本书针对常见的编程和测试场景讲解Python的代码实现,但是不会事无巨细地列举所有的边角语言特性。同时,本书会尝试分析常见的代码和测试思路,分析其中的不足,提出改进思路,引导读者理解实际项目中的开发、测试和协作方式。在某些内容的讲解中,本书会尝试比较Python和其他主流编程语言(比如Java),分析Python独特的语言特性,也会讲解Selenium和PyTest这样的测试框架和工具在项目实践中的问题,以及相应的解决思路。
对于相关的专业术语,本书会尽量用中文表达。但是有一些术语如果翻译成中文可能并不传神,在实际工作中也不常用,并不会帮助读者更好地理解它们的含义,对于这种情况,本书会直接用英文表达,详细介绍可参见后面的术语表。
本书希望读者有基本的编程和软件测试经验,更重要的是,要有在软件测试的职业道路上走得更远的意愿。
在写作本书的准备过程中,我得到了许多朋友的帮助和鼓励,这让我下定决心动笔,逐步厘清写书的思路,完善自己的知识体系,直至最终成书。
谨以此书,致谢宋宝华、张国强、刘勃、黄巍、王录华、卢鹏、刘涛、何昭然、曾昭毅、邱鹏、周宇、刘阳、李洁、刘静、甘露、Bryan Turner、Jeff Strater、Daniel Toms、任俊、刘保良、刘春涛、刘志鹏、郝洛玫、周丽、李真真、徐欣、陈然、张翔、张立兵、刘军、杨文镕等亲友,感谢你们在技术和职业发展上对我的帮助和鼓励。谨以此书,致谢我的“铁匠铺”篮球队的队友们,因为有你们多年的陪伴和鼓励,我才对锻炼身体没有懈怠,才能以良好的身体状态持续投入编程和写书的世界中。谨以此书,向我的父母、岳父母、兄嫂、姐姐和姐夫致谢,你们的言传身教给了我努力的方向。谨以此书,向我的儿子致远和女儿致雅表达感激,在陪伴你们成长的过程中,我的内心也成长了。谨以此书,向我的秀外慧中的“大当家”刘璐致以无尽感激,因为有你无怨无悔的付出和全力支持,我才能把工作之余本应该陪伴家人的时间腾挪出来,花费一年多的时间写完这本书。最后,对为本书做出巨大贡献的策划朱捷老师致以深深的谢意,因为有你从专业的角度不断给我中肯的反馈,我才能不断完善和打磨书稿,竭力为读者呈现有质量的内容。
限于篇幅,我无法一一列举所有想要感谢的人,但我一直心怀感恩,这些年里,我从你们身上学会了很多,收获了很多,是你们激励我不断前行,努力跟上你们的脚步。
本书基于我的学习和工作经验总结而成,但是因为现实世界里的软件项目多种多样,而我本人受限于所涉及的项目类型和技术视野,加之时间仓促,书中难免有错误和疏漏,恳请广大读者批评指正。我的邮箱是mac.xxn@outlook.com,欢迎大家和我讨论相关的技术问题,我会非常乐意和大家交流分享。