新書推薦:
《
大宋理财:青苗法与王安石的金融帝国(全彩插图本)
》
售價:HK$
109.8
《
安全感是内心长出的盔甲
》
售價:HK$
67.0
《
快人一步:系统性能提高之道
》
售價:HK$
110.9
《
我们为什么会做梦:让梦不再神秘的新科学
》
售價:HK$
77.3
《
算法图解(第2版)
》
售價:HK$
78.2
《
科学的奇幻之旅
》
售價:HK$
77.3
《
画艺循谱:晚明的画谱与消闲
》
售價:HK$
143.4
《
新民说·现实政治史:从马基雅维利到基辛格
》
售價:HK$
99.7
|
編輯推薦: |
1.本书内容详实、深入浅出、案例生动、语言简练,是软件自动化测试工程师的参考资料,也可供相关专业的在校学生、手工测试工程师和希望提升技术水平的自动化测试工程师学习参考。
2.业内多个行业专家联袂推荐。
3.读者可以在微信公众号“Python阅码场”看到更多关于软件开发和测试相关的技术文章,也可通过公众号与作者交流互动。
|
內容簡介: |
本书由浅入深地对自动化软件测试进行了阐述,内容涵盖软件测试的基础知识、Python、PyTest、Selenium、面向对象编程、自动化测试框架的设计要点和测试自动化开发实践等,本书内容组织成入门、进阶和高阶三个逐步提高的版块,每个版块都有实战编程章节,清晰呈现了技术方案的打磨和改进的过程。
本书的内容分为三个大的版块。
个版块,从基础的部分讲起,让基础薄弱的工程师对测试和编程语言有基本的认识,在此基础上开始了解PyTest测试框架的基础用法,以及如何用Selenium来做简单的Web UI的自动化测试。
通过这个版块的学习,测试工程师有能力把一些简单的测试工作用代码实现,减少手工重复劳动的比重,做到一定程度的测试自动化,这是对自动化测试工程师的入门要求。
第二个版块,夯实Python语言基础,讲解更深入的PyTest和Selenium特性,演示如何应用这些知识来改进测试用例的编写,改善测试框架,让测试自动化更加高效。
通过这个版块的学习,测试工程师对编程语言和测试工具会有更深入的了解,可以更高效地进行测试自动化的工作,有能力开始针对产品特性来设计自动化测试框架,这是工程团队对中级测试工程师的一般要求。
第三个版块,学习Python的高级特性、面向对象的思想、自动化测试工具和框架的高级特性、设计思路、以及存在的问题、限制及其改进思路、工程团队的高质量协作、实际项目中的实践等更深入的内容,这个部分包含了大量实战中提炼出来的经验和总结。
通过这个版块的学习,测试工程师可以往高级工程师和架构师方向迈出坚实的一步,而具备这样的技术能力和思维方式后,测试工程师可以在整个软件工程团队中起到非常积极的正面影响,而不只限于测试团队。
每个版块的末尾都有一个实战章节,所有的实战章节围绕同一个测试场景展开,前后衔接呼应,有很强的延续性。每个实战章节都是针对相应的技术水平而设计的,读者可以非常直观地看到代码和设计如何随着技术水平的提升而改进。
|
關於作者: |
徐西宁,毕业于华中科技大学计算机学院,资深全栈软件工程师,从事软件开发和测试工作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
|
內容試閱:
|
序 一
明代学者林希元有云:“自古圣贤之言学也,咸以躬行实践为先,识见言论次之”,强调实践是位的,而著书立说次之。唯有经过实践总结而成的书,方能为读者提供更强大的指导。本书的作者是一位长期奋战在编码一线的“老码农”,他把他多年的实践经验转化为了这样一本书,这不是一本空洞无物的Python语法教程,也不是一本纸上谈兵的软件测试教程,它更像是Python在软件测试领域的实战兵法。
在读完本书之后,我被本书的文字深深打动了,惊叹于作者在技术精湛之外,竟然有如此出色的文笔。不同于技术类图书的八股文风,读这本书,感觉像是有一个坐在你身边的码农,向你讲述他对Python的理解,对软件测试乃至软件工程的理解。本书使用了许多古今中外现实生活中的例子,生动有趣地陈述枯燥的知识点。本书的另外一个特点就是如庖丁解牛,刀法精准,在正确的位置下刀。比如,对于如何安装Python这样的操作,作者几乎只字未提,因为本书默认读者是具备这样的能力的。所以,阅读本书,就像在看一部精彩的动作片,从开场的分钟开始就从头打到尾,以至于观众全程都不愿意离场。
“人生苦短,请用Python”。现如今,Python已经广泛地应用于Web开发、人工智能、数据分析、网络爬虫、游戏开发、云计算、自动化测试与运维等众多领域。熟练地掌握Python,意味着极大地提升工程中的生产效率。也正是因为Python大流行,现在市面上的Python书籍可以说是汗牛充栋,但是,这些书籍中的绝大多数仍然采用了平铺直叙式的语法讲解方式。本书的结构则非常新颖,它采用迭代螺旋的方式,把Python的理论原理和实践技巧一个台阶一个台阶地往上提升。比如本书在第2章讲完Python的基础语法结构后,第3~5章分别是PyTest入门、Selenium入门和实战12306之入门;第6章进行Python进阶,之后,第7~9章又对PyTest、Selenium和12306进行进阶学习;第10章再对Python的高级特性进行讲解;第11章在此基础上总结测试框架;第12章则第3次对12306案例进行迭代提升。这种迭代推进、螺旋上升的方式,非常符合人类的思维习惯,毕竟我们掌握任何一门新技术,都不是一蹴而就的。回想起来,我在学习Linux内核及其他技术时,也同样是反反复复地跟同一个知识点“死磕”。但是在不同的阶段,随着自身技术深度和广度的增加,对同一事物的理解也会完全不一样。技术高手几乎都会对同一关键的技术点进行反复研究,正是这种不懈的“执拗”,才拉开了高手和一般程序员间的差距。
非常高兴看到多年好友徐西宁老师的这本书出版,相信本书必然会为促进Python,尤其是Python在软件测试领域的工程实践应用、提升一线开发人员的实战水平起到巨大的作用。
—宋宝华,知名Linux技术专家
序 二
自动化测试是软件工程中有价值的环节之一,需要有更多的高质量技术分享传播给更多人。老徐是一个能做会讲的全栈工程师,技术功底深厚,表达能力强,且极有耐心,是理想的技术书籍作者人选。
本书的主要内容是关于软件自动化测试的,作为一个全栈工程师,老徐是从更高的角度来讲解测试自动化,将编程语言、软件测试、软件工程、面向对象设计、团队协作和软件应用场景讲解得清晰而透彻。在文字描述上,本书尽量规避了“正确”但晦涩的专业术语表达,而是尽量用生活化的场景来生动讲解,这让本书在保持高技术水准的同时,也非常有特色。值得推荐!
—张国强,中科创达战略合作顾问
前 言
对于任何一支软件工程团队来说,软件测试都是必须认真对待的环节。自动化测试由于能够减少重复人工劳动、提高测试执行效率、加快软件发布速度,成为软件工程团队努力追求的目标。
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,欢迎大家和我讨论相关的技术问题,我会非常乐意和大家交流分享。
|
|