首页>参考读物>计算机科学与技术>软件工程及软件方法学

软件自动化测试实战解析:基于Python3编程语言
作者 : 徐西宁 编著
出版日期 : 2021-07-13
ISBN : 978-7-111-68561-6
定价 : 89.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 350
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书由浅入深地对自动化软件测试进行了阐述,内容涵盖软件测试的基础知识、Python、PyTest、Selenium、面向对象编程、自动化测试框架的设计要点和测试自动化开发实践等,本书内容组织成入门、进阶和高阶三个逐步提高的版块,每个版块都有实战编程章节,清晰呈现了技术方案的打磨和改进的过程。

图书特色

由浅入深地解析软件自动化测试开发的工具、方法、流程和提升效率的思路
通过Python工程实例,帮助读者掌握软件自动化测试开发的编程技巧,以及如何设计、实现基于业务逻辑的测试框架

图书前言

对于任何一支软件工程团队来说,软件测试都是必须认真对待的环节。自动化测试由于能够减少重复人工劳动、提高测试执行效率、加快软件发布速度,成为软件工程团队努力追求的目标。
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,欢迎大家和我讨论相关的技术问题,我会非常乐意和大家交流分享。

上架指导

计算机\软件测试

封底文字

本书由浅入深地讲述了软件自动化测试的设计和实施,其中包含作者大量的实战经验、见解和思考。通过阅读本书,相信读者能够更深刻地理解软件自动化测试,在这个领域更好地成长。
—— 王录华 腾讯企业IT部技术负责人


本书为读者讲解了软件自动化测试的核心知识,包括软件测试的基础知识、Python、PyTest、Selenium、面向对象编程、自动化测试框架的设计要点和测试自动化的最佳实践等,为软件测试团队提供了实现和改进测试自动化的方法和思路。
本书内容组织成入门、进阶和高阶三个逐步提高的板块,前后衔接呼应,每个板块都有实战编程章节。书中展示了如何利用编程语言的特性和成熟的框架工具进行高质量的软件自动化测试。
本书可以作为软件测试工程师的入门和进阶教程,也可以作为全栈软件开发工程师的参考用书。

作者简介

徐西宁 编著:徐西宁,毕业于华中科技大学计算机学院,资深全栈软件工程师,从事软件开发和测试工作15年,先后任职于Autodesk、EMC、每锐软件等公司,在自动化测试框架设计、自动化测试流程优化、持续集成、Web开发等方面有丰富的经验,是一位活跃的开源软件和技术分享实践者。

图书目录

序一
序二
前言
第1章 软件测试基础 1
1.1 什么是软件测试1
1.2 软件测试的类型2
1.2.1 按测试对象的颗粒度划分2
1.2.2 按内部逻辑的透明度划分3
1.2.3 按执行阶段划分4
1.2.4 按执行方式划分4
1.3 敏捷开发模式5
1.4 测试经济学6
1.4.1 测试是必需的吗6
1.4.2 放弃追求完美7
1.4.3 关注核心功能8
1.4.4 等价类划分8
1.4.5 边界值分析9
1.4.6 用机器取代人工10
1.5 自动化测试不容易12
1.6 本章小结12
第2章 Python入门 13
2.1 世界上最好的两种编程语言13
2.2 别问我怎么安装14
2.3 解释器是什么14
2.4 初识变量16
2.5 函数基础17
2.6 代码缩进和代码块18
2.7 字符串19
2.7.1 拼接和格式化21
2.7.2 下标访问22
2.7.3 更多常见操作23
2.8 数值类型26
2.8.1 数值类型的基本运算27
2.8.2 浮点数的常见运算29
2.9 布尔值和条件判断32
2.9.1 条件判断的组合33
2.9.2 条件判断的短路34
2.9.3 条件判断的链式表达35
2.10 日期和时间36
2.10.1 生成时间对象37
2.10.2 格式化日期字符串38
2.11 list基础39
2.11.1 下标访问40
2.11.2 插入元素40
2.11.3 删除元素41
2.11.4 简单排序42
2.11.5 更多常见操作43
2.11.6 遍历44
2.11.7 元素类型46
2.12 dict基础47
2.12.1 读取48
2.12.2 插入和更新49
2.12.3 合并50
2.12.4 删除51
2.12.5 遍历53
2.12.6 key的选择55
2.13 循环56
2.13.1 while循环57
2.13.2 for循环58
2.13.3 多重循环59
2.13.4 循环的终止60
2.13.5 递归63
2.14 异常63
2.14.1 基本语法64
2.14.2 异常的类型67
2.14.3 捕获特定类型的异常68
2.14.4 主动抛出异常71
2.15 断言72
2.15.1 assertion72
2.15.2 AssertionError73
2.15.3 assert73
2.16 pip的基础用法74
2.17 本章小结76
第3章 PyTest入门 77
3.1 框架是什么77
3.2 测试框架77
3.2.1 筛选测试源文件77
3.2.2 筛选测试函数78
3.2.3 测试函数的启动79
3.2.4 成功还是失败80
3.2.5 测试报告80
3.2.6 测试前的环境配置81
3.2.7 测试后的现场清理81
3.2.8 核心功能的扩充82
3.2.9 主流测试框架82
3.3 PyTest是什么83
3.4 自动发现84
3.4.1 自动发现测试源文件84
3.4.2 自动发现测试函数84
3.5 使用断言85
3.6 测试结果解读86
3.7 测试报告88
3.8 本章小结89
第4章 Selenium入门 90
4.1 Selenium是什么90
4.1.1 Selenium IDE91
4.1.2 Selenium Grid97
4.1.3 Web Driver98
4.2 Selenium的安装配置99
4.3 用Web Driver驱动网页100
4.4 页面元素的定位102
4.4.1 简单定位102
4.4.2 CSS定位107
4.5 页面元素的常见操作108
4.6 本章小结112
第5章 实战12306之入门篇 113
5.1 测试用例设计文档113
5.2 代码实战114
5.3 代码解析116
5.3.1 审视测试逻辑116
5.3.2 用变量澄清代码逻辑117
5.3.3 DRY原则118
5.3.4 改善代码可读性120
5.4 本章小结122
第6章 Python进阶 123
6.1 基本数据类型的深入了解123
6.1.1 转义字符123
6.1.2 字符串的不可变性124
6.1.3 深入了解布尔类型126
6.1.4 set128
6.1.5 tuple131
6.1.6 整型数的设计很优秀132
6.1.7 浮点数为什么算不准133
6.1.8 Decimal,准!134
6.2 深入了解函数137
6.2.1 函数的调用137
6.2.2 函数的返回138
6.2.3 不支持函数重载139
6.2.4 默认参数141
6.2.5 可变参数142
6.3 关于时间144
6.3.1 时间差144
6.3.2 UTC时间146
6.4 面向对象基础148
6.4.1 面向对象到底是什么意思148
6.4.2 类和对象148
6.4.3 初始化函数149
6.5 模块是什么151
6.6 高级排序153
6.6.1 list的排序153
6.6.2 dict的排序157
6.6.3 自定义对象序列的排序159
6.7 复杂的遍历场景160
6.7.1 一边遍历一边修改160
6.7.2 一边遍历一边删除162
6.8 文件和文件系统操作基础165
6.8.1 路径的正确操作方式165
6.8.2 文件系统的基本操作168
6.8.3 文本文件的读169
6.8.4 文本文件的写170
6.8.5 文本文件的关闭171
6.8.6 CSV文件的读写172
6.8.7 Excel文件的读写174
6.9 浅拷贝与深拷贝176
6.10 深入了解import179
6.11 变量的作用域182
6.12 局部变量和全局变量的冲突185
6.13 __name__和__main__186
6.14 注释188
6.15 pip的工程用法190
6.16 本章小结192
第7章 PyTest进阶 193
7.1 自动发现测试类193
7.2 测试集合194
7.3 标记195
7.3.1 忽略执行195
7.3.2 条件执行197
7.3.3 期待失败的发生199
7.3.4 限时执行201
7.3.5 自定义标签201
7.4 参数化测试204
7.5 测试用例的ID206
7.6 Fixture初探207
7.7 PyTest的插件机制209
7.7.1 Hook函数209
7.7.2 PyTest插件210
7.7.3 多级conftest协同210
7.7.4 第三方插件212
7.8 本章小结213
第8章 Selenium进阶 214
8.1 页面元素的XPath定位214
8.2 页面元素的等待215
8.2.1 隐式等待216
8.2.2 显式等待216
8.3 Selenium的局限218
8.4 本章小结219
第9章 实战12306之进阶篇 220
9.1 PO设计模式220
9.2 更有针对性的显式等待223
9.3 更健壮的代码逻辑224
9.4 函数单一职责原则225
9.5 测试单一职责原则226
9.6 本章小结227
第10章 Python高阶 228
10.1 面向对象设计思想228
10.1.1 继承228
10.1.2 封装230
10.1.3 多态232
10.2 对类的深入了解233
10.2.1 析构函数233
10.2.2 访问权限控制235
10.2.3 self不是关键字236
10.2.4 实例属性和类属性239
10.2.5 成员方法和类方法240
10.2.6 类方法和静态方法242
10.3 重写244
10.3.1 如何重写244
10.3.2 重写中的代码复用247
10.3.3 重写__str__方法249
10.3.4 重写运算符249
10.4 深入了解函数252
10.4.1 函数也是一种对象252
10.4.2 内嵌函数254
10.4.3 函数装饰器255
10.4.4 不只是会装饰259
10.4.5 用Property装饰器改进设计261
10.5 None是什么264
10.6 Enum是什么265
10.7 Python不支持常量267
10.8 随机数据和时间戳268
10.9 自定义异常类型270
10.10 需要用强类型吗271
10.11 日志272
10.12 本章小结277
第11章 测试框架的设计和演进 278
11.1 代码的可读性278
11.1.1 统一的代码风格279
11.1.2 丑陋的函数名280
11.1.3 糟糕的变量名282
11.2 友好的函数设计283
11.2.1 简洁的接口283
11.2.2 操作状态的处理285
11.2.3 不要过度设计287
11.2.4 防呆288
11.3 有效管理测试资源290
11.3.1 封装微服务290
11.3.2 统一的资源入口295
11.3.3 资源的延迟加载296
11.3.4 保证资源的释放298
11.3.5 支持多环境测试300
11.3.6 容忍不稳定的测试环境302
11.4 不要引入getter和setter304
11.5 一次收集多个断言错误306
11.6 日志的支持和改进308
11.7 减少重复执行的负面影响310
11.8 数据驱动测试的设计311
11.8.1 让PyTest支持中文ID311
11.8.2 更优雅的参数化测试314
11.8.3 用YML取代JSON316
11.8.4 面向对象的测试数据317
11.9 接受一定程度的重复代码319
11.10 本章小结320
第12章 实战12306之高阶篇 321
12.1 就近原则321
12.2 用Enum澄清设计意图322
12.3 支持链式表达324
12.4 简化函数名325
12.5 封装复杂逻辑326
12.6 单例设计模式328
12.7 异常和断言的使用场景的区别331
12.8 测试用例的维护333
12.9 本章小结334
术语表 335
参考文献 336
后记 337

教学资源推荐
作者: (美)Stephen R. Schach 著 范德比尔特大学
作者: [美]Jeffrey L.Whitten,Lonnie D.Bentley,Kevin C.Dittman
参考读物推荐
作者: Donald J.Reifer
作者: [美]伦·巴斯(Len Bass),[美]保罗·克莱门茨(Paul Clements),[美]瑞克·凯兹曼(Rick Kazman) 著